Размер регистров сегмента Intel x86 и регистра GDT (LDT)

Я начинающий студент в области системной архитектуры, а именно Intel x86. В настоящее время я читаю руководство Intel (1,3a, 3b, 3c) и застрял в части сегментации.

Насколько мне известно, в защищенном режиме система переводит логическую память в линейную память (или физическую память), а «дальний указатель» указывает фактический линейный (или физический) адрес памяти с двумя разными частями, сегментом селектор и смещение.

Как я узнал из университета, каждый сегментный регистр имеет 16-битную часть данных. Согласно руководству Intel, 16-битная часть - это только видимая часть сегментного регистра, но есть более скрытая часть сегментного регистра, которая не может быть запрограммирована или доступна пользователю. Могу ли я узнать реальный размер сегментного регистра?

Второй вопрос касается регистра LDT, GDT, IDT для защищенного режима. Являются ли эти регистры (LDTr, GDTr, IDTr) реальным регистром в наборе микросхем процессора? Если это так, есть ли шанс получить доступ к этой таблице после загрузки (предварительное кольцо 3, пользовательский режим)?

Спасибо, что прочитали мой вопрос.

PS. Я попытался погуглить, но не нашел ответа. Вот почему я трачу время на то, чтобы написать этот вопрос.


person Henrik    schedule 15.01.2014    source источник


Ответы (2)


Сегментные регистры 16-битные. Сегментные дескрипторы, на которые ссылаются сегментные регистры, больше. Заблуждение заключается в том, что все процессоры i386 и более поздних версий имеют небольшой некогерентный кеш дескрипторов сегментов, соответствующих регистрам сегментов (один кешированный дескриптор для каждого регистра сегмента), который иногда называют скрытой частью сегментного регистра. На самом деле это не часть регистра, хотя каждая запись в кэше тесно связана с определенным сегментным регистром. Кэш жестко привязан к регистрам сегмента, так как всякий раз, когда производится запись в регистр сегмента, соответствующий элемент кеша обновляется (повторно считывается из памяти), а инструкции, которые используют регистр сегмента, используют кэшированный дескриптор, соответствующий этому регистру, а не чем чтение дескриптора из памяти.

person Chris Dodd    schedule 15.01.2014
comment
Спасибо! Ваш ответ был замечательно сформулирован, что я именно хотел знать! Большое спасибо! - person Henrik; 15.01.2014

Сегментные регистры x86 все 16-разрядные. Я не знаю ни одной "скрытой" части регистра сегмента. Если вы не смогли найти что-либо об этом с помощью поиска в Google, я сомневаюсь, что он существует.

Хорошее описание локальной таблицы дескрипторов (LDT), глобальной таблицы дескрипторов (GDT) и таблицы дескрипторов прерываний (IDT) можно найти в Википедии: http://en.wikipedia.org/wiki/Intel_8086.

person STLDev    schedule 15.01.2014