Как логический адрес делится в случае многоуровневой таблицы страниц - PullRequest
1 голос
/ 26 февраля 2011
Hi,


In order to use large size page table hierarichal paging is done .
In case of two level page table scheme . for :
logical address space - 32bit - 2^32 
page size - 4kb i.e 2^12

In one level : 

page number - 20bit  calculated as (32 - 12)
page offset - 12 bit 

Now, In two level :

again, page number -  20bit is split into pagenumber(second level) and page offset .also
the address space is (2^20)

considering again page size of 4kb - (2^12)
so page number(second level ) should be calculated as : (20 - 12 ) - 8bits
and page offset : 12 bits.

But, It is mentioned that page number is divided evenly :

i.e page number p1 - 10 bits
    page number p2 - 10 bits
    page offset d - 12bits.

Why is the second level pagenumber divided evenly ? Is it that this division done
arbitarily according the requirement ? Is there no specific method for dividing as in case of single-level page table ?    

Любая помощь будет ценной. Спасибо, Tazim

Ответы [ 3 ]

4 голосов
/ 06 марта 2011

Для страниц размером 4 КБ последние 12 бит являются смещением страницы. Это оставляет 20 битов для 32-битного адреса. Эти 20 битов используются в качестве индекса в таблицах страниц, а не в качестве смещения. Разделив их равномерно между двумя уровнями, обе таблицы имеют одинаковый размер. В первой таблице указан адрес второй таблицы, а во второй таблице указан физический адрес страницы. 10 битов для каждого индекса означают 1024 записи в каждой таблице. Это очень удобно, поскольку при использовании 32-битных записей каждая таблица занимает ровно одну страницу.

Пример: взять адрес 0x00FF1234. Двоичное представление этого адреса - 00000000111111110001001000110100. Разбивая его, мы получаем 0000000011 1111110001 001000110100 или 0x3 0x3F1 0x234. Таким образом, элемент 3 в таблице первого уровня дает адрес таблицы второго уровня, элемент 0x3F1 во второй таблице дает адрес используемой страницы, а адрес этой страницы составляет 0x234 байта.

1 голос
/ 19 марта 2011

Эта серия блогов содержит очень подробный набор примеров того, как работает таблица страниц, как преобразовывать виртуальные <-> физические адреса и т. Д.

Вот пример;Page Table address resolution

0 голосов
/ 29 апреля 2014

Очевидно, что смещение занимает 12 бит. Когда размер каждой записи составляет 4 байта, вы получите 10 бит для таблицы внешних страниц и 10 бит для таблицы внутренних таблиц. Расчет выглядит следующим образом:

(2 ^ 20 записей × 4 байта / запись) / 4k байтов = 2 ^ 10 -> таблица внешних страниц должна иметь 10 битов (место занято таблицей страниц) / frame (или page) size = no. таблиц внутренних страниц

4k байтов / 4 байта = 2 ^ 10 -> внутренняя таблица страниц должна иметь 10 битов (размер страниц в таблице страниц) / размер записей = нет. рамы

Вот как он получает 10 бит и 10 бит равномерно. Для другой ситуации не обязательно иметь равномерное распределение.

...