Структура байта AR
Таблица IDT
Структура дескрипторных таблиц
Существует 3 типа дескрипторных таблиц:
- Глобальная дескрипторная таблица (GDT).
Это основная общесистемная таблица, к которой допускается обращение со стороны программ, обладающих достаточными привилегиями. Расположение таблиц в памяти локализуется с помощью регистра GDTR. В эту таблицу входят:
o дескрипторы сегментов кодов программ;
o дескрипторы сегментов данных программ;
o дескрипторы стековых сегментов программ;
o дескрипторы сегментов состояния задач;
o дескрипторы для локальных дескрипторных таблиц;
o шлюзы вызова;
o шлюзы задач
- Локальная дескрипторная таблица (LDT)
Для любой задачи в системе может быть задана своя дескрипторная таблица. С помощью этой таблицы локализуется адресное пространство задачи. Таблицы LDT могут содержать следующие типы дескрипторов:
o дескрипторы кодов;
o дескрипторы сегментов данных;
o дескрипторы сегментов стеков;
o шлюзы вызова и шлюзы задач.
Таблица содержит дескрипторы, с помощью которых происходит обращение к программам обработки прерываний.
Структура дескриптора:
base_1, base_2 , base3– указывают на базовый адрес сегмента (32 бита).
Размер сегмента= 16 разр (limit1) + 4 разр (limit2) = 20 разр
G – определяет масштаб измерения размера сегмента
«0» размер в байтах
«1» размер в страницах
D – определяет разрядность операндов и режим адресации
«0» 16-разрядная адресация
«1» 32-разрядная адресация
U– бит пользователя
P– бит присутствия, определяет местоположение сегмента:
«0» сегмента нет в оперативной памяти,
«1» сегмент есть в оперативной памяти.
DPL – определяет приоритет. Используется для защиты сегмента по привилегиям. 4 уровня привилегий, 0-ой – высший.
S– определяет какой объект описывает дескриптор:
«1» дескриптор описывает сегмент (объект – сегмент),
«0» описывается структура, которая может и не быть сегментом в оперативной памяти.
I – конкретизирует тип сегмента:
«0» сегмент данных или стека,
«1» сегмент кода.
C/ED – трактуется по разному. Если сегмент является кодовым, то С определяет подчиненность сегмента (1 подчинен, 0 обычный сегмент кода). Если сегмент является сегментом данных или стека, то ED определяет тип сегмента (данные -0, сегмент стека -1).
R/W – несет различную функциональную нагрузку в зависимости от типа сегмента.
Если дескриптор указывает на сегмент кода. То при R=0 запрещается чтение сегмента, а при R=1 – разрешается.
Для сегмента данных при W = 0 модификация данных запрещена, а при W=1 - разрешена.
A – бит доступа к сегменту, устанавливается аппаратно при обращении к сегменту
I | C/ED | R/W | описание |
Сегмент данных только для чтения | |||
Разрешены чтение и запись | |||
Сегмент кода с разрешением только выполнения | |||
Сегмент кода с разрешением выполнения и чтения |