Определить размер таблицы страниц для виртуальной памяти - PullRequest
20 голосов
/ 27 октября 2010

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

Ответы [ 3 ]

30 голосов
/ 27 октября 2010

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

9 голосов
/ 27 ноября 2013

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

ШАГ 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
0 голосов
/ 08 января 2016

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

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

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

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

...