ФЭНДОМ


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

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

Все дескрипторы имеют размер 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) имеет то же назначение, что и для дескрипторов сегмента кода, - показывает, было ли обращение к дескриптору с момента последнего сброса этого флага.

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

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

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

Обнаружено использование расширения AdBlock.


Викия — это свободный ресурс, который существует и развивается за счёт рекламы. Для блокирующих рекламу пользователей мы предоставляем модифицированную версию сайта.

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