Дескрипторы сегментов кода и данных


определяют базовый адрес, размер сегмента, права доступа (чтение, чтение/запись, только исполнение кода или исполнение/чтение), а для систем с виртуальной памятью еще и присутствие сегмента в физической памяти (рис. 3.13).

SEGMENT BASE15…0

SEGMENT LIMIT 15…0

0+4

BASE 31…24

G

D

0

АV L

LIMIT 19…16

P

D

PL

S

TYP

E

A

BASE 23…16

В байте управления доступом (Access rights byte) у этих дескрипторов бит S=l (Segment Descriptor). Остальные поля байта имеют следующее назначение:

Бит 7 — Р (Present) — присутствие в памяти. При Р=1 сегмент отображен в физической памяти, при Р=0 отображения нет и поля базового адреса и лимита не используются.Биты 6, 5 — DPL (Descriptor Privilege Level) — уровень привилегий сегмента.Бит 4 — A (Accessed) — обращение: А=0 — к сегменту не было обращения, А=1 — селектор данного сегмента загружался в регистр сегмента или для него выполнялась команда тестирования. Бит 3 -~ Е (Executable) определяет тип сегмента: Е=0 — сегмент данных, Е=1 — сегмент кода.Свойства сегмента задает поле Type (биты 3-1). Для дескриптора сегмента данных (Е=0, S^l) слово лимита трактуется по-разному в зависимости от направления расширения. Биты поля Type имеют следующее назначение:Бит 2 — ED (Expansion Direction) — контролируемое направление расшире­ния: ED=0 — расширяемый вверх (смещение не должно превышать значения лимита, ED=1 — расширяемый вниз (стек, у которого смещение должно превы­шать значение лимита).Бит В в предпоследнем байте дескриптора сегмента стека определяет раз­рядность используемого указателя стека: В=-0 — используется 16-битный SP с максимальным лимитом FFFFh, разрядность данных при операциях PUSH, POP 16 бит; при В=1 используется 32-битный ESP с лимитом FFFFFFFFh, разрядность данных при операциях PUSH, POP — 32 бит.Бит 1 — W (Writeable) — разрешение (W-l) или запрет (W=0) записи данных в сегмент. В сегмент кода (E=l, S^l) запись невозможна, лимит указывает на его последний байт, а биты поля Type имеют следующее назначение:Бит 2 — С (Conforming) — подчиненность: при С=1 код может исполняться, если текущий уровень привилегий (CPL) не ниже уровня привилегий дескрип­тора (DPL); при 00 (неподчиненный сегмент) управление к данному сегменту может передаваться, только если CPL=DPL.

Бит 1 — R (Readable) — разрешение (R=l) или запрет (R=0) чтения сег­мента.

Запись в сегмент кода возможна только через псевдоним (Alias) — сегмент данных с разрешенной записью, имеющий те же значения базы и лимита.

Бит D (Default Operation Size) в предпоследнем байте определяет разряд­ность адресов и операндов по умолчанию: D-0 — 16 бит, D=l — 32 бит.

Загрузка...