Я тут оставлял пост, касающийся использования рекурсивных ссылок для 64 бит, но как-то совсем не учел, что в этой архитектуре ВАП может разрываться на две части, поэтому сильно не ругайтесь, если увидите какие-то несуразицы, связанные с этим. Итак:
vlad9486 писал(а):
После этого, чтобы поддерживать отображенные таблицы страниц в актуальном состоянии, каждое новое отображение должно сопровождаться опять рекуррентным отображением вновь созданных таблиц.
Нет, рекурсия на то и нужна, чтобы не делать одну и ту же работу дважды. При построении цепочки для отображения конечных страниц созданные страницы таблицы будут отображаться автоматически.
Я прикинул, как это должно работать для 64 бит. По-прежнему нужна лишь одна страница с рекурсивной ссылкой. А если ты хочешь уплотнить пространство, то потребуется от одной до трех доп. страниц (в зависимости от выбранного размера ВАП) без рекурсивных ссылок, которые никогда не будут изменяться и не должны отображаться в ВАП. Например, для пространства размером 512 гиг структура будет такой:
Код:
xzzz ; L4 - нет рекурсивной ссылки
|
v
zzzr ; L3 - появилась рекурсивная ссылка
|
v
zzzr ; L2
|
v
zzzr ; L1
Последние три страницы - это одна и та же физическая страница - главный каталог логического уровня (L4 - главный каталог физического уровня, ссылка на который будет загружаться в cr3), т.е. всего нужны две физические страницы.
Я разместил рекурсивную ссылку в конце каталога. Это значит, что таблица страниц будет размещаться в конце нашего ВАП размером 512 гиг и иметь минимальный размер (1/512 от размера ВАП).