Как работает виртуализированная таблица страниц - PullRequest
0 голосов
/ 14 мая 2018

Чтение о концепции виртуализированной таблицы страниц, когда часть таблицы страниц помещается в виртуальную память. Википедия , а также Patterson & Hennessy (подробное описание 5.7 в разделе «Ошибки страницы») говорят, что причина, по которой вы не помещаете всю таблицу страниц в виртуальную память, состоит в том, что она может привести кошибки круговой страницы.Но мне кажется, что есть еще более фундаментальная проблема - как бы вы нашли таблицу страниц в первую очередь?Похоже, вам обязательно нужна какая-то запись о том, где в физической памяти начинается процесс перевода с определения местоположения таблицы страниц.

Чтобы пояснить мой вопрос немного больше, я не понимаю, почемуне все таблицы страниц могут быть в памяти ".Скорее, это обоснование, данное , заключается в том, чтобы "предотвращать циклические сбои страниц".Кажется, что логическое обоснование должно быть более фундаментальным: «процессор должен иметь какой-то физический адрес в качестве отправной точки», и как бы вы это ни называли, это физическая таблица страниц.Какое это имеет отношение к "ошибкам круговой страницы"?Кажется, гораздо более фундаментальным.

Ответы [ 3 ]

0 голосов
/ 15 мая 2018

В архитектуре VAX 70-х годов использовался подход виртуализированной линейной таблицы страниц для реализации пейджинга. VAX разбивает 32-битное виртуальное адресное пространство на четыре диапазона:

  • P0: 0x00000000 - 0x3fffffff.
  • P1: 0x40000000 - 0x7fffffff.
  • S0: 0x80000000 - 0xbfffffff.
  • S1: 0xc0000000 - 0xffffffff.

P0 (называемый программной областью) и P1 (называемый управляющей областью) являются пользовательскими разделами, S0 является системным разделом (ядром), а S1 резервируется. Таким образом, каждый процесс имеет свой собственный набор отображений для P0 и P1, но все процессы и ядро ​​имеют одинаковые отображения для S0.

Обратите внимание, что два наиболее значимых бита виртуального адреса используются для определения того, к какому разделу виртуальной памяти обращаться. Каждый раздел (кроме S1, который нельзя использовать) определяется таблицей страниц. В частности, P0 и P1 определяются виртуализированной таблицей страниц (таблицы страниц отображаются в виртуальную память), но таблица страниц S0 не виртуализирована. Каждая таблица страниц представляет собой непрерывный массив 4-байтовых записей таблицы страниц. Каждая запись таблицы страниц является недействительной или действительной (что означает, что она содержит физический адрес 512-байтовой страницы).

VAX предоставляет 6 регистров для определения таблиц страниц: регистр базового адреса таблицы страниц и регистр длины таблицы страниц для каждого из трех разделов виртуального адресного пространства P0, P1 и S0. Регистры базовых адресов P0 и P1 содержат виртуальные адреса, чьи два старших бита равны 10. То есть таблица страниц S0 содержит записи таблицы страниц, которые содержат физические адреса P0 и P1. Это позволяет таблицам страниц P0 и P1 любого процесса находиться в основной памяти или во вторичном хранилище. С другой стороны, регистр базового адреса S0 содержит физический адрес таблицы страниц S0.

Таким образом, по сути, таблица страниц процесса разделена на три смежные таблицы страниц, две из которых виртуализированы, а одна всегда находится в памяти. От Википедия :

Было упомянуто, что создание структуры таблицы страниц, которая содержит сопоставления для каждой виртуальной страницы в виртуальном адресном пространстве могут заканчиваться быть расточительным. Но мы можем обойти чрезмерные космические проблемы помещая таблицу страниц в виртуальную память, и позволяя виртуальной Система памяти управляет памятью для таблицы страниц.

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

Таблица страниц S0 является частью линейной таблицы страниц, которая всегда должна находиться в памяти (то есть не виртуализирована). Но почему это должно быть так? Что произойдет, если регистр базовых адресов S0 содержал виртуальный адрес, а не физический адрес таблицы страниц? Но в таком случае, как процессор может определить физический базовый адрес таблицы страниц? Нам понадобится дополнительная структура данных с известным физическим адресом, которая позволит нам определить физический адрес таблицы страниц. Давайте в качестве аргумента предположим, что у нас есть такая структура данных, которая где-то хранится. Возможно ли, чтобы таблица страниц была полностью выгружена во вторичное хранилище? Да, мы можем сделать это, если у нас есть что-то вроде «существующего бита» или «действительного бита» в этой структуре данных. Однако для текущего бита установлено значение false, при доступе к памяти по любому виртуальному адресу возникает ошибка страницы. Теперь ОС должна обработать ошибку страницы, если ей потребуется доступ к какому-либо виртуальному адресу, она снова будет отображать ошибку страницы и так далее.

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

Разделение таблицы страниц на несколько смежных массивов, например, как это делается в VAX, означает, что некоторая часть таблицы страниц (S0) должна присутствовать всегда.


Но если таблица страниц S0 содержит записи для поиска таблиц страниц P0 и P1, то не является ли это эффективно и многоуровневой таблицей страниц? Чтобы ответить на этот вопрос, давайте сравним, как осуществляется преобразование адресов в VAX и 32-разрядной версии x86.

В переводе VAX номер виртуальной страницы совпадает с индексом таблицы страниц.

|31|29                  9|8       0|
------------------------------------
|  | virtual page number | offset  |
------------------------------------
|  |  page table index   | offset  |
------------------------------------

В 32-битной трансляции x86 (с отключенными PAE и PSE) номер виртуальной страницы разбивается на два индекса для двухуровневой таблицы страниц.

|31                  12|11        0|
------------------------------------
|  virtual page number |  offset   |
------------------------------------
| PT 1 index|PT 2 index|  offset   |
------------------------------------

В VAX только доступ к таблицам пользовательских страниц требует двухуровневого поиска. Что еще более важно, два поиска выполняются с использованием двух разных виртуальных адресов. С другой стороны, доступ к системной таблице страниц требует только одного просмотра с использованием одного виртуального адреса. Напротив, в x86 все обращения требуют двухуровневого поиска с использованием одного и того же виртуального адреса.

Архитектура x86 поддерживает виртуализированные многоуровневые таблицы страниц.

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

0 голосов
/ 15 мая 2018

re: ваше обновление: это два разных способа сформулировать одно и то же требование.

Это аргумент reductio ad absurdum : рассмотрим процессор, на котором находится страницавсе таблицы-указатели были виртуальными адресами: обработчику TLB-пропаданий или обработчиков ошибок страницы потребовалось бы принять ошибку другой страницы или пропуски TLB, поскольку у него нет физического адреса, который он мог бы использовать напрямую.

Это«круговая» проблема, с которой вы столкнетесь, и почему где-то должен быть физический адрес, иначе это ловушка-22 / , все время черепахи вниз по типу ситуации.

0 голосов
/ 14 мая 2018

Но мне кажется, что есть еще более фундаментальная проблема - как бы вы нашли таблицу страниц в первую очередь?

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

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