Что такое регистры дескрипторов? - PullRequest
0 голосов
/ 25 сентября 2018

Я знаю, что такое сегментные регистры.Они содержат селектор сегмента (индекс в таблице дескрипторов + уровень привилегий + локальная или глобальная таблица) и, по-видимому, скрытую часть, которая также известна как «кэш дескриптора».Я также понимаю, что такое глобальные и локальные таблицы дескрипторов и, конечно, сами дескрипторы.Однако в руководстве для разработчиков программного обеспечения для архитектуры Intel 64 и IA-32 упоминается регистр дескриптора на стр. 95, том 3A (глава 3.4.4: Инструкции по загрузке сегмента в режиме IA-32e), и это первый раз, когда яслышал о них.

Процессор проверяет, что все ссылки на линейные адреса находятся в канонической форме, а не выполняет проверку пределов.Переключение режимов не изменяет содержимое регистров сегмента или связанных регистров дескриптора .Эти регистры также не изменяются во время выполнения в 64-битном режиме, если не выполняются явные загрузки сегментов.

Кто-нибудь из вас может объяснить, что такое регистр дескриптора?SS, ES, DS, CS, Es, FS и GS являются сегментными регистрами, и каждая запись в Глобальной и Локальной таблицах дескрипторов называется дескрипторами.Тогда что такое регистры дескрипторов?

Я провел некоторое исследование вокруг Google, но, похоже, ничего не отвечает на мой вопрос.

Ответы [ 2 ]

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

Регистры дескрипторов чаще называют кешем дескрипторов.Вместо чтения соответствующего дескриптора из глобальных или локальных таблиц дескрипторов (GDT / LDT) в памяти каждый раз, когда регистр сегмента используется в операнде памяти, дескрипторы считываются из GDT / LDT только при загрузке регистра сегмента.(Обратите внимание, что все операнды памяти используют регистр сегмента, неявно или явно, поэтому, если бы он не работал таким образом, процессор будет намного, намного медленнее.)

Побочным эффектом этого является то, что возможнокэши дескрипторов не должны синхронизироваться с текущими значениями селекторов, загруженными в регистры сегментов.Например, если инструкция LGDT используется для изменения адреса GDT, кэш дескриптора не обновляется и все еще содержит значения дескриптора из старого GDT.

То же самое происходит при переключении режимов, например, из реальногоиз режима в защищенный режим или из защищенного режима в длительный режим (то, что Intel называет режимом IA-32e).После перехода из реального режима в защищенный режим кэш дескриптора все еще имеет старые основы реального режима, ограничения и права доступа.Это важно, потому что регистры сегментов также все еще содержат значения реального режима, которые вряд ли будут действительны в защищенном режиме.В частности, он позволяет получить следующую инструкцию в CS: EIP, даже если CS содержит недопустимый селектор.Кэш дескриптора CS по-прежнему содержит действительные значения, указывающие на то же место, что и до изменения режима.

Переход из защищенного режима в длинный режим работает аналогично, за исключением того, что большинство значений в кэше дескрипторов игнорируются в длинном режиме.Вместо этого фиксированное основание 0 используется для всех сегментов, кроме FS и GS, и проверки пределов не выполняются.Это означает, что код, который переключается в длинный режим, должен использовать сегмент кода с базой 0, чтобы эффективная база CS не изменилась.

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

База / лимит и другие вещи постоянны до следующего mov ds, whatever, что позволяет такие вещи, как Нереальный режим https://wiki.osdev.org/Unreal_Mode, где вы переключаетесь обратно в реальный режим с лимитом> 64k, и обычно base = 0.(квартира 4G).

Intel описывает кэши дескрипторов сегментов как регистр.Это просто вопрос терминологии.

На самом деле регистр - лучший способ думать об этом, потому что «кеш» подразумевает, что позволить ему не синхронизироваться с тем, что он кеширует (запись GDT или LDT), плохо.

Обычная терминология - это «кэш дескрипторов», но это не когерентный кеш, и он предназначен только для изменения записи в регистр сегмента, а не в память в GDT.(И не обновляется, чтобы отразить изменения в интерпретации регистров сегментов, такие как реальный режим и защищенный.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...