Отображение виртуального адреса в физический адрес - PullRequest
2 голосов
/ 25 января 2012

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

1 Ответ

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

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

Виртуальное адресное пространство процесса может использоваться для сопоставления виртуальных страниц с физическими страницами, с файлами, отображаемыми в памяти, устройствами и т. Д. Виртуальные страницы не должны быть подключены к ОЗУ. Процесс может отобразить в памяти весь файл объемом 1 ГБ - в этом случае его физическая память может быть только парой мегабайт, но его виртуальное адресное пространство будет составлять 1 ГБ или более. Многие процессы могут сделать это, и в этом случае сумма использования виртуального адресного пространства во всех процессах может составлять, скажем, 40 ГБ, тогда как общее использование физической памяти может составлять, скажем, только 100 мегабайт; это очень легко сделать в 32-битных системах.

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

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

Обычно существует 3 типа ошибок страниц. Первый тип - когда у ЦП нет виртуально-физического сопоставления в TLB - процессор вызывает программное прерывание разрыва страницы в ОС, ОС помещает сопоставление в процессор для этого процесса, а затем процесс повторно запускает нарушающее работу. инструкции. Это происходит тысячи раз в секунду.

Второй тип - это когда ОС не имеет сопоставления, потому что, скажем, память для процесса была перенесена на диск, как объяснено выше. Это случается нечасто на слабонагруженных машинах, но происходит чаще, когда увеличивается нагрузка на память, от 100 до 1000 раз в секунду, может быть, даже больше.

Третий тип - это когда ОС не имеет сопоставления, потому что сопоставления не существует - процесс пытается получить доступ к памяти, которая ему не принадлежит. Это генерирует segfault, и, как правило, процесс убивается. Это не должно происходить часто и зависит исключительно от того, насколько хорошо написано программное обеспечение на компьютере и не имеет никакого отношения к планированию или загрузке компьютера.

Даже если вы уже знали это, я подумал, что добавлю это для сообщества.

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