Русская Википедия:GDT
GDT (Шаблон:Lang-en, глобальная таблица дескрипторов) — служебная структура данных в архитектуре x86, определяющая глобальные (общие для всех задач) сегменты. Её расположение в физической памяти и размер определяются системным регистром GDTR.
Дескрипторы LDT и сегментов задач (TSS) могут находиться только здесь.
Особенностью GDT является то, что у неё запрещён доступ к первому (то есть нулевому) дескриптору. Обращение к нему вызывает исключение #GP, что предотвращает обращение к памяти с использованием незагруженного сегментного регистра.
GDTR
GDTR (Шаблон:Lang-en — регистр глобальной дескрипторной таблицы) — специальный 48-битный регистр, который описывает местоположение и размер таблицы, содержащей дескрипторы. Он появился вместе с механизмом защиты в 80286 моделях процессоров как сегментный механизм защиты.
Регистр содержит два поля: первое поле — первые 32 бита, описывают линейный адрес, по которому должна быть расположена дескрипторная таблица, а последние 16 бит — лимит, определяющий размер таблицы в байтах. Каждый дескриптор занимает в памяти 8 байт. Поэтому лимит всегда должен вычисляться так: limit = 8*n — 1, где n — количество дескрипторов.
При инициализации операционной системы глобальная дескрипторная таблица обычно создаётся на полное количество дескрипторов (limit = 65535), или 8192 дескрипторов. Затем виртуальный адрес начала таблицы загружается в регистр GDTR специальной ассемблерной инструкцией LGDT (Шаблон:Lang-en):
mov ax, GDT_Limit
push ax
mov eax, GDT_Base
push eax
mov bp, sp
lgdt qword [ss:bp] ; стек растёт ''вниз''!
После включения механизма защиты начинает действовать селекторная система адресации, вместо сегментной, и использоваться GDT.
См. также
Ссылки
- Шаблон:Cite web Шаблон:Уточнить
- Ассемблер для 32-разрядных процессоров: от i386 до Pentium 4
- GDT Table at OSDev.org
- GDT Tutorial at OSDev.org
Шаблон:Comp-stub Шаблон:Перевести