Вы оцените оптимизацию пространства многоуровневых таблиц страниц, когда мы перейдем в 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 уровней доступа определенно медленнее. Но я хотел проиллюстрировать экономию пространства за счет многоуровневых таблиц страниц.