Регистры сегментов и дескрипторов сегментов.
Архитектура микропроцессора поддерживает организацию памяти в виде сегментов. Всего имеется 6 сегментных регистров.
В реальном режиме: для хранения адресов начала соответствующих сегментов используется 16-хразрядные регистры CS, SS, DS, ES, FS, GS. Они выполняют те же функции, что и в микропроцессоре 8086. то есть, используются при вычислении физических адресов путем суммирования базового адреса, находящегося в сегментном регистре, со смещением. Такое суммирование выполняет блок сегментации, где располагаются и сами сегментные регистры. Максимальный размер сегмента в реальном режиме 64 Кбайт.
В защищенном режиме содержимое сегментного регистра используется как селектор сегмента. С каждым из сегментных регистров связан регистр дескриптора сегмента. Обращение к дескриптору осуществляется с помощью селектора, который представляет собой 16-хразрядный указатель, имеющий 3 поля.
Биты 0 и1 - это поле RPL, которое определяет уровень привилегий запроса и используется в механизме защиты памяти.
Бит 2 – Это поле TI, которое служит индикатором таблицы. При TI=0 используется глобальная таблица дескрипторов GDT. При TI=1 используется локальная таблица дескрипторов LDT.
Поле INDEX – служит индексом для выбора одного из 8192 дескрипторов (213), содержащихся в таблицах GDT или LDT. Сами 8-мибайтовые дескрипторы хранятся в памяти в составе массивов данных, сформированных в виде таблиц. В микропроцессоре используется 3 таблицы дескрипторов: GDT, LDT и таблица дескрипторов прерывания IDT.
С каждой из таблиц связан соответствующий регистр, который находится в микропроцессоре. Это регистры: GDTR, LDTR и IDTR.
В качестве примера приведем формат регистра GDTR. Регистр GDTR 48-разрядный. 32-разряда задают базовый адрес таблицы дескрипторов, а 16 разрядов указывают размер этой таблицы в байтах.
При обращении селектора к таблице GDT сдвинутый на 3 разряда влево (умноженный на 8) селектор служит в качестве смещения для формирования адреса дескриптора. Это смещение сравнивается с границей (с размером) таблицы дескрипторов, находящейся в разрядах с 0 по 15 регистра GDTR. Если смещение превышает границу, то вырабатывается соответствующее прерывание. Если нарушения границы нет, то смещения суммируются с базовым адресом таблицы дескрипторов. В результате суммирования получается логический адрес младшего байта, выбираемого дескриптора.
Выбираемый дескриптор имеет следующий формат
32-хразрядный базовый адрес сегмента (база) и 20-тиразрядный размер сегмента размещены по частям в различных байтах дескриптора. Четыре бита 6-го байта определяют следующие атрибуты сегмента:
G – бит дробности, который указывает, в каких единицах задан размер сегмента;
При G = 0 – размер задан в байтах и максимальный объем сегмента в этом случае равен 220 = 1 Мб;
При G = 1 – размер задан в страницах, объемом 4 кб каждая страница. Максимальный объем сегмента в этом случае равен 212 х 220 = 232 = 4 Гб;
D – бит разрядности, который определяет разрядность формируемого относительного адреса или операнда.
При D = 0 – адрес или операнд – 16-тиразрядный;
При D = 1 – адрес или операнд – 32-хразрядный.
53-ий разряд – всегда = 0.
52-ой – имеет произвольное значение Х.
Байт доступа (5-ый) дескриптора определяет право доступа к выбираемому сегменту.
Дата добавления: 2015-08-14; просмотров: 1065;