Размеры сегментов Intel x86 и регистра GDT(LDT)
Я начинающий студент, изучающий архитектуру системы, а именно Intel x86. В настоящее время я читаю руководство Intel (1,3a,3b,3c) и застрял в части сегментации.
Насколько я знаю, в защищенном режиме система переводит логическую память в линейную память (или физическую память), а "дальний указатель" указывает фактический линейный (или физический) адрес памяти с двумя различными частями, сегментом селектор и смещение.
Как я узнал из университета, каждый сегментный регистр имеет 16-битную часть данных. Согласно руководству Intel, 16-битная является только видимой частью сегментного регистра, но есть более скрытая часть сегментного регистра, которая не может программироваться или получить доступ от пользователя. Есть ли шанс, что я смог узнать фактический размер сегмента регистра?
Второй вопрос касается регистра LDT, GDT, IDT для режима защиты. Являются ли эти регистры (LDTr,GDTr,IDTr) фактическим регистром в чипсете процессора? Если это так, есть ли шанс получить доступ к этим таблицам после последовательности загрузки (предварительное кольцо 3, режим пользователя)?
Спасибо, что прочитали мой вопрос.
PS. Я пытался гуглить, и я не мог найти ответ. Вот почему я трачу свое время, чтобы написать этот вопрос.
2 ответа
Сегментные регистры 16 бит. Дескрипторы сегмента, на которые ссылаются регистры сегмента, больше. Смущает то, что все процессоры i386 и более поздние имеют небольшой некогерентный кэш дескрипторов сегментов, которые соответствуют регистрам сегментов (один кэшированный дескриптор для каждого регистра сегмента), который иногда называют скрытой частью регистра сегмента. На самом деле это не часть регистра, хотя каждая запись в кэше тесно связана с конкретным сегментным регистром. Кэш тесно связан с регистрами сегментов, так как всякий раз, когда в регистр сегмента записывается, соответствующий элемент кэша обновляется (перечитывается из памяти), а инструкции, которые используют регистр сегмента, скорее используют кэшированный дескриптор, соответствующий этому регистру. чем чтение дескриптора из памяти.
Регистры сегмента x86 все 16-битные. Я не знаю ни о какой "скрытой" части регистров сегмента. Если вы не смогли найти что-либо по этому вопросу с помощью поиска в Google, я сомневаюсь, что это существует.
Для хорошего описания Локальной таблицы дескрипторов (LDT), Глобальной таблицы дескрипторов (GDT) и Таблицы дескрипторов прерываний (IDT), есть хорошее описание в Википедии: http://en.wikipedia.org/wiki/Intel_8086.