Дескриптор сегмента

Опубликовано: 18 Сентября, 2022

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

Дескриптор сегмента — это специальная структура, описывающая сегмент. Для каждого сегмента памяти должен быть определен ровно один дескриптор сегмента. Дескрипторы — это восемь типов величин, содержащих атрибуты данной области линейного адресного пространства. Эти атрибуты включают 32-битный базовый линейный адрес сегмента, 20-битную длину и степень детализации сегмента, уровень защиты, права на чтение, запись или выполнение, размер операндов по умолчанию (16-битный или 32-битный). бит) и тип сегмента.

Общий формат дескриптора:

  • BASE: содержит 32-битный базовый адрес сегмента. Таким образом определяем расположение сегмента в пределах 4 гигабайт
    ((2 32 -1)-бит) линейное адресное пространство.
  • LIMIT: определяет размер сегмента. x86 объединяет два фрагмента поля limit, чтобы сформировать 20-битное значение. Сервер x86 интерпретирует это 20-битное значение двумя способами, в зависимости от настройки бита детализации (G).
  • Бит детализации: указывает единицу измерения, с которой интерпретируется поле лимита. Если бит G равен 0, предел интерпретируется в единице из одного байта, в противном случае предел интерпретируется в единице из 4 КБ.
  • O (зарезервировано Intel): пользователь не может ни определить, ни использовать его. Этот бит должен быть равен нулю для совместимости с будущими процессорами.
  • U/AVL (пользовательский бит): этот бит полностью не определен, и x86 его игнорирует. Это доступное поле/бит для пользователя или операционной системы.
  • P (Бит присутствия): текущий бит P равен 1, если сегмент загружен в физическую память, если P = 0, то любая попытка доступа к этому сегменту вызывает исключение отсутствия.
  • DPL (уровень привилегий дескриптора): это 2-битное поле уровня привилегий, связанного с пространством памяти, которое определяет дескриптор: DPL0 является наиболее привилегированным, а DPL3 — наименее привилегированным.
  • S (системный бит): бит сегмента S в дескрипторе сегмента определяет, является ли данный сегмент системным сегментом, кодом или сегментом данных. Если бит S равен 1, то сегмент является сегментом кода или данных, если он равен 0, то сегмент является системным сегментом.
  • Тип: указывает конкретный дескриптор среди различных видов дескрипторов.
  • A (Бит доступа): x86 автоматически устанавливает этот бит, когда селектор для дескриптора загружается в сегментный регистр. Это означает, что x86 устанавливает бит доступа всякий раз, когда обращение к памяти выполняется путем доступа к сегменту.