- •ОБразования российской федерации
- •Цель работы
- •Теоретическая часть
- •Сегменты задачи
- •Аппаратные средства защищённого режима
- •Защита памяти
- •Защита по привилегиям
- •Переключения задач
- •000000000000 | Gdt[index[130], [5148]] |gdt[index[130], [150]]
- •Порядок выполнения работы
- •Вопросы для самопроверки (защиты л/р)
- •Список литературы
000000000000 | Gdt[index[130], [5148]] |gdt[index[130], [150]]
- если бит гранулярности установлен (1), то размер сегмента указывается в 4Кб страницах, и к прочитанному 20-битному значению дописываются 12 нулей справа, чтобы всё 20-битное значение увеличилось в 4Кб = 212раз и стало 32 разряда:
SDC.LIMIT[310] =
GDT[INDEX[130], [5148]] | GDT[INDEX[130], [150]] | 000000000000
Поля атрибутов сегмента копируются в SDCиз строки таблицы дескрипторов поразрядно.
Попытка обращения к памяти по нулевому селектору, или при попытке загрузки нулевого селектора в регистр CS[0:15] или SS[0:15], или при ссылке на дескриптор, выходящий за рамки таблицы дескрипторов вызовет исключение#GP.
Порядок выполнения работы
Для вашего варианта задания на курсовую работу, полученного у преподавателя, разработать алгоритм №1 загрузки сегментного регистра и его скрытой части селектором и дескриптором сегмента.
Вопросы для самопроверки (защиты л/р)
Структура и количество сегментных регистров процессора.
Существуют следующие регистры сегментов:
CS[0÷15] (CodeSegment– регистр сегмента кодов команд),
SS[0÷15] (StackSegment– регистр сегмента стека),
DS[0÷15] (DataSegment– регистр сегмента данных),
ES[0÷15],FS[0÷15],GS[0÷15]– регистры дополнительных сегментов данных.
Регистры сегментовсодержат 16-разрядные селекторы дескрипторов сегментов, включающие три поля:Index– № строки в таблице дескрипторов,TI– № таблицы дескрипторов,RPL– уровень привилегий (см. рис.3).

Рис. 3. Структура скрытого регистра SDCи сегментного регистра
Сколько сегментов доступно задаче одновременно? Какие это сегменты?
Существуют следующие регистры сегментов:
CS[0÷15] (CodeSegment– регистр сегмента кодов команд),
SS[0÷15] (StackSegment– регистр сегмента стека),
DS[0÷15] (DataSegment– регистр сегмента данных),
ES[0÷15],FS[0÷15],GS[0÷15]– регистры дополнительных сегментов данных.
Расскажите о порядке загрузки сегментных регистров?
Содержимое сегментных регистров (селектор) не может быть модифицировано, они допускают лишь загрузку и сохранение содержимого. С каждым из шести сегментных регистров связан программно-недоступный скрытый регистр дескриптора (SegmentDescriptorCache-SDC), автоматически загружаемый при загрузке соответствующих сегментных регистров.
Что такое селектор сегмента и дескриптор сегмента?
Регистры сегментовсодержат 16-разрядные селекторы дескрипторов сегментов, включающие три поля:Index– № строки в таблице дескрипторов,TI– № таблицы дескрипторов,RPL– уровень привилегий
Дескрипторыиспользуются только в защищённом режиме работы процессора и представляют собой 8-байтные структуры данных, используемые для определения свойств программных элементов (сегментов).
Назначение основных полей селектора сегмента и дескриптора сегмента?
Назначение скрытых полей дескриптора 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 определяет запрашиваемый (при загрузке дескрипторов) уровень привилегий.
Что такое таблица дескрипторов?
Таблица дескрипторов(илитаблица описаний) содержит описания блоковпамяти(сегментов): их расположение (влинейном адресном пространствеили надиске),права доступа, атрибуты использования,разрядностьи т. п.
Назначение локальных и глобальных таблиц дескрипторов?
С помощью селекторов из предварительно сформированных таблиц дескрипторов сегментов (GDTилиLTD), прикладная программа выбрала дескрипторы тех сегментов которые разрешены для нее.
Отличия локальных и глобальных таблиц дескрипторов?
Глобальная таблица (GDT – GlobalDescriptorTable) является структурой данных и содержит дескрипторы, доступные всем задачам. Она может содержать дескрипторы любых типов, кроме дескрипторов прерываний и некоторых видов исключений. Нулевой элемент этой таблицы процессором не используется, и обращение к нему вызывает исключение #GP.
Локальная таблица (LDT– LocalDescriptorTable) может быть собственной для каждой задачи и содержит только дескрипторы сегментов задачи и шлюзов межсегментных вызовов. ВсеLDTсами по себе являются сегментами, а значит, у них есть дескрипторы (хранятся вGDT) и селекторы (каждый из которых для выполняемой в процессоре задачи должен находиться в специальном регистреLDTR).
Размеры и количество локальных и глобальных таблиц дескрипторов?
Глобальная таблица дескрипторов одна, и её адрес и размер всегда находится в регистре GDTRпроцессора. Но локальных таблиц дескрипторов может быть много (в пределе столько же, сколько задач в оперативной памяти). И для обрабатываемой задачи надо иметь информацию о еёLDTв специальном регистре процессораLDTR.
