Многоуровневые таблицы страниц — иерархическое разбиение по страницам

Пример вопроса из прошлого финала операционной системы, как мне рассчитать этот вопрос?

Компьютер имеет 64-битное виртуальное адресное пространство и страницы размером 2048 байт. Запись таблицы страниц занимает 4 байта. Многоуровневая таблица страниц используется, поскольку каждая таблица должна содержаться на странице. Сколько уровней требуется?

Как бы я вычислил это?


person Bobby S    schedule 05.04.2011    source источник


Ответы (2)


Поскольку таблица страниц должна умещаться на странице, размер таблицы страниц составляет 2048 байт, а каждая запись — 4 байта, поэтому таблица содержит 2048/4 = 512 записей. Для адресации 512 записей требуется log2(512)=9 бит. Общее количество битов, доступных для кодирования записи для каждого уровня страницы, составляет 64-log2(2048)=53 бита (число битов адресного пространства минус биты смещения страницы). Таким образом, общее количество требуемых уровней равно 53/9=6 (округлено в большую сторону).

Размер таблицы страниц по умолчанию для x86-64 составляет 4096 байт, каждая таблица страниц должна умещаться на странице, а размер записи в таблице страниц составляет 8 байт. Текущие ЦП реализуют только 48-битное виртуальное адресное пространство. Сколько уровней таблицы страниц требуется?

person bsantos    schedule 05.04.2011
comment
4096/8 = 512 записей; Для адресации 512 записей log2(512) = 9 бит. Общее количество битов для кодирования каждого уровня страницы равно 48 - log2(4096) = 36 бит. Таким образом, общее количество требуемых уровней равно 36/9 = 4. - person Bobby S; 06.04.2011
comment
Поскольку 2048 находится в байтах, не следует ли преобразовать его в биты, что сделает его 50/9 = 6 округленным? - person Bobby S; 07.04.2011
comment
Нет, потому что вам нужно знать, сколько битов требуется для адресации 2048 байтов, а не битов. - person bsantos; 10.05.2011
comment
Я мог бы отвечать в 2014 году, но большое СПАСИБО!! - person Hans; 17.01.2014

  • Бит логического адреса = 64,
  • Количество страниц будет = 2^64/2048 = 2^64/2^11 = 2^53
  • Страницы у нас есть входной синус таблицы страниц = 4 байта,
  • Количество записей на 1 странице будет = 2048/4 => 512,
  • бит Для представления одной записи = Log (512) = 9 бит,
  • и бит для страницы = 53 бита
  • Следовательно, количество уровней = 53/9 => 6 уровней таблицы страниц
person Jay Singh    schedule 25.01.2012
comment
2048 для страниц 2K? Какая ОС их использует? Разве вы не хотите использовать здесь страницы 4K? - person Jeff Hammond; 09.11.2015