GDTR

GDT (англ. Global Descriptor Table, глобальная таблица дескрипторов) — служебная структура данных в архитектуре x86, определяющая глобальные (общие для всех задач) сегменты. Её расположение в физической памяти и размер определяются системным регистром GDTR.

Дескрипторы LDT и сегментов задач (TSS) могут находиться только здесь.

Особенностью GDT является то, что у неё запрещён доступ к первому (то есть нулевому) дескриптору. Обращение к нему вызывает исключение #GP, что предотвращает обращение к памяти с использованием незагруженного сегментного регистра.

GDTR

GDTR (англ. Global Descriptor Table Register — регистр глобальной дескрипторной таблицы) — специальный 48-битный регистр, который описывает местоположение и размер таблицы, содержащей дескрипторы. Он появился вместе с механизмом защиты в 80286 моделях процессоров как сегментный механизм защиты.

Регистр содержит два поля: первое поле — первые 32 бита, описывают линейный адрес, по которому должна быть расположена дескрипторная таблица, а последние 16 бит — лимит, определяющий размер таблицы в байтах. Каждый дескриптор занимает в памяти по 8 байт, потому лимит всегда должен вычисляться так: limit = 8*n — 1, где n — количество дескрипторов.

При инициализации операционной системы глобальная дескрипторная таблица обычно создаётся на полное количество дескрипторов (limit = 65535), или 8192 дескрипторов. Затем вычисляется физический адрес начала таблицы, и загружается регистр GDTR специальной ассемблерной инструкцией LGDT (англ. Load GDT):

Mov AX, GDT_Limit
Push AX
Mov EAX, GDT_Base
Push EAX
Mov BP, SP
LGDT qword [SS:BP] ;  стек растёт ''вниз''!

После включения механизма защиты начинает действовать селекторная система адресации, вместо сегментной, и использоваться GDT.

См. также

Ссылки

  • Intel® 64 and IA-32 Architectures Software Developer's Manuals  (англ.). — Справочное руководство по процессору Intel. Проверено 31 октября 2008. [уточнить]
  • Ассемблер для 32-разрядных процессоров: от i386 до Pentium 4
  • GDT Table at OSDev.org
  • GDT Tutorial at OSDev.org


GDTR.

© 2021–2023 sud-mal.ru, Россия, Барнаул, ул. Денисова 68, +7 (3852) 74-95-52