|
|
|
Компьютеры - Дескриптор сегмента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 отдан операционной системе. Его состояние никак не влияет на работу с сегментом.
Просмотров: 1928
|