- •ОБразования российской федерации
- •Цель работы
- •Теоретическая часть
- •Сегменты задачи
- •Аппаратные средства защищённого режима
- •Защита памяти
- •Защита по привилегиям
- •Переключения задач
- •000000000000 | Gdt[index[130], [5148]] |gdt[index[130], [150]]
- •Порядок выполнения работы
- •Вопросы для самопроверки (защиты л/р)
- •Список литературы
Аппаратные средства защищённого режима
Процессор работает непосредственно с данными, полученными из основной памяти, но размещенными в высокоскоростных элементах локальной памяти процессора – регистрах. Каждый регистр может хранить одно слово данных, разрядность которого обычно определяется разрядностью процессора. Для сохранения преемственности ПО, созданного для 16-разрядных процессоров, инструкции, которые прежде адресовались к 16-разрядным регистрам, теперь могут адресоваться и к 32-разрядным расширенным регистрам при том же коде операции, кроме сегментных регистров, которые остались 16-разрядными, но получили дополнительные, теневые поля (см. рис.2). Существуют следующие регистры сегментов:
CS[0÷15] (CodeSegment– регистр сегмента кодов команд),
SS[0÷15] (StackSegment– регистр сегмента стека),
DS[0÷15] (DataSegment– регистр сегмента данных),
ES[0÷15],FS[0÷15],GS[0÷15]– регистры дополнительных сегментов данных.

Рис. 2. Сегментные регистры процессора
Регистры сегментовсодержат 16-разрядные селекторы дескрипторов сегментов, включающие три поля:Index– № строки в таблице дескрипторов,TI– № таблицы дескрипторов,RPL– уровень привилегий (см. рис.3).

Рис. 3. Структура скрытого регистраSDCи сегментного регистра
Содержимое сегментных регистров (селектор) не может быть модифицировано, они допускают лишь загрузку и сохранение содержимого. С каждым из шести сегментных регистров связан программно-недоступный скрытый регистр дескриптора (SegmentDescriptorCache-SDC), автоматически загружаемый при загрузке соответствующих сегментных регистров.Дескрипторы(см. рис. 3) используются только в защищённом режиме работы процессора и представляют собой 8-байтные структуры данных, используемые для определения свойств программных элементов (сегментов).
В защищенном режиме в регистры дескрипторов из таблицы дескрипторов загружается 32-разрядный базовый адрес сегмента в ОП, 32- разрядный размер сегмента и биты атрибутов сегментов. По содержимому этих теневых регистров при каждом обращении к памяти выполняется вычисление линейного адреса и проверка привилегий (один раз при загрузке), причём именно эти регистры задают свойства сегментов в защищённом режиме. Назначение скрытых полей дескриптора SDC следующее (для любого сегментного регистра):
сегм_рег.SDC[95÷64] – поле базового адреса сегмента, задающее начальный адрес сегмента в линейном адресном пространстве,
сегм_рег.SDC[63÷32] – поле размера сегмента, которое определяет размер сегмента в байтах,
сегм_рег.SDC.P[23] – признак присутствия сегмента в ОП компьютера (0 — сегмент «сброшен» на диск, 1 — сегмент присутствует в ОП),
сегм_рег.SDC.DPL[22÷21] – 2-разрядное поле, определяющее уровень привилегий описываемого дескриптором сегмента,
сегм_рег.SDC[19÷16] – поле «тип сегмента», определяющее тип сегмента и типы операций, допустимых над сегментом:
сегм_рег.SDC[19] – подчинённый (1) или неподчинённый (0) сегмент,
сегм_рег.SDC[17]=1, для сегмента разрешены операции чтения,
сегм_рег.SDC[18]=1, для сегмента разрешены операции записи.
сегм_рег[15÷3] – поле Index содержит номер дескриптора в таблице дескрипторов (LDT или GDT),
сегм_рег[2] – бит TI селектора, определяет выбор дескриптора сегмента из локальной или глобальной таблицы дескрипторов (TI=1 из LDT, TI=0 из GDT)
сегм_рег[1÷0] – поле RPL определяет запрашиваемый (при загрузке дескрипторов) уровень привилегий.
Системные адресные регистрыпредназначены для ссылок на таблицы дескрипторов сегментов в защищенном режиме.
Регистр GDTR[0÷47] (GlobalDescriptorTableRegister– регистр глобальной таблицы дескрипторов).

Рис. 4. Global Descriptor Table Register (GDTR)
GDTR содержит поле 32-разрядного базового адреса и 16-разрядного размера глобальной таблицы дескрипторов. Максимальный размер таблицы 216 байт = 64Кбайт.
Регистр LDTR[0÷15](LocalDescriptorTableRegister) локальной таблицы дескрипторов имеет структуру, аналогичную структуре сегментного регистра и его теневой части, и содержит селектор и дескриптор локальной таблицы дескрипторовLDT. Теневая частьLDTRсодержит 32-разрядные базовый адрес (LDTR.BASE[0÷31]) и размер (LDTR.LIMIT[0÷31]) таблицыLDT, а также поле атрибутов (LDTR.ATR[0÷15])см. рис. 5.
Регистр IDTR[0÷47](InterruptDescriptorTableRegister– регистр таблицы дескрипторов прерываний) содержит базовый адрес и размер таблицы прерываний и имеет аналогичнуюGDTRструктуру.
Регистр задачи TR[0÷15] (TaskRegister) содержит селектор дескриптора сегмента состояния задачиTSS, в котором сохраняются значения всех регистров задачи при переключении задач. Имеет структуру, аналогичную структуре сегментного регистра и его теневой части.
