MMU: Размер таблицы страниц с длинным дескриптором в AARCH64 - PullRequest
0 голосов
/ 29 октября 2018

Хотелось бы понять, память на каждом уровне покрыта таблицами страниц в AARCH64 с гранулярностью 4k.

При 47 битах VA можно получить уровень от 0 до уровня 3.

На уровне 0 может быть одна таблица, которая описывает 512 таблиц уровня 1, Теперь каждая таблица страниц уровня 1 может описывать 512 таблиц страниц уровня 2, и далее каждая таблица страниц уровня 2 может описывать 512 таблиц страниц уровня 3.

Таким образом, на уровне 3 имеется 512 таблиц страниц размером 4 КБ каждая, а занимаемая память составляет 512 * 4 КБ = 2 МБ, это то, что может охватить только одна таблица страниц уровня 2, и если у нас есть 512 таких таблиц страниц уровня на уровне 2 тогда общий объем памяти составляет 512 * 2 МБ = 1 ГБ, верно?

Аналогичным образом каждая таблица на уровне 1 указывает на 512 таблиц страниц уровня 2 (где каждая страница уровня 2 охватывает 2 МБ).

Итак, 512 * 2 МБ = 1 ГБ, и если у нас 512 страниц таблицы уровня 1 и общий объем памяти составляет 512 ГБ, верно?

Аналогично, общий объем памяти на уровне 0 составляет 1024 ГБ, верно?

1 Ответ

0 голосов
/ 30 октября 2018

Вы, похоже, перепутали одностраничные записи таблицы с целыми таблицами страниц в один момент, каким-то образом потеряли один уровень и добавил немного, а не вычел it.

Одна страница: 4'096
Таблица уровня 3: 4096 * 512 = 2'097'152 = 2МБ
Таблица уровня 2: 4096 * 512 * 512 = 1'073'741'824 = 1 ГБ
Таблица уровня 1: 4096 * 512 * 512 * 512 = 549'755'813'888 = 512 ГБ
Таблица уровня 0: 4096 * 512 * 512 * 512 * 512 = 281'474'976'710'656 = 256 ТБ

Обратите внимание, что вышеизложенное относится к 48 -битному адресу. Таким образом, из адреса 12 бит используются для смещения страницы, и 4 раза по 9 бит каждый в качестве индекса таблицы страниц (12 + 4 * 9 = 48).
Для 47 бит у вас есть только 256 записей в таблице уровня 0, так что вы получите 128 ТБ адресуемой памяти.

...