Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4семестр / Методичка лр_№5.doc
Скачиваний:
20
Добавлен:
30.04.2013
Размер:
501.76 Кб
Скачать
  1. Аппаратные средства защищённого режима

Процессор работает непосредственно с данными, полученными из основной памяти, но размещенными в высокоскоростных элементах локальной памяти процессора – регистрах. Каждый регистр может хранить одно слово данных, разрядность которого обычно определяется разрядностью процессора. Для сохранения преемственности ПО, созданного для 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, в котором сохраняются значения всех регистров задачи при переключении задач. Имеет структуру, аналогичную структуре сегментного регистра и его теневой части.

Соседние файлы в папке 4семестр