для вычисления уровней таблицы страниц требуется поддержка x битов виртуального адреса

Я пытаюсь рассчитать количество уровней таблицы страниц, необходимых для поддержки 35-битного виртуального адреса.

Ввод дает мне: Блок пейджинга использует дескрипторы страниц 16B, а размер страницы составляет 2KiB. Количество дескрипторов, хранящихся в таблице дескрипторов, равно 128.

Правильный ответ для уровней таблицы страниц — 4.

Пытался посчитать разными способами, но не получается.

Я также пробовал эту формулу (размер виртуального адресного пространства)/(размер страницы)

Может ли кто-нибудь помочь мне?


person noxeko9028    schedule 20.06.2021    source источник
comment
128 = 2 ^ 7 записей в таблице означает, что каждый уровень обрабатывает 7 битов битов номера страницы. Например, как x86-64 использует 9 бит на уровень с 4 уровнями для своих 4k страниц: Как поля базового адреса записи страницы AMD64 кодируют адрес в 40 бит?. Помните, что вам не нужно переводить биты смещения внутри страницы.   -  person Peter Cordes    schedule 20.06.2021
comment
тем не менее, я не знаю, как решить эту проблему @PeterCordes, не могли бы вы помочь дальше?   -  person noxeko9028    schedule 20.06.2021


Ответы (1)


Самая общая формула выглядит так:

total_virtual_address_bits <= bits_for_offset_in_page + levels * bits_per_page_table_index

Эта формула получена путем разделения виртуального адреса на несколько полей.

Вы можете подключить свои значения и убедиться, что это работает:

35 <= 11 + 4 * 7
35 <= 39

Вы также можете изменить формулу:

total_virtual_address_bits <= bits_for_offset_in_page + levels * bits_per_page_table_index

total_virtual_address_bits - bits_for_offset_in_page <=  levels * bits_per_page_table_index

levels >= (total_virtual_address_bits - bits_for_offset_in_page) / bits_per_page_table_index

Вы можете подставить свои значения в эту формулу, например:

levels >= (35 - 11) / 7

levels >= 3.4285714

А вот и путаница. Математика работает не совсем идеально (3,4285714 — не очень хорошее целое число), поэтому округляется в большую сторону.

Это означает, что таблица самого высокого уровня будет использоваться только частично (точнее, нам нужно только 3 бита для индекса в таблице страниц самого высокого уровня, поэтому будут использоваться только 8 записей в этой таблице, а остальные 120 записей будут потрачены впустую) .

Обратите внимание, что такое округление происходит на практике. Одним из примеров был 32-битный 80x86 с PAE, где таблица страниц самого высокого уровня составляла всего 32 байта (и размер таблиц страниц и размер страницы, где все 4 КиБ).

person Brendan    schedule 06.07.2021