Нужен ли чип MMU (модуль управления памятью) для поддержки процессором виртуальной памяти?

14

Нужен ли чип MMU (модуль управления памятью) для поддержки процессором виртуальной памяти?

Можно ли эмулировать функциональность MMU в программном обеспечении? (Я знаю, что это, вероятно, окажет большое влияние на производительность).

yoyo_fun
источник
Любой полностью работоспособный компьютер может эмулировать любой другой компьютер с достаточным снижением производительности. Или подражать любому оборудованию. Вопрос только в величине производительности.
Vality
каждый процессор сегодня нуждается в TLB, поэтому он имеет встроенный MM-блок.
Растафиле

Ответы:

22

Любой системный эмулятор, который эмулирует систему, содержащую MMU, эффективно эмулирует MMU в программном обеспечении, поэтому ответ на ваш вопрос, как указано, «да». Однако виртуальная память требует некоторого способа принудительного контроля доступа к памяти или, по крайней мере, трансляции адресов, поэтому она требует либо полной программной эмуляции процессора, на котором выполняется контролируемое программное обеспечение, либо аппаратной помощи.

Таким образом, вы можете создать систему без MMU, перенести на нее QEMU , добавить недостающие фрагменты, чтобы сделать виртуальную память действительно полезной ( например , добавить поддержку подкачки в хост-системе), и запустить операционную систему, требующую MMU, в QEMU, со всей защитой, которую вы ожидаете в гостевой операционной системе (за исключением ошибок QEMU).

Одним из реальных и старых примеров «эмуляции» без MMU, используемой для предоставления виртуальной памяти, является Z-машина , которая была способна выполнять подкачку и обмен своим кодом и данными на 8-битных системах в конце семидесятых и начале восьмидесятых годов. , Это работало путем эмуляции виртуального процессора на базовом реальном процессоре; таким образом, интерпретатор сохраняет полный контроль над макетом памяти, который «видит» запущенная программа.

На практике обычно считается, что MMU требуется для поддержки виртуальной памяти, по крайней мере, на уровне операционной системы. Как указано MMU-меньше ядра? Можно построить ядро ​​Linux так, чтобы оно могло работать на системах без MMU, но полученная конфигурация очень необычна и подходит только для очень специфических сценариев использования (в частности, без враждебного программного обеспечения). Он может не поддерживать многие сценарии, требующие виртуальной памяти (подкачка, mmap...).

Стивен Китт
источник
так что приложения виртуальных машин также имеют компонент эмулятора MMU?
yoyo_fun
Да - не обязательно как отдельный компонент, но они имеют необходимую поддержку в эмуляции.
Стивен Китт,
7
@JenniferAnderson: Некоторые современные процессоры имеют функции, которые позволяют эмулятору (частично) разгружать эмуляцию MMU на сам MMU. Например, программа, работающая внутри эмулятора, сама будет использовать несколько эмулируемых страниц памяти, эти страницы памяти, конечно, «вложены» в страницы памяти, используемые эмулятором. Как новейшие высокопроизводительные процессоры Intel, так и AMD поддерживают вложенные таблицы страниц, что позволяет эмулятору выражать эту вложенность внутри самого MMU вместо того, чтобы (дорого) эмулировать его.
Йорг W Mittag
@ Йорг, спасибо за разъяснения. Большинство гипервизоров по-прежнему имеют некоторый уровень эмуляции программного обеспечения, поэтому они будут работать без поддержки дополнительного оборудования. Я был ошеломлен аспектом вопроса «возможно ли» ;-).
Стивен Китт,
3
@JenniferAnderson: Да, эта функциональность была специально представлена ​​для паравиртуализации. (Обратите внимание, что в этом нет ничего нового, аппаратная паравиртуализация существует в мире мэйнфреймов с начала 1960-х годов.) Однако оказывается, что она может также использоваться для других интересных приложений, таких как ускорение сбора мусора (см. коллектор C4 в JVM Zing Азула для примера). Однако обратите внимание, что все это работает в обоих направлениях: точно так же, как расширение MMU с поддержкой виртуализации - это не что иное, как оптимизация производительности и виртуализация…
Йорг Миттаг
7

Это зависит от того, что именно вы называете виртуальной памятью. Интересной моделью является старая модель Win16 (лучше всего известная из старой Windows 3.x, а не Windows NT). В этой модели у вас были GlobalLockи GlobalUnlock, LocalLockи LocalUnlockфункции. Это была форма совместного, ручного управления виртуальной памятью. Поскольку это было сделано в (прикладном) программном обеспечении, оно не требовало MMU. И память была виртуальной в том смысле, что разблокированную память можно было перенести на диск.

Однако в модели Win16 нет защиты между различными процессами. Если другой процесс оставил данные в памяти, вы можете перезаписать их. Это не принципиальное ограничение. В наши дни с быстрыми твердотельными накопителями вы можете полностью удалить неработающий процесс из памяти и сделать это в разумные сроки.

MSalters
источник
7

Не обязательно иметь аппаратный MMU, если у вас есть программное обеспечение, которое может обмениваться процессами с физической памятью.

Это был режим работы ранних многозадачных операционных систем. Только один процесс находится в памяти в любой момент времени, он полностью заменяется, когда истекает его временной интервал (вы можете видеть, что это становится проблематичным для больших процессов). Содержимое памяти, видимое текущим запущенным процессом, не совпадает с содержимым любого другого процесса, и каждый из них имеет свое собственное представление адресного пространства.

Полезна некоторая аппаратная поддержка - понятие «защищенной» области памяти для собственного использования ОС (например, все адреса с набором MSB доступны только в режиме супервизора) и значение «break», указывающее самый высокий используемый адрес, но управление памятью аппаратное обеспечение не является абсолютным требованием к виртуальной памяти; это просто особенно эффективный способ добиться этого.

Тоби Спейт
источник
2
Это не виртуальная память, а просто обмен процессами ... (Нам действительно нужно определить «виртуальную память» для правильного ответа на этот вопрос!)
Стивен Китт
Каждый процесс имеет свое собственное представление адресного пространства - я буду редактировать, чтобы уточнить определение, которое я использую.
Тоби Спейт
Правильно, но это одно и то же однозначное отображение для всех процессов. (С точки зрения процессов нет большой разницы, поэтому здесь нет реальных аргументов ...)
Стивен Китт
0

В оригинальных коммерческих машинах для ВМ не было 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 не только не нужны, но и системы лучше без них.

user3717661
источник
-1

Большинство процессоров для настольных ПК, ноутбуков и серверов содержат один или несколько TLB в оборудовании для управления памятью, и они почти всегда присутствуют в любом процессоре, который использует выгружаемую или сегментированную виртуальную память .

Translation_lookaside_buffer

А затем прочитайте о виртуальной памяти и о том, для чего она предназначена. Огромное виртуальное адресное пространство - не главная идея. Основная идея - кэширование / буферизация на многих уровнях.

Это далеко не просто, но этот кеш памяти TLB является важной частью аппаратного обеспечения, на котором основана подсистема mm ядра (в противном случае виртуальная машина была бы в значительной степени перегружена).


VM =

виртуальная память ИЛИ виртуальная машина. Очень разные, очень связаны.


Таким образом, ответ - нет, микросхема MMU (отдельный блок вне ЦП на материнской плате) не нужна.

Да, некоторые аппаратные MMU (в ЦП) необходимы для того, чтобы вообще думать о полезной ВМ. (Это началось с этой сегментации 8086 , для платформы x86)

rastafile
источник