Можно ли поддерживать несколько процессов без поддержки виртуальной памяти?

8

Можно ли поддерживать несколько процессов без поддержки виртуальной памяти? Я хотел бы знать больше об этом, если так.

сен
источник
Возможно не по теме? Если только речь не идет о системах UNIX.
Мацей Пехотка

Ответы:

10

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

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

Существуют Unix-подобные операционные системы, которые работают на системах без MMU.

¹ В современных Unix'ов, обычно это делается лениво (копирование при записи), что опять - таки зависит от MMU вызывая исключение , когда он не может найти физическую страницу.

Жиль "ТАК - перестань быть злым"
источник
Во втором пункте «когда не удается найти физическую страницу для данного виртуального адреса» вместо этого должно быть что-то вроде «когда доступ к странице, соответствующей данному виртуальному адресу, должен быть запрещен». Принадлежащая ядру страница, скорее всего, является резидентной.
Руслан
@Ruslan Когда страница не отображается в процессе, MMU обычно содержит информацию, которая не отображается на физической странице. Может случиться, что MMU содержит адрес физической страницы, к которой у процесса нет доступа, но это скорее исключение, чем правило, используемое для памяти ядра, если ядро ​​использует эту функцию MMU (что делает Linux) ,
Жиль "ТАК - перестань быть злым"
2

Это, конечно, возможно с некоторыми ограничениями, такими как защита памяти, которая, как уже говорилось, будет проблемой. Например, µClinux http://www.uclinux.org/ поддерживает несколько процессов без реализации виртуальной памяти. Обратите внимание, что некоторые ЦП, такие как, по крайней мере, аналоговые устройства Blackfin, предоставляют MPU (модуль защиты памяти) http://docs.blackfin.uclinux.org/doku.php?id=bfin:mpu . Это позволяет виртуальной памяти меньше операционных систем, чтобы все еще позволять разделять память.

jlliagre
источник
0

Это зависит от того, как вы определяете процесс против потоков с точки зрения памяти.

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

sybreon
источник
Да и нет. Возможно принудительное разделение памяти без виртуальной памяти. Некоторые микроконтроллеры имеют аппаратную защиту памяти, но не виртуальную память (см . Ответ jlliagre ). И даже без аппаратной поддержки вы можете принудительно разделить память с помощью статического анализа (это не просто, но выполнимо).
Жиль "ТАК - перестань быть злым"