stringtranslate.com

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

При адресации памяти для компьютерных архитектур Intel x86 дескрипторы сегментов являются частью блока сегментации, используемого для преобразования логического адреса в линейный адрес. Дескрипторы сегментов описывают сегмент памяти , указанный в логическом адресе. [1] Дескриптор сегмента (длиной 8 байт в версии 80286 и более поздних версиях) содержит следующие поля: [2]

  1. Базовый адрес сегмента
  2. Предел сегмента, определяющий размер сегмента.
  3. Байт прав доступа, содержащий информацию о механизме защиты.
  4. Биты управления

Состав

Дескриптор сегмента x86 и x86-64 имеет следующий вид: [3]

Где означают поля:

Базовый адрес
Начальный адрес памяти сегмента. Его длина составляет 32 бита, и он создается из битов нижней части с 16 по 31 и битов верхней части с 0 по 7, за которыми следуют биты с 24 по 31.
Ограничение сегмента
Его длина составляет 20 бит, и он состоит из битов младшей части от 0 до 15 и битов старшей части от 16 до 19. Он определяет адрес последних доступных данных. Длина на единицу больше значения, хранящегося здесь. Как именно это следует интерпретировать, зависит от бита детализации дескриптора сегмента.
G=Детализация
Если этот флажок снят, ограничение выражается в байтах, максимум 2–20 байт . Если установлено, ограничение выражается в страницах по 4096 байт, максимум 2 32 байта.
Д/Б
D = Размер операнда по умолчанию: Если флажок снят, это 16-битный сегмент кода; если установлено, это 32-битный сегмент.
B = Большой: Если установлено, максимальный размер смещения для сегмента данных увеличивается до 32-битного 0xffffffff. В противном случае это 16-битный максимум 0x0000ffff. По сути то же значение, что и «D».
L=длинный
Если установлено, это 64-битный сегмент (и D должен быть нулевым), и код в этом сегменте использует 64-битную кодировку инструкций. «L» не может быть установлен одновременно с «D», также известным как «B». (Бит 21 на изображении)
АВЛ=Доступно
Для программного использования, не используемого аппаратным обеспечением (бит 20 на изображении с меткой A)
P=Присутствует
Если этот параметр отключен, при любой ссылке на этот сегмент генерируется исключение «сегмент отсутствует».
DPL = уровень привилегий дескриптора
Уровень привилегий (кольцо), необходимый для доступа к этому дескриптору
S=Системный сегмент
Если флажок установлен, это системный сегмент, если 1, это сегмент кода/данных.
Тип
Если бит 11 установлен, это дескриптор сегмента кода. Если флажок снят, это дескриптор сегмента данных/стека, в котором «D» заменено на «B», «C» заменено на «E» и «R» заменено на «W». Фактически это особый случай поля 2-битного типа, где предыдущий бит 12, очищенный как «0», относится к большему количеству внутренних системных дескрипторов, для LDT, LSS и вентилей.
C=соответствует
Код в этом сегменте может вызываться с менее привилегированных уровней.
E=Развернуть-Вниз
Если флажок установлен, сегмент расширяется от базового адреса до базового+лимита. Если установлено, оно расширяется от максимального смещения до предельного, такое поведение обычно используется для стеков.
R = читаемый
Если этот параметр отключен, сегмент может быть выполнен, но не прочитан.
W = возможность записи
Если этот параметр отключен, сегмент данных можно читать, но нельзя записывать.
A = Доступ
Этот бит устанавливается в 1 аппаратно при доступе к сегменту и очищается программно.

Смотрите также

Рекомендации

  1. ^ Бовет, Д.П., и Чезати, М. (2000). Понимание ядра Linux (первое издание) . О'Рейли энд Ассошиэйтс, Инк.
  2. ^ Табак, Дэниел (1995). Усовершенствованные микропроцессоры . Издательство Макгроу Хилл. п. 149. ИСБН 9780070628434.
  3. ^ Руководство программиста по архитектуре AMD64, том 2: Системное программирование (PDF) (технический отчет). 2013. с. 80. Архивировано из оригинала (PDF) 18 февраля 2018 г.

дальнейшее чтение

Внешние ссылки