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

редактировать

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

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

Содержание

  • 1 Структура
  • 2 См. также
  • 3 Ссылки
  • 4 Дополнительная литература
  • 5 Внешние ссылки

Структура

Дескриптор сегмента x86 и x86-64 имеет следующую форму:

31242322212019161514131211109870
Базовый адрес [31:24]GD / BLAVLПредел сегмента [19:16]PDPL1ТипC / ER / WAБазовый адрес [23:16]
Базовый адрес [15: 0]Предел сегмента [15: 0]

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

Базовый адрес
32-битный начальный адрес памяти сегмента
Предел сегмента
20 битовая длина сегмента. (В частности, адрес последних доступных данных, поэтому длина на единицу больше, чем значение, хранящееся здесь.) Как именно это следует интерпретировать, зависит от других битов дескриптора сегмента.
G = Гранулярность
Если снят, ограничение выражается в байтах, но не более 2 байтов. Если установлено, ограничение выражается в 4096-байтовых страницах, максимум 2 байта.
D = Размер операнда по умолчанию
Если этот параметр не установлен, это 16-битный сегмент кода; если установлено, это 32-битный сегмент.
B = Big
Если установлено, максимальный размер смещения для сегмента данных увеличивается до 32-битного 0xffffffff. В противном случае это 16-битный максимум 0x0000ffff. По сути, то же значение, что и "D".
L = Long
Если установлено, это 64-битный сегмент (и D должен быть нулевым), и код в этом сегменте использует 64 -битовая кодировка инструкций. «L» не может быть установлено одновременно с «D» или «B».
AVL = доступно
Для использования программного обеспечения, не используется оборудованием
P = Присутствует
Если сброшено, исключение «сегмент отсутствует» генерируется при любой ссылке на этот сегмент.
DPL = Уровень привилегий дескриптора
Уровень привилегий (кольцо), необходимый для доступа этот дескриптор
Тип
Если установлен, это дескриптор сегмента кода. Если он не установлен, это дескриптор сегмента данных / стека, в котором «D» заменено на «B», «C» заменено на «E», а «R» заменено на «W». Фактически это частный случай 2-битного поля типа, где предыдущий бит 12, очищенный как "0", относится к дополнительным внутренним дескрипторам системы, для LDT, LSS и вентилей.
C = Соответствие
Код в этом сегменте может быть вызван с менее привилегированных уровней.
E = Expand-Down
Если этот параметр отключен, сегмент расширяется от базового адреса до базового + предела. Если установлено, он расширяется от максимального смещения до предела, поведение, обычно используемое для стеков.
R = Readable
Если этот параметр не установлен, сегмент может выполняться, но не считываться из.
W=Writable
Если сброшен, сегмент данных может быть прочитан, но не записан.
A = Доступен
Этот бит аппаратно устанавливается в 1, когда доступ к сегменту и его очистка выполняется программным обеспечением.

См. также

Ссылки

Дополнительная литература

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

.

Последняя правка сделана 2021-06-07 08:54:39
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте