11/11/94 03:10pm
i4_pradr.lek
А.В.Фролов, Г.В.Фролов "Защищенный
режим процессоров Intel 80286/80386/80486.
Практическое руководство по
использованию защищенного
режима" БСП том 6М
"Диалог-МИФИ" 1993
В.Б.Бродин, И.И.Шагурин
"Микропоцессор i486. Архитектура,
программирование, интерфейс" М
"Диалог-МИФИ" 1993
--"i486tm микропроцессор" в 2-х
книгах Библиотека программиста
"И.В.К.-СОФТ" М 1993
Преобразование адресов в процессоре i486.
В реальном режиме вычисление адреса практически полностью идентично процессору i8086. Имеется только одно исключение: поскольку схема адресной арифметики 32-х разрядная, то перенос из 19-го бита (считая с нуля) не теряется и адресуется 1М + 64К.
В защищеном режиме память делится на 4-х килобайтовые страницы и используется трехуровневая система адресов:
1 На первом уровне находится ЛОГИЧЕСКИЙ адрес, состоящий из селектора и смещения. Селектор имеет длину 16 бит, смещение - 32 бита;
2 Из компанент логического адреса получается ЛИНЕЙНЫЙ адрес. Схема его формирования напоминает схему формирования физического адреса в процессоре i286, но линейный адрес не используется для непосредственного обращения к памяти;
ПРИМЕЧАНИЕ: Сформированный линейный адрес может быть использован как физический, если не используется режим виртуальной памяти. Преобразование осуществляется если установлен бит "подкачки страниц" (PG) в регистре CR0.
3 При использовании системы виртуальной памяти осуществляется дальнейшее двухступенчатое преобразование адреса (ТРАНСЛЯЦИЯ СТРАНИЦ):
Сформированный 32-х разрядный линейный адрес разбивается на три участка:
ТАБЛИЦА (биты 31..22) адресуют элемент каталога таблиц страниц. Каждый элемент физический адрес таблицы страниц. В системе может быть несколько самостоятельных каталогов. Активен только один, его физический адрес находится в регистре CR3 микропроцессора.
СТРАНИЦА (биты 21..12) адресует элемент таблицы страниц. Элемент страницы содержит физический адрес начала страницы. Размер страницы 4К.
СМЕЩЕНИЕ (биты 11..0) смещение относительно начала страницы.
Дескрипторы каталога таблиц страниц и таблицы страниц имеют длину 32 бита. Их форматы полностью совпадают:
0 P Бит присутствия в памяти. Установлен в 1, если определяемая дескриптором таблица находится в оперативной памяти и назначение остальных разрядов фиксировано. Если этот бит равен 0, то оставшаяся часть дескриптора используется для хранения адреса таблицы на внешнем устройстве в формате, определяемом системным программистом. Бит используется для организации функционирования виртуальной памяти.
1 W Разрешение записи. Если установлен в 1, то запись разрешена.
2 U Пользователь/Супервизор. Значением 1 помечаются пользовательские страницы.
4..3 0 Резерв, должны быть равны нулю.
5 A Бит доступа. Устанавливается в 1 при обращении к соответствующему элементу. Используется ОС для определения "ненужных" страниц.
6 D Бит мусора. Устанавливается в 1 при записи в описываемый дескриптором элемент памяти. Используется для определения страниц, содержимое которых должно быть сохранено.
8..7 0 Резерв, должны быть равны нулю.
11..9 AVL (AVaiLable for use) Эти биты системный программист может использовать по своему усмотрению.
31..12 ADR Адрес страничного блока. Содержит старшие 20 бит физического адреса начала описываемого элемента. Младшие 12 бит считаются равными нулю.
Таблицы GDT, LDT и IDT содержат дескрипторы, формат которых незначительно отличается от формата дескрипторов процессора i286 (от младших разрядов к старшим):
1 (16 бит) Размер сегмента, биты 15..0;
2 (16 бит) Базовый адрес, биты 15..0;
3 (8 бит) Базовый адрес, биты 23..16;
4 (8 бит) Байт доступа;
5 (4 бита) Размер сегмента, биты 19..16; -
6 (4 бита) Атрибуты сегмента;
7 (8 бит) Базовый адрес, биты 31..24.
Принципиально новыми являются четыре бита атрибутов, которые могут влиять на значение остальных полей (от младших битов к старшим):
AVL Бит доступен системному программисту и используется по его усмотрению;
0 Этот бит должен быть равен нулю;
D Разрядность по умолчанию - определяет разрядность формируемого адреса и выбираемого операнда. При D=1 система 32-х разрядная;
G Бит дробности (грануляции) - указывает в каких единицах задан размер сегмента. Если стоит 0, то размер определен в байтах. При равенстве единице - в страницах по 4К (в этом случае размер сегмента может достигать 4Гбайт).
При формировании адресов в защищенном режиме контроль на правильность функционирования осуществляется на уровне линейного и физического адресов, нарушение правил на любом из уровней фиксируется исключением.