Есть ли несколько LDT? - PullRequest
       93

Есть ли несколько LDT?

0 голосов
/ 04 сентября 2018

На следующей странице Wikibooks указано:

GDT содержит указатели на каждый LDT.

В настоящее время я изучаю сегментацию, и это означает, что существует несколько LDT. Насколько я могу судить, есть только одна: несколько ссылок, которые я прочитал, относятся к "LDT", подразумевая, что есть только одна. Является ли ссылка на страницу правильной по своему смыслу? Означает ли это «запись LDT»?

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

В то время как инструкция lgdt - используемая для настройки GDT - принимает m16&32/64 в качестве операнда - инструкция lldt принимает операнд r/m16.

Расшифровка жаргона означает, что lgdt получает указатель на структуру, содержащую размер GDT и базовый адрес. С другой стороны, lldt возьмите селектор сегмента - этот селектор сегмента должен иметь поле TI (индикатор таблицы), установленное от 0 до , в GDT.
Короче говоря, LDT настроен не с базовым адресом и размером, подобным GDT, а с дескриптором сегмента в GDT - так что это зависит от GDT.

Тип сегмента, выбранного селектором сегмента, заданного для lldt, должен иметь тип LDT (десятичное значение 2).

Если какое-либо из вышеперечисленных условий не выполняется, поднимается #GP.


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

Однако ОС редко полностью меняет GDT и обычно предварительно заполняет его всеми необходимыми дескрипторами сегментов, включая все необходимые LDT с.
В любом случае, GDT может содержать несколько дескрипторов сегмента LDT, но только один активен в любой момент времени для каждого аппаратного потока.

0 голосов
/ 05 сентября 2018

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

...