E.3. Формат дескрипторной таблицы.
На рисунке E.3. приведен формат дескрипторов в дескрипторных таблицах. Подробнее смотри [??? Григорьев и Обнинск.] На них обозначены:
E.4. Формат локальной дескрипторной таблицы.
Базовый адрес (32-х битный) - базовый адрес сегмента. Именно этот адрес сформирует процессор при нулевом смещении.
Предел (20-битный). Определяет размер сегмента в байтах.
Бит присутствия (P) установлен в состояние 1, когда он находится (присутствует) в физической памяти.
Двухбитное поле привилегий (DPL) определяет уровень привилегий сегмента. Существуют четыре уровня привилегий: от 0 до 3.
Бит S (системный, сегмент) всегда установлен в 1, если этот объект в дескрипторной таблице является сегментом. В случае S=0 данный объект может являться, а может и не являться сегментом памяти.
Бит гранулярности G. При бите гранулярности G = 0 предел сегмента измеряется в байтах, а при G = 1 - в страницах по 4 Кбайт.
Бит D - размер по умолчанию. Он определяет, какая из размерностей для данных (16 или 32 бита) применяется для операндов процессора. При D=0 процессор интерпретирует содержимое сегмента кода как 16-ти битный код процессора i80286, а при D=1 - как 32-х битный код процессора i80486 и старше. Использование бита D - самый простой способ переключения между 16-ти и 32-х битными приложениями.
Бит A - доступа и обращения. Этот бит процессор автоматически устанавливает в состояние 1, когда происходит обращение к сегменту в физической памяти, описываемым данным дескриптором. Он предназначен для предотвращения свопинга сегмента на диск в момент обращения к нему.
Бит X зарезервирован корпорацией Intel для своих будущих разработок. Он должен всегда равняться 0.
Бит U может быть использован программистом для своих целей.
Трехбитное поле ТИП используется для указания целевого использования сегмента. Его значения:
000b - сегмент данных, разрешено только считывание.
001b - сегмент данных, разрешено считывание и запись.
010b - сегмент стека, разрешено только считывание (не используется в практике.)
011b - сегмент стека, разрешено чтение и запись.
100b - сегмент кода, разрешено только выполнение.
101b - сегмент кода, разрешено выполнение и считывание.
110b - подчиненный сегмент кода, разрешено только выполнение.
111b - подчиненный сегмент кода, разрешено выполнение и считывание.
| |