Линейная адресация памяти
Линейная адресация памяти – схема адресации памяти компьютера.
В 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 загрузить физический адрес каталога страниц. Схема образования линейного адресного пространства. (Все стрелки указывают на начало страниц)
Каталог и таблицы страниц
Обе эти структуры представляют собой таблицы элементов каталога и таблицы страниц (англ. Page Directory Entry, PDE и англ. Page Table Entry, PTE) страницы памяти по 4 КБайт.
Оба элемента занимают по 4 байта (32 бита) и имеют похожую структуру:
Элемент каталога страниц Элемент таблицы страниц
В жёлтых полях (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]
Примечания
- ↑ В этом случае обработчик #PF лишь загружает страницу с накопителя в физическую память. Процессор всё равно обращается только к физической памяти.
- ↑ Конкретнее, в CR2 записывается полный адрес (32 бита). Напр. если программа обратилась по адресу 00001543h (то есть ко второй странице (№1) при страницах по 4 КБайт), то в CR2 запишется именно это число
- ↑ Удалить из TLB кэша можно любую страницу привилегированной командой INVLPG
Ссылки
Компьютер | Это незавершённая статья о компьютерах. Вы можете помочь проекту, исправив и дополнив её. |
Если вам нравится SbUP.com Сайт, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....