
4семестр / Отв_лр_№5
.docx
-
Структура и количество сегментных регистров процессора.
Существуют следующие регистры сегментов:
-
CS[0÷15] (Code Segment – регистр сегмента кодов команд),
-
SS[0÷15] (Stack Segment – регистр сегмента стека),
-
DS[0÷15] (Data Segment – регистр сегмента данных),
-
ES[0÷15], FS[0÷15], GS[0÷15] – регистры дополнительных сегментов данных.
Регистры сегментов содержат 16-разрядные селекторы дескрипторов сегментов, включающие три поля: Index – № строки в таблице дескрипторов, TI – № таблицы дескрипторов, RPL – уровень привилегий (см. рис.3).
Рис. 3. Структура скрытого регистра SDC и сегментного регистра
-
Сколько сегментов доступно задаче одновременно? Какие это сегменты?
Существуют следующие регистры сегментов:
-
CS[0÷15] (Code Segment – регистр сегмента кодов команд),
-
SS[0÷15] (Stack Segment – регистр сегмента стека),
-
DS[0÷15] (Data Segment – регистр сегмента данных),
-
ES[0÷15], FS[0÷15], GS[0÷15] – регистры дополнительных сегментов данных.
-
Расскажите о порядке загрузки сегментных регистров?
Содержимое сегментных регистров (селектор) не может быть модифицировано, они допускают лишь загрузку и сохранение содержимого. С каждым из шести сегментных регистров связан программно-недоступный скрытый регистр дескриптора (Segment Descriptor Cache - 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 – Global Descriptor Table) является структурой данных и содержит дескрипторы, доступные всем задачам. Она может содержать дескрипторы любых типов, кроме дескрипторов прерываний и некоторых видов исключений. Нулевой элемент этой таблицы процессором не используется, и обращение к нему вызывает исключение #GP.
Локальная таблица (LDT – Local Descriptor Table) может быть собственной для каждой задачи и содержит только дескрипторы сегментов задачи и шлюзов межсегментных вызовов. Все LDT сами по себе являются сегментами, а значит, у них есть дескрипторы (хранятся в GDT) и селекторы (каждый из которых для выполняемой в процессоре задачи должен находиться в специальном регистре LDTR).
-
Размеры и количество локальных и глобальных таблиц дескрипторов?
Глобальная таблица дескрипторов одна, и её адрес и размер всегда находится в регистре GDTR процессора. Но локальных таблиц дескрипторов может быть много (в пределе столько же, сколько задач в оперативной памяти). И для обрабатываемой задачи надо иметь информацию о её LDT в специальном регистре процессора LDTR.