Как рассчитать размер виртуальной страницы в системе? - PullRequest
0 голосов
/ 20 октября 2018

Имеется система виртуальной памяти, которая использует 32-битный виртуальный адрес.Таблица страниц, которая занимает 1 МБ памяти на процесс.Каждый PTE (запись таблицы страниц требует 4 байта. Всего в системе доступно 256 мегабайт памяти.

Я понимаю, что таблица страниц - это, по сути, список записей (PTE), которые обеспечивают отображение виртуальной памяти.адреса к физическому адресу.

Мне нужно рассчитать размер каждой виртуальной страницы. Но я понятия не имею, как. Пока все, что у меня есть, это 2 ^ 20 (размер таблицы страниц) / 2 ^2 (размер PTE) = 2 ^ 18, это дает мне общее количество записей, которые я могу иметь в таблице страниц. Я даже не уверен, полезно ли это для определения размера каждой виртуальной страницы.

Может ли кто-нибудь указать мне правильное направление? Возможно, я неправильно понимаю, как эти показатели соотносятся с размером виртуальной страницы.

Редактировать: я обнаружил, что размер страницы определяется следующимВиртуальный адрес состоит из битов для указателя страницы и смещения. Последние биты виртуального адреса называются смещением, которое представляет собой разность местоположений между желаемым байтовым адресом и началомстраница.Требуется достаточное количество битов в смещении, чтобы можно было добраться до любого байта на странице. Для страницы 4K требуется (4K == (4 * 1024) == 4096 == 212 ==) 12 битов смещения.

Указатель страницы может быть определен по количеству записей в таблице.Это была просто моя формула до 2 ^ 20 (размер таблицы страниц) / 2 ^ 2 (размер PTE) = 2 ^ 18 записей.Это означает, что в моем виртуальном адресе для моего указателя страницы используется 18 бит.Я могу определить смещение 2 ^ 32 (размер виртуального адреса) / 2 ^ 18, что дает мне 2 ^ 14.Поэтому мой размер страницы для моего виртуального адреса составляет 2 ^ 14 или 16 КБ.

Ответы [ 2 ]

0 голосов
/ 21 октября 2018

Проблема, которую вы описываете, недостаточно конкретизирована.Вам необходимо знать ширину поля смещения страницы в виртуальном адресе (или сколько уровней косвенности используется системой VM).Например, (как в ОДНОМ из режимов, которые использует система x86), если у вас есть два уровня косвенности, то у вас будет 10x2 бита, используемых для уровней косвенности, и оставшиеся 12 битов для смещения на странице.Это дает вам размер страницы (= размер кадра) 4 КБ.

Если вы вместо этого используете один уровень косвенности (как ДРУГОЙ режим x86, но встречается реже), то вы можете иметь деление 10биты для единственного уровня косвенности и оставшиеся 22 бита в качестве смещения на странице.Это дает размер страницы 4 МБ.

Вы видите выше, что один и тот же 32-битный виртуальный адрес может следовать разным уровням перенаправления для подкачки и в конечном итоге с разными размерами страницы.

Размер смещения страницы ввиртуальный адрес определяет размер страницы.

0 голосов
/ 20 октября 2018

Нет ответа по этому факту.У вас на странице таблицы запись составляет 32 бита.Это устанавливает теоретическую верхнюю границу размера страницы как 2 ^ 32.Однако некоторые биты будут использоваться для управления, поэтому размер будет меньше.

Размер таблицы страниц в 1 МБ и 32-разрядные факты виртуального адреса не имеют отношения к размеру страницы.

...