Зачем использовать иерархические таблицы страниц? - PullRequest
18 голосов
/ 23 марта 2012

Я изучаю ядро ​​Linux и читаю книгу Ядро Linux .

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

Добавлено:

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

Ответы [ 2 ]

33 голосов
/ 23 марта 2012

Вы оцените оптимизацию пространства многоуровневых таблиц страниц, когда мы перейдем в 64-битное адресное пространство.

Предположим, у вас есть 64-разрядный компьютер (что означает 64-разрядное виртуальное адресное пространство ), который имеет 4 КБ страниц и 4 ГБ физической памяти. Если у нас есть одноуровневая таблица страниц, как вы предлагаете, то она должна содержать одну запись для каждой виртуальной страницы на процесс.

Одна запись на виртуальную страницу - 2 64 адресуемых байтов / 2 12 байтов на страницу = 2 52 записей таблицы страниц

Одна запись таблицы страниц содержит: биты контроля доступа (биты, такие как страница присутствует, RW и т. Д.) + Физический номер страницы

4 ГБ физической памяти = 2 32 байтов .

2 32 байтов памяти / 2 12 байтов на страницу = 2 20 физических страниц

20 бит требуется для физического номера страницы.

Таким образом, каждая запись таблицы страниц составляет приблизительно 4 байта . (20-битный номер физической страницы составляет примерно 3 байта, а контроль доступа составляет 1 байт)

Теперь размер таблицы страниц = 2 52 записей таблицы страниц * 4 байта = 2 54 байтов ( 16 петабайт )!

16 петабайт на процесс - очень очень большой объем памяти.

Теперь, если мы будем пейджинговать также и таблицу страниц, то есть, если мы используем многоуровневые таблицы страниц, мы можем волшебным образом уменьшить объем памяти, требуемый до одной страницы. т.е. всего 4 КБ .

Теперь мы подсчитаем, сколько уровней требуется, чтобы сжать таблицу страниц до 4 КБ. Страница 4 КБ / 4 байта на страницу таблицы = = 1065 * 1024 записей . 10 бит требуемого адресного пространства. , например, 52/10 , ceiled равно 6. т.е. 6 уровней таблицы страниц могут уменьшить размер таблицы страниц до 4 КБ.

6 уровней доступа определенно медленнее. Но я хотел проиллюстрировать экономию пространства за счет многоуровневых таблиц страниц.

1 голос
/ 23 марта 2012

http://en.wikipedia.org/wiki/Page_table#Multilevel_page_table - для преодоления ловушек перевернутой таблицы страниц.

...