1 ЛЕКЦИЯ 3 ХАРАКТЕРИСТИКА ЗАЩИЩЕННОГО РЕЖИМА РАБОТЫ МИКРОПРОЦЕССОРА В реальном режиме работы поддерживается выполнение всего одной программы. Для этого достаточно простых механизмов распределения оперативной памяти и нет потребности в организации защиты программ от взаимного влияния. При мультизадачном режиме работы вычислительной системы микропроцессору уже недостаточно, используя сегментные регистры, знать, где расположены сегменты программ. Для обеспечения совместной работы нескольких задач необходимо защитить их от возможного несанкционированного взаимного влияния. Для решения этой задачи микропроцессору должно быть в любой момент доступно больше информации о самих задачах, в частности, о размещении их кода и данных, размере занимаемой памяти и т. д. Фирма Intel не стала нарушать принцип сегментации, оставив понятие сегмента как части адресного пространства, предоставленного отдельной программе для размещения ее кода или данных.
2 Однако каждому сегменту присваивается набор атрибутов, на основании которых микропроцессор самостоятельно контролирует доступ к сегментам. Любой сегмент памяти в защищенном режиме имеет следующие атрибуты: Расположение в памяти; размер сегмента; уровень привилегий; тип доступа (определяет назначение сегмента); некоторые другие; Таким образом, в защищенном режиме микропроцессор поддерживает два типа защиты – по привилегиям и доступу к памяти. В отличие от реального режима, в защищенном режиме программа уже не может запросто обратиться по любому физическому адресу памяти. Для этого она должна иметь определенные полномочия и удовлетворять ряду требований. Для хранения всех необходимых сведений о сегменте, включая все его атрибуты, была введена специальная информационная структура – дескриптор сегмента. Дескрипторы сегментов локализованы в трех непрерывных областях памяти, которые называются дескрипторными таблицами.
3 Модели организации памяти
4 Системные регистры микропроцессора Само название этих регистров говорит о том, что они выполняют специфические функции в системе. Использование системных регистров жестко регламентировано. Именно они обеспечивают работу защищенного режима. Их также можно рассматривать как часть архитектуры микропроцессора, которая намеренно оставлена видимой для того, чтобы квалифицированный системный программист мог выполнить самые низкоуровневые операции. Системные регистры можно разделить на три группы: четыре регистра управления;регистра управления четыре регистра системных адресов;регистра системных адресов восемь регистров отладки.регистров отладки
5 Регистры управления В группу регистров управления входят 4 регистра: cr0, cr1, cr2, cr3. Эти регистры предназначены для общего управления системой. Регистры управления доступны только программам с уровнем привилегий 0. Хотя микропроцессор имеет четыре регистра управления, доступными являются только три из них исключается cr1, функции которого пока не определены (он зарезервирован для будущего использования). Регистр cr0 содержит системные флаги, управляющие режимами работы микропроцессора и отражающие его состояние глобально, независимо от конкретных выполняющихся задач. Назначение системных флагов: pe (Protect Enable), бит 0 разрешение защищенного режима работы. Состояние этого флага показывает, в каком из двух режимов реальном (pe=0) или защищенном (pe=1) работает микропроцессор в данный момент времени.
6 mp (Math Present), бит 1 наличие сопроцессора. Всегда 1. ts (Task Switched), бит 3 переключение задач. Процессор автоматически устанавливает этот бит при переключении на выполнение другой задачи. am (Aligment Mask), бит 18 маска выравнивания. Этот бит разрешает (am = 1) или запрещает (am = 0) контроль выравнивания. cd (Cache Disable), бит 30, запрещение кэш-памяти. С помощью этого бита можно запретить (cd = 1) или разрешить (cd = 0) использование внутренней кэш-памяти (кэш-памяти первого уровня). pg (PaGing), бит 31, разрешение (pg = 1) или запрещение (pg = 0) страничного преобразования. Флаг используется при страничной модели организации памяти. Регистр cr2 используется при страничной организации оперативной памяти для регистрации ситуации, когда текущая команда обратилась по адресу, содержащемуся в странице памяти, отсутствующей в данный момент времени в памяти.
7 В такой ситуации в микропроцессоре возникает исключительная ситуация с номером 14, и линейный 32-битный адрес команды, вызвавшей это исключение, записывается в регистр cr2. Имея эту информацию, обработчик исключения 14 определяет нужную страницу, осуществляет ее подкачку в память и возобновляет нормальную работу программы; Регистр cr3 также используется при страничной организации памяти. Это так называемый регистр каталога страниц первого уровня. Он содержит 20-битный физический базовый адрес каталога страниц текущей задачи. Этот каталог содержит битных дескриптора, каждый из которых содержит адрес таблицы страниц второго уровня. В свою очередь каждая из таблиц страниц второго уровня содержит битных дескриптора, адресующих страничные кадры в памяти. Размер страничного кадра 4 Кбайт. Регистры системных адресов Эти регистры еще называют регистрами управления памятью. Они предназначены для защиты программ и данных в мультизадачном режиме работы микропроцессора.
8 При работе в защищенном режиме микропроцессора адресное пространство делится на: глобальное общее для всех задач; локальное отдельное для каждой задачи. Этим разделением и объясняется присутствие в архитектуре микропроцессора следующих системных регистров: регистра таблицы глобальных дескрипторов gdtr (Global Descriptor Table Register) имеющего размер 48 бит и содержащего 32-битовый (биты 1647) базовый адрес глобальной дескрипторной таблицы GDT и 16-битовое (биты 015) значение предела, представляющее собой размер в байтах таблицы GDT; регистра таблицы локальных дескрипторов ldtr (Local Descriptor Table Register) имеющего размер 16 бит и содержащего так называемый селектор дескриптора локальной дескрипторной таблицы LDT. Этот селектор является указателем в таблице GDT, который и описывает сегмент, содержащий локальную дескрипторную таблицу LDT;
9 регистра таблицы дескрипторов прерываний idtr (Interrupt Descriptor Table Register) имеющего размер 48 бит и содержащего 32-битовый (биты 16–47) базовый адрес дескрипторной таблицы прерываний IDT и 16-битовое (биты 015) значение предела, представляющее собой размер в байтах таблицы IDT; 16-битового регистра задачи tr (Task Register), который подобно регистру ldtr, содержит селектор, то есть указатель на дескриптор в таблице GDT. Этот дескриптор описывает текущий сегмент состояния задачи (TSS Task Segment Status). Этот сегмент создается для каждой задачи в системе, имеет жестко регламентированную структуру и содержит контекст (текущее состояние) задачи. Основное назначение сегментов TSS сохранять текущее состояние задачи в момент переключения на другую задачу. Регистры отладки Это очень интересная группа регистров, предназначенных для аппаратной отладки. Средства аппаратной отладки впервые появились в микропроцессоре i486. Аппаратно микропроцессор содержит восемь регистров отладки, но реально из них используются только 6.
10 Структуры данных защищенного режима Любой адрес, по которому программа хочет обратиться, должен быть описан с помощью дескриптора сегмента, доступ к которому разрешен для этой программы. Базовые адреса трех дескрипторных таблиц, в которых может находиться нужный дескриптор, находятся в специальных регистрах: gdtr,, ldtr, idtr. Указатель на дескриптор сегмента в одной из таблиц gdtr или ldtr, в зависимости от назначения описываемого дескриптором участка памяти, помещается в один из сегментных регистров. В связи с этим сегментые регистры в защищенном режиме называют селекторами сегментов. Структура дескриптора сегмента видна из представленной далее схемы.
11 Структура дескриптора сегмента защищенного режима
12 Типичные комбинации в поле типа сегмента Комбинации битов в поле «тип сегмента» Назначение сегмента Сегмент данных, только для чтения Сегмент данных с разрешением чтения и записи Не определено Сегмент стека с разрешением чтения и записи Сегмент кода с разрешением только выполнения Сегмент кода с разрешением выполнения и чтения Подчиненный сегмент кода с разрешением выполнения Подчиненный сегмент кода с разрешением выполнения и чтения из него