Расчет количества страниц в 32-битной виртуальной машине - PullRequest
0 голосов
/ 10 сентября 2018

Рассмотрим 32-разрядное виртуальное и физическое адресное пространство с физическим размером страницы 4 КБ. Предположим, что процесс имеет только что был создан и его программа скопирована в память. Размер программы - 1 КБ. Сколько памяти будет требуется хранить таблицы страниц этого процесса?

Я сделал это: .

PTE size for 32bit physical address = 32 bits = 4 bytes. no of PTEs in single level page table = virtual pages= virtual address space / page = 2^32 / 2^ = 2^20

так что нет страниц = 2 ^ 20.

Но в решении они также написаны как:

"#Pages in single level page table = #PTEs x PTE size / page size = 2^20 x 4 bytes / 2^12 bytes = 2^10. " насколько я понимаю, таблица страниц - это массив записей таблицы страниц, по одной на виртуальную страницу. Таким образом, ни одна из записей таблицы страниц не должна быть равна ни одной страницы тогда почему #Pages равно 2 ^ 10 ??

Другое дело, что «с физическим размером страницы 4 КБ». ?? Страницы являются виртуальным адресом, значит ли это, что страница занимает 4 КБ места в физической памяти ??

Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 10 сентября 2018

Для одного уровня таблиц страниц; виртуальное адресное пространство составляет 4 ГиБ, а страница - 4 КиБ, поэтому вам потребуется «4 ГиБ / 4 КиБ = 1048576 страниц = 1048576 записей таблицы страниц». Это ответ, который вы пришли (2 ^ 20 записей таблицы страниц).

Если имеется 1048576 записей в таблице страниц, и вы не представляете, насколько велика запись таблицы страниц, то общий объем памяти, необходимый для всех записей таблицы страниц, будет «1048576 * unknown = unknowable».

Однако с 32-битным размером физического адресного пространства и размером страницы 4 КиБ мы знаем, что 12 «битов адреса» будут использоваться для «смещения в пределах страницы», а оставшиеся 20 битов адреса будут использоваться для «страницы». число"; поэтому мы знаем, что запись таблицы страниц должна составлять не менее 20 бит, поэтому мы знаем, что общий объем памяти, необходимый для всех записей таблицы страниц, будет составлять не менее «1048576 * 20 битов = 20971520 битов = 2560 КиБ».

Если мы сделаем случайные потенциально ложные предположения (основанные на образованных догадках) и решим, что, возможно, запись таблицы страниц составляет 4 байта, мы можем сказать, что общий объем памяти, необходимый для всех записей таблицы страниц, вероятно, будет равен "1048576 * 4 байт = 4 МиБ ".

Если общий объем памяти, необходимый для всех записей таблицы страниц, составляет 4 МБ, а физической страницы - 4 КБ; тогда вам потребуется «4 MiB / 4 KiB = 1024 страницы» для хранения всех записей таблицы страниц. Это ответ, который они придумали (2 ^ 10 страниц).

Другое дело, что «с физическим размером страницы 4 КБ». ?? Страницы являются виртуальным адресом, значит ли это, что страница занимает 4 КБ места в физической памяти ??

Страницы не являются виртуальными адресами; и есть как виртуальные страницы, так и физические страницы.

Основная идея состоит в том, чтобы разделить виртуальный адрес на две части (с маскировкой / AND и смещением), чтобы "(virtual_page_number << K) + offset_within_page = virtual_address", а затем с помощью "virtual_page_number" (и таблиц страниц) найти "имя_физического_страницы", затем выполните "физический_адрес = (номер_физического_страницы << K) + смещение_свободной_страницы". </p>

Чтобы это работало, размер виртуальной страницы должен совпадать с размером физической страницы; поэтому слова «размер страницы» используются для обозначения как размера виртуальной страницы, так и физического размера страницы.

...