В адресации памяти для архитектур компьютеров Intel x86 дескрипторы сегментов являются частью блока сегментации, используемого для перевода логического адреса в линейный адрес. Дескрипторы сегментов описывают сегмент памяти, указанный в логическом адресе. [1]
Дескриптор сегмента (длиной 8 байт в 80286 и более поздних версиях) содержит следующие поля: [2]
- Базовый адрес сегмента
- Предел сегмента, который определяет размер сегмента
- Байт прав доступа, содержащий информацию о механизме защиты
- Контрольные биты
Структура
Дескриптор сегмента 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".
- Д=длинный
- Если установлено, это 64-битный сегмент (и D должен быть равен нулю), и код в этом сегменте использует 64-битную кодировку инструкций. «L» не может быть установлено одновременно с «D», то есть «B». (Бит 21 на изображении)
- AVL=Доступно
- Для программного использования, не используется аппаратно (бит 20 на изображении с меткой A)
- P=Присутствует
- Если этот параметр очищен, при любой ссылке на этот сегмент генерируется исключение «сегмент отсутствует».
- DPL=Уровень привилегий дескриптора
- Уровень привилегий (кольцо), необходимый для доступа к этому дескриптору
- S=Системный сегмент
- Если очищено, это системный сегмент, если 1, это сегмент кода/данных.
- Тип
- Если бит 11 установлен, это дескриптор сегмента кода. Если очищен, это дескриптор сегмента данных/стека, в котором "D" заменено на "B", "C" заменено на "E" и "R" заменено на "W". Это фактически особый случай поля типа 2 бита, где предыдущий бит 12, очищенный как "0", относится к более внутренним системным дескрипторам для LDT, LSS и вентилей.
- C=Соответствует
- Код в этом сегменте может быть вызван с менее привилегированных уровней.
- E=Расширить вниз
- Если сброшен, сегмент расширяется от базового адреса до base+limit. Если установлен, он расширяется от максимального смещения вниз до limit, поведение, которое обычно используется для стеков.
- R=Читаемый
- Если флаг очищен, сегмент может быть выполнен, но не может быть прочитан.
- W=доступно для записи
- Если флаг очищен, сегмент данных можно читать, но нельзя записывать.
- A=Доступно
- Этот бит устанавливается в 1 аппаратно при доступе к сегменту и очищается программно.
Смотрите также
Ссылки
- ^ Bovet, DP, & Cesati, M. (2000). Понимание ядра Linux (первое издание) . O'Reilly & Associates, Inc.
- ^ Табак, Дэниел (1995). Современные микропроцессоры . Mcgraw Hill Publishers. стр. 149. ISBN 9780070628434.
- ^ Руководство программиста по архитектуре AMD64, том 2: системное программирование (PDF) (технический отчет). 2013. стр. 80. Архивировано из оригинала (PDF) 18.02.2018.
- Табак, Дэниел (1991). Современные микропроцессоры . McGraw Hill and Co. ISBN 9780070628076.
- Холл, Дуглас. Микропроцессоры и интерфейсы . McGraw Hill Publications.
Дальнейшее чтение
- Роберт Р. Коллинз (август 1998 г.). «Кэш дескриптора сегмента». Журнал доктора Добба .
Внешние ссылки
- Справочник программиста Intel 80386 - Трансляция сегмента