Если вы хотите понять операционные системы, используйте Galvin, чтобы выровнять свою кошку и ничего больше.
Первым ключом к пониманию этой проблемы является понимание различий между логической памятью и виртуальной памятью. К сожалению, большая часть документации по процессам и ОС объединяет два термина.
Таблицы страниц определяют непрерывное, линейное, логическое адресное пространство, которое отображает страницы на непрерывные страницы. => Логическая память.
Виртуальная память - это процесс использования вторичного хранилища (диска), когда запись в таблице страниц не отображается на физический кадр страницы.
Это две тесно связанные понятия. Для виртуальной памяти требуется логическая память. НО логическая память не требует виртуальной памяти.
В последнем случае ОС не использует вторичное хранилище для имитации физической памяти. Когда процесс обращается к логической странице, он должен быть отображен на физический кадр страницы, в противном случае возникает ошибка (а не ошибка страницы, как в виртуальной памяти).
В дни до виртуальной памяти все было сделано совершенно по-другому. Затем все процессы были заменены и вытеснены (почему в Eunuchs файл подкачки называется разделом подкачки). Это было сделано с помощью чтения/записи на диск или регистры отображения. В те дни адресные пространства составляли 64 Кбайта или меньше, поэтому запись процесса на диск была не такой уж обременительной, как может показаться.
В таких системах у вас есть собственная память объемом 64 КБ и просто невозможно получить доступ за пределы этого, чтобы добраться до памяти другого процесса.
Я имею в виду, как процессам могут быть предоставлены защищенные адресные пространства? – Garrick
Существует множество форм защиты памяти, не имеющих виртуальной памяти, и скорее зависит от конкретных особенностей целевой системы. С чистой памятью с произвольным доступом, в которой отсутствует какой-либо такой механизм, вам придется использовать некоторую форму intepretation, которая запрещает выполнение произвольного кода и обеспечивает только «безопасные» операции (думаю, язык JIT) или какую-то форму эмуляции, такую как динамическая перекомпиляция, представляющая память при необходимости проверять доступ. – doynax