Как работают таблицы страниц x86? - программирование

Как работают таблицы страниц x86?

Я знаком с архитектурой MIPS, которая имеет управляемый программным обеспечением TLB. Итак, как и где вы (операционная система) хотите хранить таблицы страниц и записи таблицы страниц, полностью зависит от вас. Например, я сделал проект с одной перевернутой страничной таблицей; Я видел других, использующих 2-уровневые таблицы страниц для каждого процесса.

Но какая история с x86? Из того, что я знаю, TLB управляется аппаратным обеспечением. Говорит ли x86, в основном, говорят вам: "Эй, где используются записи таблицы страниц, которые вы сейчас используете, нужно перейти [диапазон физических адресов]"? Но подождите, я всегда думал, что x86 использует многоуровневые таблицы страниц, так что это скажет вам, где поставить 1-й уровень или что-то еще...? Я в замешательстве.

Спасибо за любую помощь.

4b9b3361

Ответ 1

При входе в защищенный режим регистр CR3 указывает на "каталог страниц" (вы можете поместить его куда угодно, прежде чем войти в защищенный режим), который является страницей памяти (помните, что "маленькая" страница - 4 KiB, а "большая" страница - 4 MiB) с записями на 1024 страницы (PDE), которые указывают на "таблицы страниц". Каждая запись - это первые 10 бит указателя (адрес таблицы страниц), плюс множество флагов, которые составляют нижнюю часть указателя (настоящее, разрешение, грязное и т.д.).

(1024 просто происходит из-за того, что страница составляет 4096 байт, а указатель - 4 байта.)

Каждая "таблица страниц" сама по себе составляет 1024 "записей в таблице страниц" (PTE), которая, опять же, содержит 1024 записи, указывающие на физические страницы в памяти вместе с кучей (почти одинаковых) флагов.

Итак, чтобы перевести 32-разрядный виртуальный адрес, вы берете верхние 10 бит указателя как индекс в таблицу в CR3 (так как есть две записи 10) и - если этот PDE далее подразделяется (это означает, что это не "большая" страница, которую вы можете определить из флагов) - вы берете верхние 20 бит PDE, просматриваете таблицу страниц по этому адресу и индексируете в него с виртуальным адресом следующие самые верхние 10 бит. Затем верхние 20 бит ссылаются на физическую страницу, предполагая, что нижние 12 бит говорят вам, что физическая страница действительно присутствует.

Если вы используете расширение физического адреса (PAE), вы получите еще один уровень в иерархии в самом верхнем.

Примечание: для вашего собственного здравомыслия (и, возможно, для процессора) вы, вероятно, захотите сопоставить каталог страниц и таблицу страниц для себя, в противном случае все будет запутываться быстро.:)

TLB управляется аппаратным обеспечением - поэтому кэширование таблиц страниц прозрачно - но есть команда InvlPG, которая делает недействительным PTE в TLB для вас. (Я не знаю точно, когда вы должны использовать его, а когда не стоит).

Источник: http://wiki.osdev.org/Paging