Линейная адресация памяти

Материал из Seo Wiki - Поисковая Оптимизация и Программирование

Перейти к: навигация, поиск

Линейная адресация памяти – схема адресации памяти компьютера.

В Intel-совместимых процессорах доступна, начиная с Intel 80386.

Благодаря введению механизма линейной адресации можно создавать любое (сколько в память влезет) количество адресных пространств. Причём каждая страница линейного адресного пространства может находиться по любому (естественно, выравненному по границе 4 КБайт) физическому адресу, а благодаря обработчику #PF и на любом накопителе [1].

Содержание

Страница

Вся физическая память делится на страницы фиксированного размера (4 КБайт, 2 МБайт, 4 МБайт). Каждая страница, независимо от размера выравнена по границе 4 КБайт.

Деление линейного адреса

При использовании линейной адресации 32-битный адрес делится на три части:

  • Номер записи в каталоге страниц (номер таблицы страниц, см. ниже) – биты 31-22 (10). Одна запись из каталога страниц определяет 4 МБайт адресного пространства.
  • Номер записи в таблице страниц (номер страницы в таблице страниц, см. ниже) – биты 21-12 (10). Одна запись из таблицы страниц определяет 4 КБайт адресного пространства.
  • Смещение в странице – биты 11-0 (12).

При использовании страниц по 4 МБайт вторая часть отсутствует. Смещение же в странице определяют биты 21-0 (22).

Принцип работы

Линейная адресация доступна только в защищённом режиме. Для её включения необходимо установить бит PG в регистре CR0. Предварительно необходимо создать в памяти каталог страниц (англ. Page Directory, PD) и таблицы страниц (англ. Page Table, PT), после чего в регистр CR3 загрузить физический адрес каталога страниц. Файл:Linear addressing.png

Каталог и таблицы страниц

Обе эти структуры представляют собой таблицы элементов каталога и таблицы страниц (англ. Page Directory Entry, PDE и англ. Page Table Entry, PTE) страницы памяти по 4 КБайт.

Оба элемента занимают по 4 байта (32 бита) и имеют похожую структуру:

Файл:PDE.png Файл:PTE.png

В жёлтых полях (Page table address, Page address) записаны старшие 20 бит адреса таблицы страниц и страницы соответственно (младшие 12 бит физического адреса всегда равны нулю – не забывайте о выравнивании).

Три бита Avl – это биты, отданные системе. В них можно записать всё что угодно.

Описание флагов:

  • Бит P (англ. Present) определяет наличие данной страницы или таблицы страниц в физической памяти. Если он сброшен, то процессор записывает линейный адрес отсутствующей страницы [2] в регистр CR2 и передаёт управление обработчику #PF, который должен загрузить страницу в память (или создать её) и установить этот бит.
  • Бит RW (англ. Read/Write) определяет, можно ли в эту страницу что-то писать (1 – можно, 0 – нельзя).
  • Бит US (англ. User/Supervisor) разрешает коду с CPL=3 (код пользователя) обращаться к этой странице (при US=1).
  • Бит PWT (англ. Page write through) – запрещение кэша записи (немедленная запись). Используется для управления кэшированием данной страницы. Если он установлен, то запись происходит непосредственно в оперативную память. Актуально обычно в многоядерных машинах.
  • Бит PCD (англ. Page cache disable) – запрещение кэширования этой страницы. При обращении к такой странице, она не заносится в кэш.
  • Бит A (англ. Accessed). Аналогично биту A в дескрипторе сегмента, этот бит никак не влияет на работу со страницей. Он просто устанавливается процессором при первом же обращении к этой странице (чтение, запись, выполнение).
  • Бит D (англ. Dirty, букв. грязный) используется только в элементах таблицы страниц (PTE) для отслеживания изменений страницы. Аналогично биту A, устанавливается процессором, но только при записи на эту страницу.
  • Бит PS (англ. Page size, только каталог страниц) определяет размер страницы. Если сброшен, то этот элемент указывает на таблицу страниц с размером страниц 4 КБайт. Если установлен, то элемент указывает на страницу размером 4 МБайт при 32-битной физической адресации или 2 МБайт при 36-битной. Важно! Работает только при установленном бите PSE в регистре CR4.
  • Бит PAT (англ. Page attribute table, только таблица страниц). Нет информации
  • Бит G (англ. Global). Если этот бит установлен, то адрес страницы (или таблицы страниц) никогда не удаляется из TLB кэша. [3]

Примечания

  1. В этом случае обработчик #PF лишь загружает страницу с накопителя в физическую память. Процессор всё равно обращается только к физической памяти.
  2. Конкретнее, в CR2 записывается полный адрес (32 бита). Напр. если программа обратилась по адресу 00001543h (то есть ко второй странице (№1) при страницах по 4 КБайт), то в CR2 запишется именно это число
  3. Удалить из TLB кэша можно любую страницу привилегированной командой INVLPG

Ссылки


Личные инструменты

Served in 0.163 secs.