|
|
Компьютеры - Дескриптор сегмента23 января 2011
служебная структура в памяти, которая определяет сегмент. Длина дескриптора равна восьми байтам.
Структура сегментного дескриптора
- База начало сегмента в линейной памяти
- Лимит -1
- Права доступа флаги, определяющие наличие сегмента в памяти, уровень защиты, тип, разрядность + один пользовательский флаг
Байт прав доступа:
- Бит P определяет доступность сегмента. При обращении к сегменту со сброшенным битом P происходит исключение #NP, обработчик которого может загрузить/создать сегмент.
- Номер привилегий DPL содержит 2-битный номер, определяющий, к какому уровню защиты относится этот сегмент.
- Тип сегмента. Старший бит определяет сегмент как системный или пользовательский. Значение прочих бит для системных и пользовательских сегментов описано в таблице:
Типы системных сегментов
№ |
Биты AR |
Описание |
3 |
2 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
Зарезервировано |
1 |
0 |
0 |
0 |
1 |
Свободный 16-битный TSS |
2 |
0 |
0 |
1 |
0 |
LDT |
3 |
0 |
0 |
1 |
1 |
Занятый 16-битный TSS |
4 |
0 |
1 |
0 |
0 |
16-битный шлюз вызова |
5 |
0 |
1 |
0 |
1 |
Шлюз задачи |
6 |
0 |
1 |
1 |
0 |
16-битный шлюз прерывания |
7 |
0 |
1 |
1 |
1 |
16-битный шлюз ловушки |
8 |
1 |
0 |
0 |
0 |
Зарезервировано |
9 |
1 |
0 |
0 |
1 |
Свободный 32-битный TSS |
A |
1 |
0 |
1 |
0 |
Зарезервировано |
B |
1 |
0 |
1 |
1 |
Занятый 32-битный TSS |
C |
1 |
1 |
0 |
0 |
32-битный шлюз вызова |
D |
1 |
1 |
0 |
1 |
Зарезервировано |
E |
1 |
1 |
1 |
0 |
32-битный шлюз прерывания |
F |
1 |
1 |
1 |
1 |
32-битный шлюз ловушки |
Типы пользовательских сегментов
№ |
Биты AR |
Описание |
3 |
2 |
1 |
0 |
0 |
0 |
0 |
Сегмент данных только для чтения |
2 |
0 |
0 |
1 |
Сегмент данных для чтения/записи |
4 |
0 |
1 |
0 |
Сегмент данных только для чтения, растёт вниз |
6 |
0 |
1 |
1 |
Сегмент данных для чтения/записи, растёт вниз |
8 |
1 |
0 |
0 |
Сегмент кода только для выполнения |
A |
1 |
0 |
1 |
Сегмент кода для выполнения/чтения |
C |
1 |
1 |
0 |
Подчинённый сегмент кода только для выполнения |
E |
1 |
1 |
1 |
Подчинённый сегмент кода для выполнения/чтения |
Младший бит байта AR пользовательских сегментов можно использовать для сбора статистики о сегменте. При первом же обращении к сегменту он устанавливается процессором в 1.
- Флаг гранулярности G определяет лимит сегмента: при G=0 лимит равен значению соответствующего поля в дескрипторе, а при G=1 лимит равен полю дескриптора, умноженному на. Таким образом при G=0 максимальный размер сегмента 1 МБайт, а при G=1 4 ГБайт.
- Флаг разрядности DB актуален для пользовательских сегментов кода и стека. Определяет разрядность в 16 бит при нулевом и 32 бит при единичном значении.
- Зарезервированный флаг должен всегда равняться нулю.
- Пользовательский флаг AVL отдан операционной системе. Его состояние никак не влияет на работу с сегментом.
Просмотров: 1768
|