2016-09-23 2 views
-2

Я читал ОС от Galvin и просто сомневался, как реализовать защиту памяти, если система не поддерживает виртуальную память? Я имею в виду, как процессам могут быть предоставлены защищенные адресные пространства?Как защищена память без виртуальной памяти?

Любая новая концепция или объяснений было бы удивительным ...

+0

Я имею в виду, как процессам могут быть предоставлены защищенные адресные пространства? – Garrick

+0

Существует множество форм защиты памяти, не имеющих виртуальной памяти, и скорее зависит от конкретных особенностей целевой системы. С чистой памятью с произвольным доступом, в которой отсутствует какой-либо такой механизм, вам придется использовать некоторую форму intepretation, которая запрещает выполнение произвольного кода и обеспечивает только «безопасные» операции (думаю, язык JIT) или какую-то форму эмуляции, такую ​​как динамическая перекомпиляция, представляющая память при необходимости проверять доступ. – doynax

ответ

1

Memory protection on Wikipedia показывает различные методы защиты памяти, вы должны пройти через это.

Если поддержка виртуальной памяти отсутствует, можно использовать концепцию Protection keys method.

Чтение его:

Ключевой защиты памяти (МПК) механизм делит физическую память до на блоки определенного размера (например, 4 KiB), каждый из которых имеет связанное числовое значение называется защитный ключ. Каждый процесс также имеет значение ключа защиты, связанное с ним. При доступе к памяти аппаратное обеспечение проверяет, что ключ защиты текущего процесса соответствует значению , связанному с доступным блоком памяти; если нет, возникает исключение .

+0

Что касается базового регистра и предельного регистра? Я думаю, мы также можем это использовать. – Garrick

+0

@stackuser - Это еще одна концепция, используемая в методе сегментации защиты памяти. –

+0

okk и еще одно сомнение. Этот метод также можно использовать в многопроцессорных системах? – Garrick

0

Если вы хотите понять операционные системы, используйте Galvin, чтобы выровнять свою кошку и ничего больше.

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

Таблицы страниц определяют непрерывное, линейное, логическое адресное пространство, которое отображает страницы на непрерывные страницы. => Логическая память.

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

Это две тесно связанные понятия. Для виртуальной памяти требуется логическая память. НО логическая память не требует виртуальной памяти.

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

В дни до виртуальной памяти все было сделано совершенно по-другому. Затем все процессы были заменены и вытеснены (почему в Eunuchs файл подкачки называется разделом подкачки). Это было сделано с помощью чтения/записи на диск или регистры отображения. В те дни адресные пространства составляли 64 Кбайта или меньше, поэтому запись процесса на диск была не такой уж обременительной, как может показаться.

В таких системах у вас есть собственная память объемом 64 КБ и просто невозможно получить доступ за пределы этого, чтобы добраться до памяти другого процесса.

Смежные вопросы