Как рассчитать размер таблицы страниц? - PullRequest
13 голосов
/ 27 октября 2011

Дано: 64-битный виртуальный байтовый адрес, 16 КБ страниц, 32-битный физический байтовый адрес.

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

Пока я знаю общее количество записей в таблице страниц: 2 ^ 64/2 ^ 14 = 2 ^ 50, но не могу понять, как найти размер каждой записи.

Каждая запись содержит 4 бита, как сказано в вопросе, но можно ли найти остальную часть размера записи по физическому байтовому адресу? Я запутался в этой части.

Спасибо.

Ответы [ 3 ]

27 голосов
/ 20 марта 2014

См. Ниже один метод расчета размера таблицы страниц:

  1. Сначала получите смещение страницы путем вычисления log2 (размер страницы в байтах).В вашем примере размер страницы составляет 16 КБ, поэтому log2 (16 * 2 ^ 10) - 14;смещение страницы составляет 14 бит.

  2. Затем вычислите размер Физический номер страницы (PPN) , вычитая смещение страницы из общего количества битов, выделенных для физического адреса.Поскольку в вашем примере физический адрес является 32-разрядным, PPN = 32–14 или 18 бит.

  3. Теперь вы можете вычислить Запись таблицы страниц (PTE) размер путем добавления действительного бита, защитного бита и т. д. к вычисленному PPN.Это значение будет общим количеством битов, необходимых для каждой записи страницы.В нашем примере PTE будет 22 бита.

  4. Последняя необходимая нам информация - это количество записей на странице в таблице страниц.Мы можем получить это, вычитая смещение страницы из общего числа битов, которое у нас есть для номера виртуальной страницы;то есть 64 - 14 = 50, т.е. нам нужно 2 ^ 50 записей для представления всего диапазона виртуальных адресов.

Таким образом, общий размер таблицы страниц составляет 2 ^ 50 * 22 бит , что составляет 2,75PB.Поскольку это много для хранения в памяти и, вероятно, будет дорого и медленно, современные процессоры используют Translation Lookaside Buffer (TLB) в качестве кэша для недавно использованных записей страницы.

Надеюсь, это поможет!

8 голосов
/ 08 февраля 2013

У вас размер страницы 16 КБ = 2 ^ 14, поэтому вам нужно 14 бит для смещения страницы. Из 64-битного виртуального адреса, если вы уберете это смещение, у вас останется 50 бит. Это означает, что у вас есть 2 ^ 50 записей в таблице страниц.

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

Из этих 18 битов 4 бита являются вашими действительными, используемыми и т. Д.

В любом случае, для каждой записи, используемые биты = 18

Общее количество памяти для таблицы страниц (для каждого процесса, поэтому вам придется умножить ее на количество процессов, если оно указано) = 2 ^ 50 * 18 битов

0 голосов
/ 15 марта 2019

Небольшое уточнение для тех, кто может задаться вопросом, поскольку я не нашел четкого определения в CSAPP и сбил меня с толку, когда я учился. Номер физической страницы (PPN) указывает, на какой странице находится этот PA. Если PPN = 0, то этот PA находится в таблице 0-й страницы, если PPN = 11, то PA находится в 3-й таблице. Одна хитрость заключается в том, что количество битов смещения определяет размер этого местоположения . Если смещение страницы равно 14 битам, то размер страницы составляет 2 ^ 14 единиц этого местоположения (здесь для PTE). Поправь меня, если я ошибаюсь.

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