Процесс

 

системный пользовательский

системный сегмент кода пользовательский сегмент кода

 

 

Каждый сегмент виртуальной памяти процесса имеет описание, которое называется дескриптор сегмента. Дескриптор сегмента имеет размер 8 байт и содержит все необходимые данные для определения физического адреса и проверки прав доступа.

 

31 15 0

Базовый адрес сегмента – база 1 Размер сегмента
 
Базовый адрес сегмента – база 3 G D O U Размер сегмента Байт доступа AR Базовый адрес сегмента – база 2
               

Базовый адрес сегмента состоит из трех частей, занимает 32 бита, сложилось исторически и связано с обеспечением совместимости с предыдущими процессора семейства х86. Содержит физический адрес сегмента в ОП, записывается при загрузке сегмента в ОП.

Размер сегмента состоит из двух частей и занимает 24 бита.

Бит G (granularity) - определяет единицы измерения сегмента,

= 0 - размер задан в байтах, тогда сегмент не может быть больше 64 кбайт;

= 1 - размер задан в страницах по 4 кбайта

бит D - бит разрядности, =1 – 32=х разрядные адреса, = 0 – 16-ти разрядные адреса

бит О - не используется

бит U - используются по усмотрению программиста

 

байт доступа AR определяет права доступа к данному сегменту, то есть определяет можно ли обращаться к данному сегменту и какие действия можно выполнять.

 

7 5 – 6 4 3 2 1 0

P DPL S I C R / W A

 

Бит A – определяет было ли обращение к данному сегменту;

= 1, если было обращение к сегменту;

= 0, если не было

бит R / W - определяет действие которое можно выполнять с сегментом

для сегмента кода = 1 – чтение (выполнение) разрешено, = 0 – не разрешено

для сегмента данных = 1 – запись разрешена, = 0 – запись запрещена

бит С – бит подчиненности, = 0 – обычный сегмент (весь целиком),

= 1 – подчиненный (часть большого сегмента)

бит I - предназначения, 0 – сегмент данных, 1 – кода

бит S – бит сегмента, 0 – системный сегмент, 1 – пользовательский

бит DPL – определяет уровень привилегии,

бит P – бит присутствия, 0 – сегмент выгружен на диск, = 1 – сегмент в ОП

 

Дескрипторы сегментов объединены в таблицы.

Для управления памятью поддерживается два типа таблиц дескрипторов

Глобальная таблица дескрипторов (GDT) – содержит описание (дескрипторы) системных сегментов ОС и общих сегментов для всех прикладных процессов, а так же адреса всех локальных таблиц дескрипторов;

Локальная таблица дескрипторов (LDT) - содержит дескрипторы сегментов конкретного пользовательского процесса.

Глобальная таблица – одна, она описывает общую часть виртуального адресного пространства всех процессов. Локальных таблиц столько сколько в данный момент выполняется процессов. В определенный момент времени ОС используется только одна из локальных таблиц, а именно та, которая соответствует выполняемому (активному) пользовательскому процессу. Таблицы GDT и LDT размещены в оперативной памяти в виде отдельных сегментов.

Адреса таблиц хранятся в специальных регистрах GDTR и LDTR.

 

Таблица LDT
Дескриптор сегмента 1
Дескриптор сегмента 2
 
Дескриптор сегмента N