Возможно не по теме? Если только речь не идет о системах UNIX.
Мацей Пехотка
Ответы:
10
Вы можете запустить многопроцессорную операционную систему даже без аппаратной поддержки (без MMU ) со всеми указателями, представляющими физический адрес. Однако вы теряете несколько ключевых функций, обычно предоставляемых через MMU:
Так как указатель всегда указывает на определенное место в оперативной памяти, вы не можете иметь своп (или только очень ограниченным образом). Обычно MMU вызывает исключение, когда не может найти физическую страницу для данного виртуального адреса, и предоставленный ОС обработчик исключений извлекает страницу из раздела подкачки.
Поскольку указатель разыменовывается без проверки, каждый процесс может получить доступ к памяти других процессов и памяти ядра. Обычно MMU вызывает исключение, когда не может найти физическую страницу для данного виртуального адреса, и предоставляемый ОС обработчик исключений завершает процесс для попытки неверного доступа.
Поскольку один и тот же указатель имеет одинаковое значение в разных процессах, вы не можете легко реализовать fork . Обычно эффект forkсостоит в том, чтобы сделать копию физической памяти процесса и создать новую карту виртуальной памяти из тех же виртуальных адресов в новые физические адреса.
Существуют Unix-подобные операционные системы, которые работают на системах без MMU.
MINIX - это вариант Unix, первоначально разработанный Эндрю Таненбаумом в качестве дополнения к его книге « Операционные системы: проектирование и реализация» . В оригинальных версиях побежали на компьютерах того времени, которые не могут поддерживать виртуальную память. (Учитывая ваши интересы, я рекомендую прочитать эту книгу, даже более старое издание, если это все, что вы можете себе позволить.)
¹ В современных 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 ). И даже без аппаратной поддержки вы можете принудительно разделить память с помощью статического анализа (это не просто, но выполнимо).
Ответы:
Вы можете запустить многопроцессорную операционную систему даже без аппаратной поддержки (без MMU ) со всеми указателями, представляющими физический адрес. Однако вы теряете несколько ключевых функций, обычно предоставляемых через MMU:
fork
состоит в том, чтобы сделать копию физической памяти процесса и создать новую карту виртуальной памяти из тех же виртуальных адресов в новые физические адреса.Существуют Unix-подобные операционные системы, которые работают на системах без MMU.
vfork
поддерживается только ) и отсутствие защиты памяти; но есть вытесняющая многозадачность.¹ В современных Unix'ов, обычно это делается лениво (копирование при записи), что опять - таки зависит от MMU вызывая исключение , когда он не может найти физическую страницу.
источник
Это, конечно, возможно с некоторыми ограничениями, такими как защита памяти, которая, как уже говорилось, будет проблемой. Например, µClinux http://www.uclinux.org/ поддерживает несколько процессов без реализации виртуальной памяти. Обратите внимание, что некоторые ЦП, такие как, по крайней мере, аналоговые устройства Blackfin, предоставляют MPU (модуль защиты памяти) http://docs.blackfin.uclinux.org/doku.php?id=bfin:mpu . Это позволяет виртуальной памяти меньше операционных систем, чтобы все еще позволять разделять память.
источник
Это зависит от того, как вы определяете процесс против потоков с точки зрения памяти.
Одной из функций виртуальной памяти является разбиение. Хотя можно запускать несколько процессов без разделения, это больше похоже на запуск нескольких потоков, чем процессов - использование одного и того же адресного пространства.
источник