Структура байта 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 описание
Сегмент данных только для чтения
Разрешены чтение и запись
Сегмент кода с разрешением только выполнения
Сегмент кода с разрешением выполнения и чтения