Возможности 80386 используются полностью, если он работает в режиме ВА. В этом режиме пространство исполнительных адресов расширяется до 4 Гбайт (2**32 байт), а область виртуальных адресов - до 64 Тбайт (2**64 байт), т.е. практически не ограничена. Режим ВА позволяет использовать дополнительные команды, специально оптимизированные для поддержки многозадачных операционных систем.
В формировании исполнительного адреса участвуют два компонента: 16-ти битовый селектор, используемый для определения адреса базы сегмента и 32-х битовый эффективный адрес.
Сформированный исполнительный адрес является физическим адресом, если не используется механизм страничной адресации. В противном случае, он преобразуется в физический. В режиме ВА селектор используется, как индекс, указывающий операционной системе на определенный элемент специальной таблицы, в которую помещен 32-х битовый адрес базы данного сегмента. Физический адрес формируется сложением базового адреса с 32-х битовым смещением.
Страничная адресация памяти является дополнительным механизмом управления памятью, используемым только в режиме ВА. Этот механизм позволяет преобразовывать исполнительные адреса в физические.
Физический адрес 48 битовый указатель ----------¬ ----------T----------¬ ¦ ¦ /|\ ¦ Сегмент ¦ Смещение ¦ ¦ ¦ | 4К байтов L--T------+----T------ +---------+ \|/ 15 ¦ 31 ¦ 0 ¦ ¦ /|\ ¦ L-------------¬ ¦ ¦ | 4К байтов ¦ ¦ ¦_________¦ \|/ ¦ ----------------¬ ¦ -----------¬ ¦ ¦ /|\ ¦ ¦ Права доступа ¦ ¦ ¦ 80386 ¦ ¦ ¦ | 4К байтов ¦ +---------------+ ¦ ¦ механизм ¦ физи- ¦_________¦ \|/ ¦ ¦ Граница ¦ ¦ ¦ странич- ¦ ческий ¦_________¦ /|\ ¦ +---------------+ V ¦ ной ¦ адрес ¦ Операнд ¦ | Физическая L-->¦ Базовый адрес +---> + -------->¦ организа +------->¦ памяти ¦ | страница L----------------32 Линейный ¦ ции ¦ Адрес ¦_________¦ | 4К байтов Дескриптор адрес ¦ памяти ¦_______-+_________¦ \|/ сегмента L----------- при /¦ ¦ /|\ странич-¦ ¦ | 4К байтов ной ¦_________¦ \|/ структуре¦ ¦ /|\ ¦ ¦ | 4К байтов ¦_________¦ \|/ ¦ ¦ /|\ ¦ ¦ | 4К байтов L---------- \|/ Рис.4-2. Страничное устройство памяти и сегментация
Сегментация - это один из методов управления памятью. Он является основой защиты памяти. Сегменты - самостоятельные области памяти, имеющие собственные атрибуты. Например, в сегменте могут размещаться коды программ или таблицы операционной системы. Вся информация о сегменте запоминается в 8-ми байтовой структуре, называемой дескриптором. Все дескрипторы храняться в аппаратно реализуемых таблицах.
Термины, используемые при описании дескрипторов, уровней привилегированности и защиты:
Задача (процесс) - совокупность выполняемых программ.
Таблицы дескрипторов определяют все сегменты, которые используются в системе на базе 80386.
Имеется три типа таблиц:Каждая из таблиц храниться в своей области памяти и имеет размер от 8 байт до 64 кбайт. Каждая таблица может содержать до 8к 8-ми байтных дескрипторов. Старшие 13 бит селектора используются в качестве индекса дескрипторной таблицы. Для обращения к таблицам имеются специальные регистры, хранящие 32-х битовый исполнительный адрес и 16 битовую границу данной таблицы.
Эти регистры GDTR, LDTR и IDTR загружаются командами LGDT, LLDT, LIDT и сохраняются командами SGDT, SLDT и SIDT. Манипуляция таблицами осуществляется операционной системой при помощи привилегированных команд.
Таблица LDT содержит дескрипторы, используемые в данной задаче. Обычно ОС разрабатываются таким образом, чтобы каждая задача имела отдельную LDT. LDT может содержать только дескрипторы команд, данных, стека, номера задачи и вызова номера. Таблицы LDT служат механизмом для изоляции сегментов команд и данных отдельных задач от ОС, в то время, как GDT хранит дескрипторы сегментов, являющихся общими для всех задач. Сегмент не может быть доступен задаче, если его дескриптор отсутствует внутри текущей LDT или GTR. Это обеспечивает защиту сегментов задач и в то же время, совместное использование глобальных данных различными задачами. В отличие от 6-ти байтовых GDT и IDT регистров, которые хранят базовый адрес и ограничитель, видимая часть регистра LDT хранит только 16 битовый селектор. Этот селектор определяет дескриптор LDT в GDT.
IDT содержит дескрипторы, указывающие расположение 256 подпрограмм обслуживания прерываний. IDT может хранить только вектора задач, вектора прерываний и вектора трассировок. IDT должна быть не менее, чем 256 байтовой, чтобы хранить дескрипторы 32 прерываний, зарезервированных ф. Intel. Каждое прерывание, используемое в системе, должно быть описано в IDT. IDT используется при выполнении команд INT, внешних запросов прерываний в особых ситуациях.
Объект, на который указывает селектор сегмента, называется дескриптором. Дескриптор - это 8-ми байтная величина, определяющая атрибуты данной области исполнительных адресов, т.е. сегмента. Эти атрибуты включают 32-х битовую базу исполнительного адреса сегмента, 20-ти битовую длину, а также единицу, в которых задается длина сегмента (страница или байт), уровень защиты, уровни чтения, записи и выполнения, тип сегмента и длина операндов (16 или 32). Вся информация об атрибутах сегмента заключена в 12 битах дескриптора сегмента.
Все сегменты 80386 имеют 3 единых поля: P, DPL, S.
31 0 Адрес байта ---------------------------------------------------------------------------- |База сегмента 15...0 | Граница сегмента 15...0 | 0 |---------------------------------------|----------------------------------| |BASE 31...24 | G | D | 0 | 0 | LIMIT | P | DPL | S | TYPE | A | BASE | +4 | | | | | | 19...16 | | | | | | | | |23...16| --------------------------------------------------------------------------- BASE базовый адрес сегмента LIMIT длина сегмента P бит присутствия 1=присутствует 0=отсутствует DPL привелегированный уровень дескриптора 0-3 S дескриптор сегмента 0-дескриптор системы 1-дескриптор сегмента данных или сегмента инструкций TYPE тип сегмента A бит доступа G бит единицы измерения 1=длина сегмента указывается в страницах 0=длина сегмента указывается в байтах D размерность операндов и зффективных адресов (присутствует только в дескрипторах кодовых сегментов 1=32-разрядный сегмент 0=16-разрядный сегмент 0 бит должен иметь нулевое (0)значение для обеспечения в дальнейшем совместимости с процессором Рис.4-5. Дескрипторы сегмента
Формат такого дескриптора и байт прав доступа приведены на рис.4-6 и табл.4-1 соответственно.
Дескрипторы сегментов команд и данных имеют несколько общих полей: A, G.
A - бит используется ОС для получения статистики по обращению к данному сегменту.
G - бит указывает величину, в которых указывается размер сегмента. Длина сегмента может быть 1 Мбайт (G=0, т. е. задан в байтах) или 4 Гбайт (G=1, т.е. задан в страницах - 2**20 страниц по 4 Кбайт каждая).
Система на базе 80386 может включать сегменты как байтовой размерностью, так и со страничной размерностью, если включен блок страничной адресации.
Бит Е указывает, какой из сегментов выполняется: командный (E=1, S=1) или данных (E=0, S=1).
Кодовый сегмент может находится в стадии только выполнения (бит R=0) или выполнения/чтения (R=1). Запись в кодовый сегмент не возможна.
Кодовые сегменты могут изменяться, через вымышленные имена (метки). Метки приписываются сегментам данных, которые располагаются в некотором пространстве исполнительных адресов, как сегменты команд.
Бит D указывает размерность операндов и эффективных адресов (32 бита при D=1, 16 бит при D=0). Это позволяет выполнять команды для 80286.
Другим атрибутом сегментов команд является бит согласования С. При С=1 согласованные сегменты могут выполняться в режиме разделения программами, имеющими различные уровни привилегированности.
Сегменты, определяемые как сегменты данных (E=0, S=1), могут быть двух типов: сегменты стека и сегменты данных. Бит направления расширения (ED) определяет тип сегмента. Если сегмент стековый, то смещение должно быть больше, чем граница сегмента. Для сегмента данных смещение должно быть меньше или равно границе сегмента. Другими словами, сегменты стека начинаются от базы исполнительного адреса + максимального размера сегмента и размещаются в сторону уменьшения до базы исполнительного адреса + граница. Сегмент данных начинается с базы исполнительного адреса и кончается границей сегмента.
Бит записи W управляет записью в сегменте. При W=0 сегменты данных работают только на чтение. Стековые сегменты должны иметь W=1.
Бит B указывает размерность регистра - указателя стека. Если В=1, то ESP работает как 32-х битовый регистр и верхняя граница стека FFFFFFFF. Если В=0 - все команды работы со стеком используют SP (16 битовый) и верхняя граница стека FFFF.
Эти дескрипторы содержат информацию о системных таблицах, задачах и паролях. Системный дескриптор 80386 имеет 32 разрядную базу и 20 битовую границу, системный дескриптор 80286 соответствует 24 и 16 бит (старшие 16 бит равны 0).
Рис.4-7.Дескрипторы LDT содержат информацию о таблицах локальных дескрипторов. Таблица локальных дескрипторов содержит дескрипторы сегментов, используемых конкретной задачей. Команда загрузки регистра LDT должна иметь нулевой уровень привилегированности (поле DPL игнорируется).
Дескриптор сегмента состояния задачи содержит информацию о местонахождении, размере и уровне привилегированности сегмента состояния задачи (TSS). TSS - сегмент специального формата, который содержит всю необходимую информацию о задаче и поле, обеспечивающее связь задач между собой. Поле TYPE указывает на текущую исполняемую задачу (из цепочки активных задач) или доступный TSS. Поле TYPE также указывает, используется ли TSS для МП 286 или 386. Регистр задач (TR) хранит селектор, который указывает текущий TSS.
Шлюзы используются для управления доступом к определенным точкам внутри управляющего кодового сегмента.
Различают:Шлюзы реализуют дисциплину взаимодействия при управлении передачей между источником и приемником. При взаимодействии процессор автоматически проверяет защиту. Это также позволяет проектировщикам системы управлять точками внутри ОС. Шлюзы вызова используются для изменения уровней привилегированности. Шлюзы задач используются для переключения задач, а шлюзы прерываний и трассировок используются для определения специальных программ обслуживания прерываний.
Шлюз вызова, главным образом, используются для передачи управления программам с более высоким уровнем привилегированности.
Дескриптор шлюза вызова содержит 3 поля:Поле счетчика слов используется только в шлюзах вызыва, которые изменяют уровень привилегированности, в остальных типах это поле игнорируется.
Шлюзы прерываний и трассировок используют поля селектора назначения и смещения назначения дескриптора для указания начала программ управления прерыванием или трассировкой. Различия между шлюзами прерываний и шлюзами трассировок заключается в том, что шлюз прерывание выключает прерывания (сбрасывает бит IF) в то время, как шлюз трассировки нет.
Шлюзы задач используются при переключении задач. Шлюзы задач могут обращаться только к сегменту состояния задач (TSS), поэтому используется только селекторная часть а смещение игнорируется.
Прерывание 13 формируется, когда селектор назначения указывает на некорректный тип дескриптора.
Формат байта прав доступа одинаков для дескрипторов всех шлюзов. Р=1 - указывает на то, что шлюз открыт. Р=0 - шлюз закрыт, при этом, если необходимо, формируется прерывание 11. DPL указывает уровень привилегированности и указывает, в каких случаях данный дескриптор может использоваться задачей (см. 4.4). Бит 4 поля S должен быть равен 0 и тем самым указывать, что это дескриптор управления системой.
Селектор в режиме РМ имеет 3 поля:
В дополнение к величине селектора каждый сегментный регистр имеет связанный с ним регистр (КЭШ ЗУ) дескриптора сегмента. Когда происходит изменение содержимого сегментного регистра, 8-ми байтный дескриптор, связанный с этим селектором, автоматически переписывается в процессор. Эта информация используется до тех пор, пока не потребуется доступ к другому сегменту. Содержимое дескрипторных регистров программно недоступно (невидимо для программистов). При программном изменении дескрипторных таблиц, хранящихся в ЗУ, необходимо осуществлять перезагрузку дескрипторных регистров.
Содержимое этих регистров зависит от режима работы МП. Формат регистров для режима RM приведен на рис.4-11.
Для обеспечения совместимости с архитектурой 8086 база устанавливается в течение 16-ти тактов в соответствии со значением селектора, граница фиксирована и равна 0000FFFF, а атрибуты соответствуют наличию и полной доступности сегмента. В РМ внутренний уровень привилегированности всегда максимальный (=0), поэтому команды ввода - вывода и другие привилегированные команды могут выполняться.
Формат регистров в режиме РМ представлен на рис.4-12.
В РМ значения полей определяется содержимым дескриптора сегмента индексированного селектором.
Формат регистра для режима виртуального 8086 приведен на рис.4-13.
В отличие от режима RM виртуальная программа имеет минимальный уровень привилегированности (=3), обеспечивая трассировку всех команд IOPL и команд с нулевым уровнем привилегированности.
Продолжение: Защита, страничная адресация, виртуальная среда 8086
© Колесников Дмитрий Геннадьевич
Учебник по СайтоСтроению
-
|