Как узнать количество таблиц перевода в виртуальной памяти?

У меня есть следующая информация:

введите здесь описание изображения

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


person vesii    schedule 26.07.2020    source источник


Ответы (1)


Если полный виртуальный адрес составляет 32 бита, а размер страницы — 2 КБ (или 2 ^ 11 байт), смещение страницы, как вы рассчитали, составляет 11 бит. Таким образом, в адресе остается 21 бит для номера виртуальной страницы.

Что касается количества таблиц перевода, то ключевым элементом информации является то, что таблицы страниц (всех уровней) имеют размер, равный размеру страницы. Если размер страницы составляет 2 ^ 11 байт, а размер записи — 8 (или 2 ^ 3) байт, каждая таблица содержит (2 ^ 11)/(2 ^ 3) = 2 ^ 8 PTE. Чтобы иметь уникальный индекс для каждой записи в таблице такого размера, вам нужен 8-битный индекс.

Обычно полный номер виртуальной страницы разбивается на индексы в таблице страниц на разных уровнях, например:

[ ---------- Полный VPN ---------- ] [ Смещение страницы ]

==

[ VPN 1 ] [ VPN 2 ] ... [ VPN N ] [ Смещение страницы ]

Где VPN N — это индекс N-го уровня таблицы страниц.

Например, в трехуровневой таблице страниц VPN 1 — это индекс в таблице страниц первого уровня (где каждая запись указывает на расположение таблицы страниц второго уровня), VPN 2 — это индекс в таблице страниц второго уровня. table (где каждая запись указывает на расположение таблицы страниц третьего уровня), а VPN 3 — это индекс в таблице страниц третьего уровня, где каждая запись даст вам (возможно, среди другой информации) номер физической страницы.

Подробная настройка, которую вы описали, немного неясна в том, сколько битов является частью VPN 1, VPN 2 и VPN 3. Вы можете ожидать, что каждый из них будет 8 бит, учитывая количество PTE, которые помещаются на страницу, но всего есть только 21 биты. Можно было бы использовать для VPN 1 биты 0–7 номера виртуальной страницы (8 бит), для VPN 2 — биты 8–15 (8 бит), а для VPN 3 — биты 16–20 (5 бит). Здесь вы используете полные таблицы первого и второго уровня, но только часть каждой таблицы страниц третьего уровня. Также можно было бы работать, если бы VPN 1, 2 и 3 были 7-битными. Здесь каждый уровень будет использовать только половину таблицы.

Несмотря на это, с 21-битным номером виртуальной страницы и таблицами размером с кадр страницы 3 уровня являются минимально необходимыми, поскольку индекс для каждого уровня составляет максимум 8 бит. Если бы были 27-битные адреса и 16-битные номера виртуальных страниц, потребовались бы только 2 уровня; для большего виртуального адресного пространства с 36-битными адресами и 25-битными номерами виртуальных страниц потребуется четыре уровня.

Подводя итог всему этому, я бы использовал формулу для минимального количества необходимых уровней:

(биты номера виртуальной страницы) / (PTE на таблицу страниц), переходя к следующему целому числу, если это не целое число. Итак, здесь 21/8 = 2,625 ==> 3 уровня.

person sruthi    schedule 29.07.2020