ФЭНДОМ


Сегментные дескрипторы - дескрипторы, описывающие сегменты. Существует три основных типа сегмента:

  • Сегмент кода.
  • Сегмент данных.
  • Сегмент задачи.

Все дескрипторы имеют размер 8 байт и представляются следующим рисунком:

Файл:X86.seg.descriptors.png

Base G D/B L AVL Limit P DPL S Type Base
Base Limit

В дескрипторе определены следующие поля:

  • Base - база сегмента. 32-битный линейный адрес в памяти, с которого начинается сегмент.
  • Limit - 20-битный лимит сегмента. Максимально допустимое смещение при адресации с использованием этого сегмента.
  • G - бит гранулярности (Granularity) - указывает, в чём измеряется лимит (0 - в байтах, 1 - в страницах по 4 килобайта).
  • D/B - флаг, указывающий разрядность сегмента: 0 – сегмент 16-разрядный, 1 – сегмент 32 разрядный (этот флаг ещё называют BIG).
  • L - флаг, который ранее был зарезервирован, теперь служит признаком 64-разрядности сегмента. Если он установлен, флаг D/B должен быть сброшен.
  • AVL - неиспользуемый бит. Может использоваться по усмотрению ОС.
  • P - признак присутствия сегмента в памяти (сегмент может быть выгружен менеджером виртуальной памяти).
  • DPL - привилегии дескриптора (0 = самые высокие, 3 = самые низкие).
  • S - указывает, является ли дескриптор системным (1 = дескриптор не системный).
  • Segment type - тип сегмента. При S = 0 указывает тип системного сегмента, при S = 1 назначение этого поля поясняется ниже.

Дескриптор сегмента кода Править

При описании сегмента кода бит S = 1, а поле Segment type имеет вид

1 C R A
  • Бит C (conforming) определяет, является ли сегмент конформным (1 для конформных, 0 для неконформных);
  • Бит R (readable) определяет, доступен ли сегмент для чтения. При R = 1 сегмент доступен для чтения и исполнения, при R = 0 - только для исполнения. Запись в сегмент кода запрещена всегда;
  • Бит A (accessed) устанавливается в единицу при загрузке процессором соответствующего селектора в сегментный регистр. Остается установленным до тех пор, пока не будет явно сброшен операционной системой.

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

При описании сегмента данных или стэка бит S = 1, а поле Segment type имеет вид

0 E W A
  • Бит E (expansion direction) определяет направление роста сегмента - 0 для растущих вверх и 1 для растущих вниз (как стэк). Если E = 1, меняется смысл поля Limit, - разрешены обращения к сегменту по смещениям от Limit+1 до 0xFF..F (количество разрядов определяется битами D/B и L);
  • Бит W (writable) разрешает запись в данный сегмент. Если W = 0, разрешено только чтение, если W = 1, разрешены и чтение, и запись. Исполнение данных запрещено всегда. Сегмент стэка всегда должен быть доступен для записи;
  • Бит A (accessed) имеет то же назначение, что и для дескрипторов сегмента кода, - показывает, было ли обращение к дескриптору с момента последнего сброса этого флага.

Дескриптор сегмента задачи Править

Внимание! Это незаконченная статья. Вы можете помочь доработать статью и наполнить ее материалом.

Для улучшения статьи необходимо: Даже не знаю, что с этим делать.