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

StackOverflow https://stackoverflow.com/questions/4029838

Вопрос

Рассмотрим систему виртуальной памяти с 38-битным виртуальным байтовым адресом, страницами 1 КБ и 512 МБ физической памяти. Каковы общий размер таблицы страниц для каждого процесса на этой машине, предполагая, что действительны, защитные, грязные и использование битов получают в общей сложности 4 бита, и что все виртуальные страницы используются? (Предположим, что адреса диска не хранятся в таблице страницы.)

Это было полезно?

Решение

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

Первая физическая память. Есть 512K страниц физической памяти (512 м / 1к). Это требует 19 битов для представления каждой страницы. Добавьте это к 4 битам учетной информации, и вы получаете 23 бита.

Теперь виртуальная память. С 38-битным адресном пространством и 10-битным (1K) размером страницы, вам нужно 228 Записи в вашей таблице страницы.

Поэтому 228 Записи стола страницы при 23 битах каждый составляет 6 174 015,488 бит или 736 м.

Это максимальный размер, необходимый для одноуровневой подсистемы VM для каждого процесса.

Теперь очевидно, что не собирается работать, если у вас есть только 512 м физической памяти, поэтому у вас есть пара вариантов.

  1. Вы можете уменьшить количество физических страниц. Например, позвольте только половину памяти подлежат пейджеру, сохраняя оставшуюся половину резидента в любое время. Это сэкономит один бит за запись, не достаточно, чтобы иметь значение.

  2. Увеличьте размер страницы, если возможно. Отказ Страница 1K на 38-битном адресном пространстве является причиной очень стойки страниц. Например, я думаю, что 386, с его 32-битным адресным пространством, использует страницы 4K. Это приведет к тому, что миллион записей таблицы страницы, намного меньше, чем 260 миллионов, требуемых здесь.

  3. Перейти многоуровневым. Немного более продвинутым, но в основном это означает, что сами таблицы страницы подлежат пейджеру. Вы должны сохранить первый уровень страницы столов, живущих в физической памяти, но второй уровень может войти и выходить по мере необходимости. Это значительно снизит физические требования, но на стоимости скорости, поскольку могут возникнуть два уровня ошибок страниц, чтобы получить на фактической странице процесса (одна для вторичных файлов пейджинга, затем один для страницы процесса).


Давайте посмотрим немного ближе к варианту 3.

Если мы допустим 32M для первичной таблицы подкачки и дайте каждую запись 4 байта (требуется 32 бита: только 23, но мы можем подключить здесь к эффективности), это позволит 8 388 608 страниц для вторичной таблицы страницы.

Поскольку каждая из этих вторичных страничных страниц страниц длиной составляет 1К (позволяя нам хранить 256 вторичных записей таблицы страницы на 4 байтах каждый), мы можем обратиться в общей сложности 2 147 483 648 виртуальных страниц.

Это позволит 8,192 полностью загруженным (т. Е. Использование их всего 28-битных адресные пространства) процессы для бега бок о бок, предполагая, что у вас есть честный кусок дискового пространства для хранения страниц нерезидентов.

Теперь, очевидно, первичная подсигирующая таблица (и подсистема VM, и, вероятно, справедливый кусок остальной части ОС), должен постоянно оставаться резидентом. Вам нельзя допустить на одну из основных страниц, так как вам вполне может понадобиться этой страницы, чтобы вернуть его в :-)

Но это резидентская стоимость всего 32 м от 512 м для первичной таблицы пейна, намного лучше, чем (как минимум, для одного полностью загруженного процесса) 736 м.

Другие советы

Размер таблицы страниц = Всего № записей таблицы страницы * Размер записи таблицы страницы

Шаг 1: Найти никаких записей в таблице страницы:

no of page table entries=virtual address space/page size

=2^38/2^10=2^28

Таким образом, есть 2 ^ 28 записей в таблице страницы

Шаг2: Нет кадров в физической памяти:

no of frames in the physical memory=(512*1024*1024)/(1*1024)=524288=2^19

Так что нам нужно 19 bits и дополнительное 4 bits Для действительности, защиты, грязных и использованных битов полностью 23 бита = 2,875 байта

size of the page table=(2^28)*2.875=771751936B=736MB

1КБ Pages = 2 ^ 10, 512МБ = 2 ^ 29 => Offset = 29 - 10 = 19 бит.

Virtual включает в себя две части: кадр страницы + Offset => кадр страницы + грязный бит = 38 - 19 = 29 бит. 29 бит включает в себя 4 битную грязную (выше) => 25 бит для реальной рамки страницы, кадра каждой страницы имеет 10 бит долго.

Таким образом, размер таблицы страницы: 2 ^ 25 * 10 = 320 м.

Надеюсь, это правильно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top