Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

Следовательно, записи таблицы таблицы 2 28 по 23 бита каждый составляют 6,174,015,488 бит или 736M.

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

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

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

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

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


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

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

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

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

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

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

Ответ 2

размер таблицы страниц = общее количество записей в таблице страниц * размер записи в таблице страниц

ШАГ 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

Ответ 3

1 КБ страниц = 2 ^ 10, 512 МБ = 2 ^ 29 = > Смещение = 29 - 10 = 19 бит.

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

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

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