Какой теоретический пример использования GDT? - PullRequest
0 голосов
/ 28 апреля 2019

Я следую за прохождением GDT .Я могу понять, как реализована структура данных и какова ее цель.

Однако я не понимаю, как используется GDT.В каком сценарии ЦП необходимо загрузить сегмент, и как это делает GDT?Если GDT участвует в управляемом клавиатурой прерывании, это было бы хорошим примером для объяснения.

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Для современной ОС, которая не использует сегментацию (сильно); вы, вероятно, обнаружите, что GDT содержит:

  • 2 или 3 дескриптора для кода «CPL = 0» и «CPL = 3» (если 64-разрядная ОС поддерживает более старые 32-разрядные процессы, то, вероятно, она будет иметь «32-разрядный код CPL = 3» и «64» CPL = 3-битный код ", в дополнение к" 64-битному CPL = 0 код ")
  • дескриптор стека "CPL = 0"
  • дескриптор стека "CPL = 3" и данных
  • дескриптор на процессор для TSS (сегмент состояния задачи)
  • для 32-битных (не так много для 64-битных, где вы можете использовать swapgs) один или два дескриптора на процессор, которые используются для поиска данных «CPU local» и / или «local local» данных потока
  • (опционально, менее вероятно); дескриптор, который определяет шлюз вызова для API ядра
  • (опционально, для специальных целей); один или несколько дескрипторов, которые описывают LDT (иногда используется для эмуляции)

Для других операционных систем GDT может содержать что угодно.

0 голосов
/ 08 мая 2019

GDT или таблица глобальных дескрипторов содержит информацию о сегментах памяти. Адрес GDT хранится в одном из специальных регистров, называемых GDTR. Каждый сегмент отображается в область памяти. Целью сегмента является обеспечение аппаратной защиты памяти. Процессор на самом деле не загружает весь сегмент, так как сегмент обычно относится к области памяти. Скорее, когда вы используете один из регистров сегмента (CS, DS, SS и т. Д.) Со смещением для адресации области памяти, CPU выполнит проверку с информацией, хранящейся в GDT. Например, если вы установили один из сегментов только для чтения, то позже вы попытаетесь записать в него, процессор заблокирует доступ. Для системы, использующей сегмент, GDT задействуется каждый раз, когда кто-то обращается к памяти.

Современная ОС редко использует сегмент. Большинство из них устанавливают «Модель плоской памяти», каждый сегмент которой занимает всю область памяти. Пейджинг и виртуальная память используются для защиты памяти. Сегмент существует в основном из-за обратной совместимости. Вы можете прочитать больше о GDT на osdev

...