Многоуровневые таблицы страниц - иерархическое разбиение на страницы - PullRequest
17 голосов
/ 06 апреля 2011

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

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

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

Ответы [ 2 ]

25 голосов
/ 06 апреля 2011

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

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

6 голосов
/ 25 января 2012
  • Бит логического адреса = 64,
  • Номер страницы будет = 2 ^ 64/2048 = 2 ^ 64/2 ^ 11 = 2 ^ 53
  • Страницы у нас есть запись синуса таблицы страниц = 4 байта,
  • Количество записей на 1 странице будет = 2048/4 => 512,
  • бит Для представления одной записи = Log (512) = 9 бит,
  • и бит для страницы = 53 бита
  • Следовательно, номер уровня = 53/9 => 6 таблиц уровня
...