
- •9.5. Суперскалярная обработка команд
- •9.5.1. Внеочередное завершение команд
- •9.5.2. Завершение выполнения
- •9.5.3. Операция диспетчеризации
- •9.6 Семейство процессоров Intel ia-32
- •9.6.1. Сегментация памяти для семейства процессоров ia-32
- •9.6.2. 16-Разрядный режим
- •9.6.3. Процессоры 80386 и 80486
- •9.6.4. Процессор Pentium
- •9.6.5. Процессор Pentium Pro
- •9.6.6. Процессоры Pentium II и Pentium III
- •9.6.7. Процессор Pentium 4
- •9.6.8. Технология Hyper-Threading от Intel Производительности всегда мало
- •Hyper-Threading
- •Углубляемся в технологию
- •Максимум эффективности от Hyper-Threading
- •9.6.9. Архитектура ia-64
- •Описание ia-64
- •Архитектура е2к
9.6.1. Сегментация памяти для семейства процессоров ia-32
В разделе 5.1 кратко рассказывалось об использовании сегментных регистров в архитектуре IA-32 для формирования адресов памяти (см. рис. 5.1). Мы продолжим развивать эту тему. Для начала читателю полезно будет узнать, как сегментные регистры использовались в процессоре 8086. Более современные процессоры IA-32 способны функционировать в так называемом реальном режиме, где они могут выполнять машинный программный код процессора 8086.
Реальный режим
Реальный режим процессоров IA-32 — это режим генерирования адресов, используемый процессором 8086. В нем память рассматривается как последовательность сегментов объемом по 64 Кбайт. Для каждого сегмента 16-разрядные исполнительные адреса формируются с использованием режимов адресации процессора 8086. Для доступа к сегментам кода, стека и двум сегментам данных в этом процессоре применяются сегментные регистры CS, SS, DS и ES. В процессор 80386 были включены еще два сегментных регистра — FS и GS.
На рис. 9.6.1 представлен процесс генерирования 20-разрядных внешних адресов памяти. Заданное в сегментном регистре 16-разрядное значение сдвигается на четыре позиции влево, вследствие чего получается 20-разрядный адрес памяти, представляющий собой начальный адрес сегмента. Для получения 2-разрядного исполнительного адреса к начальному адресу сегмента добавляется сгенерированный процессором 16-разрядный исполнительный адрес, обозначенный на рисунке как смещение.
Чтобы локализовать в памяти сегмент, в сегментный регистр помещаются 16 старших разрядов 20-разрядного адреса начала этого сегмента. В адресном пространстве, занимающем 1 Мбайт и покрываемом 20-разрядными адресами, может располагаться 16 неперекрывающихся сегментов объемом 64 Кбайт. Однако сегменты могут и перекрываться. Это удобно при организации совместного доступа к командам и данным разными программами. Сегменты CS и SS используются в тех случаях, когда в программе имеются ссылки на команды или стек. Для хранения данных по умолчанию выделяется сегментный регистр DS. Если же для доступа к данным команды должен применяться регистр ES, в начало этой команды добавляется соответствующий код.
Рис. 9.6.1. Формирование адреса памяти в процессоре 8086
Защищенный режим
Процессоры архитектуры IA-32 обычно работают в защищенном режиме. На рис. 9.6.2 показано, как в этом режиме генерируется физический адрес памяти на основе содержимого базового и индексного регистров, а также содержащегося в команде значения смещения. Для получения 32-разрядного исполнительного адреса значение индексного регистра умножается на коэффициент масштабирования, равный 1, 2, 4 или 8, затем результат прибавляется к содержимому базового регистра с учетом заданного в команде смещения. Четырнадцать старших битов одного из шести сегментных регистров определяют дескриптор, используемый в качестве индекса в таблице дескрипторов сегментов, из которой извлекается 32-разрядный базовый адрес. Этот адрес прибавляется к исполнительному адресу внутри сегмента, вследствие чего получается 32-разрядный линейный адрес. Страничный блок, используя таблицу страниц, транслирует линейный адрес в 32-разрядный физический адрес.
Рис. 9.6.2. Формирование адреса в архитектуре IA-32
Таблицы страниц и дескрипторов сегментов довольно велики, поэтому они хранятся в основной памяти. Для обеспечения быстрой трансляции адресов может использоваться буфер быстрого преобразования адресов TLB. В таблицах дескрипторов сегментов содержатся поля прав доступа, а также поля границ сегментов, определяющие их максимальный размер. Этими параметрами управляет операционная система. Они нужны для защиты как операционной системы, так и прикладных программ, находящихся в основной памяти. Отсюда и название данного режима работы процессора — «защищенный»
Сегменты и страницы используются для организации памяти одним из следующих способов:
в виде плоского адресного пространства, в котором исполнительный адрес играет роль физического;
в виде одного или нескольких сегментов переменой длины (без разбиения на страницы);
в виде 32-разрядного пространства памяти, разделенного на страницы объемом 4 Кбайт;
в виде структуры, состоящей из сегментов и страниц.