2010-10-27 5 views
18

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

+0

2^28 записей из-за размера виртуального пространства/размера страницы. 4 байта на запись (28 бит для адресации чисел vp, + 4 бит = 32 бит) 2^28 * 4 = 1024 МБ, что больше физической памяти. Не имеет смысла, я не в школе. Это мое предположение, а не настоящий ответ. Заранее спасибо. –

+0

Я не вижу необходимости, чтобы вся таблица страниц находилась в физической памяти в любом месте вопроса. – paxdiablo

+0

Зачем нужна физическая память, а затем укажите, что в таблице нет адресов на диске? Это означало бы, что вам нужно только обратиться к 512 МБ физической памяти. Если я не ошибаюсь. Еще раз спасибо. –

ответ

29

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

+0

Спасибо за отличный ответ! Одна вещь - если я не набираю свою математику неправильно, не должен 2^28 * 32 = 6,174,015,488 бит = 771,751,936 байта = 738 МБ? И да, я уверен, что минимально вы увидите размер страницы 4 КБ, возможно, даже 8 или 16 ... –

+1

Да, ваши вычисления верны, но это потому, что вы используете 32-битную запись страницы, в то время как моя был 23-бит. В реальной системе вы, несомненно, столкнетесь с ней как минимум до 24 бит и, вероятно, 32, как вы это делали, но именно поэтому цифры разные. Независимо от того, используете ли вы 23 или 32 бита, вы можете только после того, как задан только вопрос, что требуется не менее 4 бит. Если бы я выполнял задание, я бы представил несколько вариантов с причинами для каждого. Но тогда я, вероятно, буду отмечен как умный - *** :-) – paxdiablo

+0

К сожалению, это была опечатка с моей стороны. Это на самом деле расчет для 2^28 * 23 бит = 6174015488 или 736 МБ .. –

8

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

ШАГ 1: Поиск NO записей в таблице страниц:

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 
-2

1KB страницы = 2^10, 512 = 2^29 => Offset = 29 - 10 = 19 бит.

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

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

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