к содержанию |
Процессор i80386 в защищённом режиме использует трёхступенчатую схему преобразования адреса.
Программы используют логический адрес, состоящий из селектора и смещения (аналогично процессору i80286). Селектор полностью аналогичен используемому в процессоре i80286. Компонента смещения является 32-разрядной, т.к. допустимый размер сегмента значительно превышает 64 килобайта.
Уровень логического адреса - это первая ступень в схеме преобразования адресов.
Вторая ступень - получение из логического адреса 32-разрядного линейного адреса. Линейный адрес берётся из глобальной или локальной таблицы дескрипторов (GDT или LDT) в зависимости от соответствующего бита селектора (бит 2). Механизм получения линейного адреса напоминает механизм получения 24-разрядного физического адреса в процессоре i80286. Однако линейный адрес не отображается непосредственно на адресную шину памяти, то есть он не является физическим адресом.
Для получения из линейного адреса физического адреса используется третья ступень - механизм страничной адресации. С помощью этого механизма 20 старших бит линейного адреса используются для выбора блока памяти размером 4 килобайта. Такой блок называется страницей физической памяти. Оставшиеся 12 бит линейного адреса представляют собой смещение внутри страницы.
Процесс преобразования логического адреса в линейный иллюстрируется рис. 17.
Рис. 17. Преобразование логического адреса в линейный.
Значение из поля индекса селектора используется в качестве индекса в таблице LDT или GDT для выборки 32-разрядного базового адреса. Этот базовый адрес складывается со второй компонентой логического адреса - смещением. В результате получается 32-разрядный линейный адрес.
Преобразование линейного адреса в физический иллюстрируется рис. 18.
Рис. 18. Преобразование линейного адреса в физический.
Процесс вычисления адреса страницы часто называют трансляцией страниц. Старшие 10 бит линейного адреса используются как индекс в таблице, называемой каталогом таблиц страниц. Расположение каталога таблиц страниц в физической памяти определяется содержимым системного регистра процессора CR3.
Каталог таблиц страниц содержит дескрипторы таблиц страниц, определяющие физический адрес таблиц страниц. В каталоге таблиц страниц всего может быть 1024 дескриптора. Самих же каталогов может быть сколько угодно, но в каждый момент времени используется только один - тот, на который указывает регистр CR3.
Следующие 10 бит линейного адреса предназначены для индексации таблицы страниц, выбранной с помощью старших 10 бит адреса. Таблица страниц содержит 1024 дескриптора, определяющих физические адреса страниц памяти. Размер одной страницы составляет 4 килобайта, т.е. 4096 байт.
Младшие 12 бит линейного адреса указывают смещение к адресуемому байту внутри страницы.
На рис. 19 представлен формат дескриптора таблицы страниц.
Рис. 19. Дескриптор таблицы страниц.
Для представления старших 20 битов физического адреса таблицы сраниц в дескрипторе используются биты 12-31. Младшие 12 битов адреса таблицы всегда равны нулю, таким образом, таблица страниц должна быть выровнена в памяти на границу 4096 байт (на границу страницы).
Формат дескриптора страницы представлен на рис. 20.
Рис. 20. Дескриптор страницы.
Биты 12-31 в дескрипторе страниц указывают старшие 20 бит физического адреса страницы. Младшие 12 бит адреса страницы всегда равны нулю.
Назначение бит 0-11 одинаково и для дескриптора таблицы страниц,
и для дескриптора страницы. В таблице 4 приведено описание этих
бит.
Таблица 5. Биты 0-12 дескрипторов таблиц страниц и страниц.
Номер бита | Назначение |
0 (P) | Бит присутствия в памяти. Установлен в 1, если определяемая данным дескриптором таблица страниц находится в оперативной памяти. Этот бит используется для организации виртуальной памяти. |
1 (W) | Разрешение записи. Если бит установлен в 1, то запись в страницы разрешена. Бит используется для организации защиты от записи на уровне страниц. |
2 (U) | Пользователь/супервизор. Используется для разграничения доступа к страницам операционной системы (страницы супервизора) и страницам программ пользователя. Значение бита, равное 0, соответствует страницам супервизора, 1 - страницам программы пользователя. |
3-4 | Эти биты зарезервированы и должны быть установлены в 0 для совместимости со следующими моделями процессора. |
5 (A) | Бит доступа. Он устанавливается процессором перед выполнением операций чтения страницы или записи в страницу. |
6 (D) | Бит мусора. Устанавливается, если была выполнена запись в каталог или страницу. |
7-8 | Эти биты зарезервированы и должны быть установлены в 0 для совместимости со следующими моделями процессора. |
9-12 (AVL) | Эти биты доступны для использования операционной системой (AVL - Available for use). |
Мы видим, что для процессора i80386 добавилось ещё два типа таблиц, содержащих дескрипторы и, соответственно, два типа дескрипторов - дескриптор таблиц страниц и дескриптор страниц.
Для использования механизма трансляции страниц операционная система должна установить в 1 старший бит системного регистра CR0. Если этот бит не установлен в 1, физический адрес будет равен линейному, содержимое регистра адреса каталога таблиц страниц CR3 при этом для преобразования адреса использоваться не будет.
Форматы дескрипторов, располагающихся в таблицах GDT, LDT и IDT претерпели изменения по сравнению с используемыми в процессоре i80286. Например, вместо 24-битового физического адреса в дескрипторах должен находиться 32-битовый линейный адрес.
Напомним, что в дескрипторах процессора i80286 было зарезервировано два байта. Эти байты используются процессором i80386 (рис. 21).
Рис. 21. Дескрипторы для процессора i80386.
Процессор i80386 использует 32-разрядный базовый адрес сегмента и 20-разрядное поле предела. В зарезервированном для процессора i80286 поле в битах 24-31 находится старший байт 32-разрядного базового адреса сегмента. Биты 16-19 используются для хранения старших четырёх битов предела.
В процессоре i80286 поле предела указывало размер сегмента в байтах. Для процессора i80486 интерпретация поля предела зависит от установки бита G - бита гранулярности. Если бит G установлен в 1, поле предела содержит размер сегмента в страницах (размером 4096 байт). Если бит G сброшен, размер сегмента вычисляется в байтах.
Бит гранулярности G также находится в поле, которое в процессоре i80286 было отмечено как зарезервированное.
Поле, обозначенное на рис. 21 как X, указывает разрядность выполняемых команд, принятых по умолчанию. Если этот бит установлен в 1, используются 32-разрядные команды, если сброшен в 0 - 16-разрядные.
Бит AVL предназначен для использования системным программным обеспечением.
Бит S - признак системного сегмента. Если этот бит сброшен в 0, то сегмент системный.
Назначение остальных полей дескриптора аналогично используемому в процессоре i80286. В первой главе мы привели таблицу типов сегментов, в ней описаны и сегменты для процессора i80386.
к содержанию |