- Статьи для начинающих -

   
- Назад на оглавление -
Сегментация в защищенном режиме

Начиная с 80386 сегментные регистры в процессорах Intel имеют размер уже не 2 байта, а 10 байт. "Теневые" 8 байт недоступны ни для чтения, ни для записи, они используются только процессором.

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

Таблицы дескрипторов состоят из восьмибайтных дескрипторов. (эти самые 8 байт и помещаются в теневую часть сегментных регистров при их загрузке)

Формат дескриптора:
байты 0-1: биты 15-0 лимита сегмента
байты 2-3: биты 15-0 базы сегмента
байт 4: биты 23-16 базы сегмента
байт 5: байт доступа

    бит 7: бит присутствия сегмента
    биты 6-5: уровень привилегий
    бит 4: тип дескриптора (для GDT - 1)
    бит 3: тип сегмента (0 - сегмент данных, 1 - сегмент кода)
    бит 2: для сегмента данных: расширение вниз, для сегмента кода: подчиненность
    бит 1: для сегмента данных: разрешение записи, для сегмента кода: разрешение чтения
    бит 0: бит обращения (1 - к дескриптору было обращение)
байт 6:
    бит 7: гранулярность сегмента (0 - лимит в байтах, 1 - лимит - количество 4-килобайтных единиц)
    бит 6: бит разрядности сегмента(0-16бит, 1-32бит)
    бит 5: обнулен
    бит 4: не используется
    биты 3-0: биты 19-16 лимита
байт 7: биты 31-24 базы сегмента

База селектора - байт, с которого начинается описываемый сегмент. Лимит - размерность сегмента.

Рассмотрим пример дескриптора:
FF, FF, 00, 00, 00, 92, CF, 00
Этот дескриптор описывает сегмент данных с базой 0, гранулярностью 1 и лимитом FFFFF, т.е. - с помощью этого дескриптора можно обращаться ко всем доступным процессору 4 гигабайтам памяти.

В защищенном режиме в сегментных регистрах присутствуют селекторы сегментов - которые фактически являются указателями на необходимый дескриптор в таблице.

Формат селектора таков:
биты 16-3: номер дескриптора в таблице
бит 2: бит используемой таблицы (0 - GDT, 1 - LDT)
биты 1-0: уровень привилегий для обращения к сегменту
Пример селектора:
00001000b - селектор, указывающий на первый дескриптор в таблице GDT, требуемый уровень привилегий - 0 (наивысший).

Нулевой дескриптор (дескриптор с порядковым номером 0) не используется и любое обращение к сегменту, описанному нулевым дескриптором приводит к исключению GP (General Protection Fault - общая ошибка защиты)

Хостинг от uCoz