Нужен ли чип MMU (модуль управления памятью) для поддержки процессором виртуальной памяти?
Можно ли эмулировать функциональность MMU в программном обеспечении? (Я знаю, что это, вероятно, окажет большое влияние на производительность).
Нужен ли чип MMU (модуль управления памятью) для поддержки процессором виртуальной памяти?
Можно ли эмулировать функциональность MMU в программном обеспечении? (Я знаю, что это, вероятно, окажет большое влияние на производительность).
Ответы:
Любой системный эмулятор, который эмулирует систему, содержащую MMU, эффективно эмулирует MMU в программном обеспечении, поэтому ответ на ваш вопрос, как указано, «да». Однако виртуальная память требует некоторого способа принудительного контроля доступа к памяти или, по крайней мере, трансляции адресов, поэтому она требует либо полной программной эмуляции процессора, на котором выполняется контролируемое программное обеспечение, либо аппаратной помощи.
Таким образом, вы можете создать систему без MMU, перенести на нее QEMU , добавить недостающие фрагменты, чтобы сделать виртуальную память действительно полезной ( например , добавить поддержку подкачки в хост-системе), и запустить операционную систему, требующую MMU, в QEMU, со всей защитой, которую вы ожидаете в гостевой операционной системе (за исключением ошибок QEMU).
Одним из реальных и старых примеров «эмуляции» без MMU, используемой для предоставления виртуальной памяти, является Z-машина , которая была способна выполнять подкачку и обмен своим кодом и данными на 8-битных системах в конце семидесятых и начале восьмидесятых годов. , Это работало путем эмуляции виртуального процессора на базовом реальном процессоре; таким образом, интерпретатор сохраняет полный контроль над макетом памяти, который «видит» запущенная программа.
На практике обычно считается, что MMU требуется для поддержки виртуальной памяти, по крайней мере, на уровне операционной системы. Как указано MMU-меньше ядра? Можно построить ядро Linux так, чтобы оно могло работать на системах без MMU, но полученная конфигурация очень необычна и подходит только для очень специфических сценариев использования (в частности, без враждебного программного обеспечения). Он может не поддерживать многие сценарии, требующие виртуальной памяти (подкачка, mmap
...).
Это зависит от того, что именно вы называете виртуальной памятью. Интересной моделью является старая модель Win16 (лучше всего известная из старой Windows 3.x, а не Windows NT). В этой модели у вас были GlobalLock
и GlobalUnlock
, LocalLock
и LocalUnlock
функции. Это была форма совместного, ручного управления виртуальной памятью. Поскольку это было сделано в (прикладном) программном обеспечении, оно не требовало MMU. И память была виртуальной в том смысле, что разблокированную память можно было перенести на диск.
Однако в модели Win16 нет защиты между различными процессами. Если другой процесс оставил данные в памяти, вы можете перезаписать их. Это не принципиальное ограничение. В наши дни с быстрыми твердотельными накопителями вы можете полностью удалить неработающий процесс из памяти и сделать это в разумные сроки.
Не обязательно иметь аппаратный MMU, если у вас есть программное обеспечение, которое может обмениваться процессами с физической памятью.
Это был режим работы ранних многозадачных операционных систем. Только один процесс находится в памяти в любой момент времени, он полностью заменяется, когда истекает его временной интервал (вы можете видеть, что это становится проблематичным для больших процессов). Содержимое памяти, видимое текущим запущенным процессом, не совпадает с содержимым любого другого процесса, и каждый из них имеет свое собственное представление адресного пространства.
Полезна некоторая аппаратная поддержка - понятие «защищенной» области памяти для собственного использования ОС (например, все адреса с набором MSB доступны только в режиме супервизора) и значение «break», указывающее самый высокий используемый адрес, но управление памятью аппаратное обеспечение не является абсолютным требованием к виртуальной памяти; это просто особенно эффективный способ добиться этого.
В оригинальных коммерческих машинах для ВМ не было MMU - в них была встроена ВМ. В настоящее время я думаю, что MMU - это всего лишь запоздалая мысль о том, чтобы поставить ВМ поверх процессоров, отличных от ВМ. VM была разработана в Манчестерском университете, и дизайнеры Burroughs были убеждены, что должны ее включить - хотя в то время она была очень инновационной.
В Burroughs B5000 (теперь это машины Unisys MCP) использовались дескрипторы памяти, которые устанавливают границы памяти - выходят за границы, и ваша программа сбрасывается (соблюдение границ является основой хорошего общества, но некоторые злоупотребляют этой привилегией, поэтому границы должны соблюдаться).
Дескрипторы содержат адрес памяти, длину блока и тип данных, а также важный P-бит или бит присутствия. Р-бит указывает, что блок находится в памяти. Н-р-бит означает, что блок находится в запоминающем устройстве, а адрес - это адрес запоминающего устройства, либо в исходной программе (код или данные), либо в ВМ (развернутые данные).
Эти машины реализовали иерархическую модель памяти. MMU, похоже, должны компенсировать недостатки плоской памяти, требуя сопоставления пользовательских объектов с плоской памятью. JK Iliffe также разработал машины ICL с этой моделью:
http://www.computerconservationsociety.org/resurrection/res74.htm#f
https://en.wikipedia.org/wiki/Burroughs_large_systems
Разница между этими машинами и большинством современных состоит в том, что они относятся к полной архитектуре системы, а не только к архитектуре процессора.
Таким образом, кажется, что MMU не только не нужны, но и системы лучше без них.
Большинство процессоров для настольных ПК, ноутбуков и серверов содержат один или несколько TLB в оборудовании для управления памятью, и они почти всегда присутствуют в любом процессоре, который использует выгружаемую или сегментированную виртуальную память .
А затем прочитайте о виртуальной памяти и о том, для чего она предназначена. Огромное виртуальное адресное пространство - не главная идея. Основная идея - кэширование / буферизация на многих уровнях.
Это далеко не просто, но этот кеш памяти TLB является важной частью аппаратного обеспечения, на котором основана подсистема mm ядра (в противном случае виртуальная машина была бы в значительной степени перегружена).
VM =
виртуальная память ИЛИ виртуальная машина. Очень разные, очень связаны.
Таким образом, ответ - нет, микросхема MMU (отдельный блок вне ЦП на материнской плате) не нужна.
Да, некоторые аппаратные MMU (в ЦП) необходимы для того, чтобы вообще думать о полезной ВМ. (Это началось с этой сегментации 8086 , для платформы x86)