Общесистемная таблица страниц - PullRequest
1 голос
/ 25 января 2012

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

Ответы [ 2 ]

1 голос
/ 25 января 2012

Что касается второй части, которая отображает виртуальный адрес на один и тот же физический адрес для библиотечного кода и различных экземпляров кода приложения, то это действительно то, что сделано.Код имеет доступ только для чтения, и тот же виртуальный адрес отображается на тот же физический адрес.Таким образом, нет необходимости иметь несколько копий одного и того же кода в физической памяти, все это при условии, что ASLR не включен.

Теперь, что касается части данных, современные ОС, такие как Linux, используют подкачку страниц по требованию, то есть страница переносится в физическую память только при обращении к ней (чтение или запись).На этом этапе ядро ​​может убедиться, что назначил уникальный физический адрес для этой страницы.Я не знаю, какова цель таблицы страниц всей системы.

0 голосов
/ 30 июня 2012

Ядро будет использовать системную таблицу страниц, которая в большинстве систем всегда отображается в память. (Как правило, 32-разрядная система выделяет нижние 2-3 ГБ виртуального адресного пространства для пользовательского процесса и верхние 1-2 ГБ для ядра.) Создание общих сопоставлений ядра для всех процессов означает отсутствие беспокоиться о том, чтобы код ядра, который вы собираетесь запустить, отображался при вводе системного вызова из пользовательского пространства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...