Зачем использовать иерархические таблицы страниц?

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

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

Добавлено:

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

Ответ 1

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

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

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

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

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

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

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

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

Теперь таблица таблицы Size = 2 52 Таблица таблиц * 4 байта = 2 54 байты (16 петабайт)!

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

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

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

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