Ядро ОС Linux



         

Страничная организация (paging) в 386


Существует два уровня косвенной адресации при трансляции адреса в модуле страничной организации. Директория страниц содержит указатели на 1024 таблицы страниц. Каждая таблица страниц содержит указатели на 1024 страницы. Регистр CR3 содержит физический базовый адрес директории страницы и загружается как часть TSS в task_struct и поэтому загружается при каждом переключении задачи. 32-х битный линейный адрес разделяется следующим образом:

31 22 21 12 11 0 DIR TABLE OFFSET

Физический адрес затем вычисляется (аппаратно) таким образом:

CR3+DIR указатель на table_base table_base+TABLE указатель на page_base physical_address= page_base + OFFSET

Директории страниц (таблицы страниц) это страница, выровненная так, что нижние 12 бит используются для загрузки полезной информации о таблице страниц (страница), указатель на которую задается посредством входа. Формат входов директории страниц и таблицы страниц:

31 12 11 9 8 7 6 5 4 3 2 1 0 ADDRESS OS 0 0 D A 0 0 U/S R/W P

D - "1" означает, что страница грязная (неопределенно для входа директории страниц).

R/W - "0" означает для пользователя "только для чтения".

U/S - "1" означает страницу пользователя.

P - "1" означает, что страница находится в памяти.

А - "1" означает, что к странице был доступ (устанавливается в 0 при старении).

OS - биты могут использоваться для LRU и т.п. и определяются OS.

Соответствующие определения для Linux находятся в .

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

Страничная организация (paging) делается доступной путем установки старшего бита в CR0 [в head.S?]. В каждой фазе трансляции адреса проверяются разрешения доступа, страницы не присутствуют в памяти и нарушение защиты приводит к их отсутствию. Затем программа контроля корректности использования страниц (в memory.c) или вносит новую страницу, или снимает защиту страницы, или делает все необходимое, что должно быть сделано.

Информация о некорректной работе со страницей




Содержание  Назад  Вперед