Семейство процессоров Intel IA-32
Семейство процессоров Intel IA-32
Развитие вычислительной
В настоящее время доминирующее положение на рынке центральных процессоров для ЭВМ занимает семейство IA-32 фирмы Intel. Это семейство открывают 16-разрядные процессоры 8086 и 8088 с 16/8-битной шиной данных и 20-битной шиной адреса. Второе поколение процессоров представлено процессором 80286, в котором шина адреса была расширена до 24 бит, что позволяло в особом режиме (protected mode - защищенный режим) адресовать до 16Мбайт физической памяти. Начиная с третьего поколения (Intel386) архитектура процессоров этого семейства стала 32-битной, а основным режимом работы - защищенный. В новых моделях усовершенствована работа с кэшем (Intel486), появились параллельные конвейеры (Pentium), появились новые архитектурные блоки (Pentium MMX), появился встроенный кэш второго уровня (P6). Эти изменения сопровождались также добавлением новых возможностей при работе в защищенном режиме: VME (Virtual Mode Extension) у Pentium, PAE (Physical Address Extension) у P6 и др.
Данное пособие описывает в первую очередь возможности 32-битных процессоров IA-32. Возможности новых процессоров даются в сравнении с базовой 32-битной моделью - Intel386. При описании той или иной возможности будет указываться, с какого поколения процессоров эта возможность доступна. Например:
- 286+ - возможность доступна, начиная с процессоров 80286;
- 386+ - возможность доступна, начиная с процессоров Intel386;
- 486+ - возможность доступна, начиная с процессоров Intel486;
- Pentium+ - возможность доступна, начиная с процессоров Pentium;
- P6+ - возможность доступна на процессорах Pentium Pro, Pentium II, Pentium III и более новых.
В семействе IA-32
декларируется программная
Структура МП
В своей основе МП Intel386 состоит из шести блоков, работающих параллельно: блок интерфейса с магистралью, блок предварительной выборки команд, блок декодирования команд, исполнительный блок, блок управления сегментами и блок страничной трансляции.
Блок интерфейса с магистралью обеспечивает интерфейс между микропроцессором и его окружением. Он принимает внутренние запросы для выборки команд от блока предварительной выборки команд и для обмена данными с исполнительным блоком и устанавливает приоритет этих запросов. Одновременно он генерирует или обрабатывает сигналы для исполнения текущего цикла магистрали. К ним относятся сигналы адреса, данных и управления для обращения к внешней памяти и устройствам ввода-вывода. Также этот блок управляет интерфейсом с внешними задатчиками магистрали и сопроцессорами.
Для того чтобы заранее получать команды или данные перед их фактическим использованием, существует функция опережающего просмотра программы, которую в МП Intel386 выполняет блок предвыборки команд. Когда блок интерфейса с магистралью не занимает цикла магистрали для исполнения команды, блок предвыборки команд использует его для последовательной выборки из памяти байтов команд. Эти команды хранятся в 16-байтовой очереди команд в ожидании обработки блоком декодирования команд.
Блок декодирования команд преобразует байты команды из этой очереди в микрокод. Декодированные команды в ожидании обработки исполнительным блоком хранятся в очереди команд, работающей по принципу FIFO (first in first out). В МП Intel386 эта очередь имеет размер 3 команды, а в МП Intel486 - уже 5 команд, что позволяет ему при некоторых условиях выполнять по одной команде за цикл. Непосредственные данные и относительные адреса в коде операции также берутся из очереди команд.
Исполнительный блок выполняет команды из очереди команд и взаимодействует со всеми другими блоками, требуемыми для завершения выполнения команды. Для ускорения выполнения команд с обращением к памяти исполнительный блок приступает к их исполнению до завершения выполнения предыдущей команды. Так как команды с обращением к памяти встречаются очень часто, то благодаря такому перекрытию по времени производительность повышается. В микропроцессорах Pentium исполнительный блок реализован в виде двух параллельных конвейеров (u и v), что позволяет ему выполнять до двух команд за такт. Это архитектурное решение названо суперскалярностью. Оно получило дальнейшее развитие в процессорах подсемейства P6 (Pentium Pro, Pentium II, Pentium III), где исполнительный блок представлен уже тремя конвейерами. Особенностью конвейеров P6 является динамическое выполнение (предсказание ветвлений, изменение последовательности команд).
Регистры общего назначения (РОН) встроенного типа используют для таких операций, как двоичное сложение или вычисление и модификация адресов. Исполнительный блок содержит восемь 32-разрядных РОНов, применяемых как для вычисления адресов, так и для операций с данными. Этот блок содержит также 64-разрядный регистр, применяемый для ускорения операций сдвига, циклического сдвига, умножения и деления.
Интеграция в процессор i486DX блока вычислений с плавающей точкой (Floating Point Unit) резко повысила производительность вещественной арифметики. В процессорах Pentium MMX был добавлен набор команд, позволяющий использовать регистры блока FPU для параллельной обработки пакета целочисленных данных: SIMD - "одна инструкция - несколько операндов". В процессорах Pentium III эта технология была расширена, добавлением блока XMM, позволяющего параллельно обрабатывать пакет вещественных данных: SSE - потоковое расширение SIMD.
Блоки управления сегментами и страничной трансляции образуют устройство управления памятью.
Блок управления сегментами преобразует логические адреса в линейные по запросу исполнительного блока. Для ускорения этого преобразования текущие дескрипторы сегментов помещаются во встроенную кэш-память. Во время трансляции адресов блок управления сегментами проверяет, нет ли нарушения сегментации. Эти проверки выполняются отдельно от проверок нарушений статической сегментации, осуществляемых механизмом проверки защиты. Блок сегментации обеспечивает четыре уровня (от 0 до 3) защиты с целью изоляции и защиты друг от друга прикладных программ и операционной системы. Этот компонент также позволяет легко создавать перемещаемые программы и данные и обеспечивает их совместное использование. Полученный линейный адрес направляется в блок страничной трансляции.
Если механизм страничного преобразования включен, то для получения физических адресов по линейным используется блок страничной трансляции. Если же этот механизм выключен, то это означает, что физический адрес совпадает с линейным, и трансляция не нужна. Для ускорения трансляции адресов в кэш-память дескрипторов страниц помещаются каталог недавно использованных страниц, а также информация о входах в таблицу страниц в буфере трансляции адресов. Затем блок страничной трансляции пересылает физические адреса в блок интерфейса с магистралью для выполнения цикла обращения к памяти или устройствам ввода-вывода.
Блок страничной
трансляции позволяет прозрачно
управлять пространством
В МП Intel486 был интегрирован кэш первого уровня размером 8Кбайт. В процессорах Pentium размер кэша первого уровня удвоен: 8Кбайт - кэш команд и 8Кбайт - кэш данных. В процессорах Pentium Pro, кроме того, на кристалле интегрирован кэш второго уровня.
Ресурсы МП
Любая задача, запущенная на микропроцессоре IA-32, оперирует определенным набором ресурсов для исполнения инструкций, сохранения данных и состояния задачи. Этот набор ресурсов называется средой выполнения. Функционирование некоторых элементов среды выполнения микропроцессора зависит от режима работы микропроцессора. К среде выполнения задачи относят:
- адресное пространство (размер адресного пространства и способы его адресации зависят от режима работы);
- регистры (8 регистров общего назначения, 6 сегментных регистров, регистр флагов и указатель команды);
- регистры сопроцессора (восемь 80-битовых регистров данных, регистр управления, регистр статуса, указатель команды, указатель операнда, слово тэгов);
- регистры MMX (восемь 80-битовых регистров данных, в Pentium MMX совмещены с регистрами данных сопроцессора), доступны в Pentium MMX, Pentium II и более новых моделях;
- регистры XMM (восемь 128-битных регистров данных и регистр управления и статуса), доступны в Pentium III и более новых моделях;
- стек (для реализации вложенных подпрограмм и передачи параметров между ними).
Кроме перечисленных ресурсов, среда выполнения микропроцессора содержит так называемые системные ресурсы, предназначенные для поддержки операционных систем и системного программного обеспечения:
- пространство портов ввода-вывода (обеспечивает взаимодействие с периферийными устройствами);
- управляющие регистры (определяют режим работы процессора и состояние задачи);
- регистры управления памятью и дескрипторные таблицы (используются в защищенном режиме);
- регистры отладки;
- прочие регистры (MTRRs, MSRs и др.)
Режимы работы микропроцессора
Впервые о различных режимах работы процессоров IA-32 стали говорить с появлением процессора 80286. Это был первый представитель данного семейства процессоров, в котором были реализованы многозадачность и защищенная архитектура. Чтобы обеспечить совместимость с предыдущими представителями этого семейства (8086/88, 80186/188) в процессоре 80286 было реализовано два режима функционирования: режим эмуляции 8086 (режим реального адреса) и защищенный режим, в котором используются все возможности процессора. В последующих поколениях процессоров этого семейства защищенный режим становится основным режимом работы.
В новых поколениях процессоров Intel появился еще один режим работы - режим системного управления. Впервые он был реализован в процессорах 80386SL и i486SL. Начиная с расширенных моделей Intel486, этот режим стал обязательным элементом архитектуры IA-32. С его помощью прозрачно даже для операционной системы на уровне BIOS реализуются функции энергосбережения.
Защищенный режим (Protected Mode)
Основным режимом работы микропроцессора является защищенный режим. Ключевыми особенностями защищенного режима являются: виртуальное адресное пространство, защита и многозадачность.
В защищенном режиме программа оперирует адресами, которые могут относиться к физически отсутствующим ячейкам памяти, поэтому такое адресное пространство называется виртуальным. Размер виртуального адресного пространства программы может превышать емкость физической памяти и достигать 64Тбайт. Для адресации виртуального адресного пространства используется сегментированная модель, в которой адрес состоит из двух элементов: селектора сегмента и смещения внутри сегмента. С каждым сегментом связана особая структура, хранящая информацию о нем, - дескриптор. Кроме "виртуализации" памяти на уровне сегментов существует возможность "виртуализации" памяти при помощи страниц - страничная трансляция. Страничная трансляция предоставляет удобные средства для реализации в операционной системе функций подкачки, а кроме того в процессорах P6+ обеспечивает 36-битную физическую адресацию памяти (64Гбайт).
Встроенные средства переключения задач обеспечивают многозадачность в защищенном режиме. Среда задачи состоит из содержимого регистров МП и всего кода с данными в пространстве памяти. Микропроцессор способен быстро переключаться из одной среды выполнения в другую, имитируя параллельную работу нескольких задач. Для некоторых задач может эмулироваться управление памятью как у процессора 8086. Такое состояние задачи называется режимом виртуального 8086 (Virtual 8086 Mode). О пребывании задачи в таком состоянии сигнализирует бит VM в регистре флагов. При этом задачи виртуального МП 8086 изолированы и защищены, как от друг друга, так и от обычных задач защищенного режима.
Защита задач обеспечивается следующими средствами: контроль пределов сегментов, контроль типов сегментов, контроль привилегий, привилегированные инструкции и защита на уровне страниц. Контроль пределов и типов сегментов обеспечивает целостность сегментов кода и данных. Программа не имеет права обращаться к виртуальной памяти, выходящей за предел того или иного сегмента. Программа не имеет права обращаться к сегменту данных как к коду и наоборот. Архитектура защиты микропроцессора обеспечивает 4 иерархических уровня привилегий, что позволяет ограничить задаче доступ к отдельным сегментам в зависимости от ее текущих привилегий. Кроме того, текущий уровень привилегий задачи влияет на возможность выполнения тех или иных специфических команд (привилегированных инструкций). Функции страничной трансляции, впервые появившиеся в МП Intel386, обеспечивают дополнительные механизмы защиты на уровне страниц.
Реальный режим (Real Mode)
В реальном режиме
микропроцессор работает как очень
быстрый 8086 с возможностью использования
32-битных расширений. Механизм адресации,
размеры памяти и обработка прерываний
(с их последовательными
Имеется две
фиксированные области в
- область инициализации системы
- область таблицы прерываний
Ячейки от 00000h до 003FFH резервируются для векторов прерываний. Каждое из 256 возможных прерываний имеет зарезервированный 4-байтовый адрес перехода. Ячейки от FFFFFFF0H до FFFFFFFFH резервируются для инициализации системы.
Режим системного управления (System Management Mode)
Режим системного управления предназначен для выполнения некоторых действий с возможностью их полной изоляции от прикладного программного обеспечения и даже операционной системы. Переход в этот режим возможен только аппаратно. Когда процессор находится в режиме SMM, он выставляет сигнал SMIACT#. Этот сигнал может служить для включения выделенной области физической памяти (System Management RAM), так что память SMRAM можно сделать доступной только для этого режима. При входе в режим SMM процессор сохраняет свой контекст в SMRAM (контекст сопроцессора не сохраняется) по адресу SMM Base и передает управление процедуре, называемой обработчиком System Management Interrupt, по адресу SMM Base+8000h (по умолчанию SMM Base содержит значение 30000h). Состояние процессора в этот момент точно определено: EFLAGS обнулен (кроме зарезервированных битов), сегментные регистры содержат селектор 0000, базы сегментов установлены в 00000000, пределы - 0FFFFFFFFh.
Следует отметить, что в режиме SMM не предусмотрена работа с прерываниями и особыми случаями: прерывания по IRQ и SMI# замаскированы, пошаговые ловушки и точки останова отключены, обработка прерывания по NMI откладывается до выхода из режима SMM. Если необходимо обеспечить работу с прерываниями или особыми случаями, то надо инициализировать IDT и разрешить прерывания, выставив флаг IF в регистре EFLAGS. Прерывания по NMI будут разблокированы автоматически после первой же команды IRET.
При возврате из SMM (по инструкции RSM) процессор восстанавливает свой контекст из SMRAM. Обработчик может программно внести изменения в образ контекста процессора, тогда процессор перейдет не в то состояние, в котором произошло SMI. Если SMI было получено во время выполнения инструкции HLT, то дальнейшие действия при выходе из SMM определяются значением поля "Auto HALT Restart": процессор может снова вернуться к инструкции останова или перейти к выполнению следующей команды. Если SMI произошло при выполнении инструкции ввода-вывода, то в зависимости от значения поля "I/O Instruction Restart" возможен рестарт инструкции ввода вывода.
Эти особенности режима системного управления позволяют использовать его для реализации системы управления энергосбережением компьютера или функций безопасности и контроля доступа.
Переключение между режимами
После инициализации процессор находится в реальном режиме. Процессор может быть переведен в защищенный режим установкой бита 0 (Protect Enable) в регистре CR0:
| MOV EAX,00000001h
MOV CR0,EAX |
или | MOV AX,0001h
LMSW AX |
Второй вариант "достался в наследство" от 16-разрядной архитектуры 80286, для совместимости с которой ее регистр MSW (Machine Status Word) отображается на младшее слово регистра CR0.
Вернуться в режим реального адреса процессор может по сигналу RESET или (в отличие от 80286) сбросив бит PE:
MOV EAX,00000000h
MOV CR0,EAX
Для совместимости с 80286 инструкция LMSW бит PE не сбрасывает.
Режим системного управления изолирован от других режимов. Процессор переходит в этот режим только аппаратно: по низкому уровню на контакте SMI# или по команде с шины APIC (Pentium+). Никакой программный способ не предусмотрен для перехода в этот режим. Процессор возвращается из режима системного управления в тот режим, при работе в котором был получен сигнал SMI#. Возврат происходит по команде RSM. Эта команда работает только в режиме системного управления и в других режимах не распознается, генерирую исключение #6 (недействительный код операции).
Сравнение режимов
| ||||||||||||||||||||||||||||||||||||||||||||||||||
Организация памяти
Физические адреса - это реальные адреса, используемые для выбора микросхем физической памяти, содержащих данные. Физическая память организована в виде последовательности 8-разрядных байтов. Каждому байту присвоен уникальный адрес, который может изменяться от 0 до 232-1 (или 236-1 у P6+). Физическая память составляет единое целое с компьютером и управляется процессором (с некоторой помощью средств прямого доступа к памяти). Организационные методы распределения памяти предоставляют программистам возможность эффективного использования всей компьютерной системы.
При использовании средств процессора для управления памятью, программа может использовать одну из трех моделей доступа к памяти: сплошная ("плоская") модель памяти, сегментированная модель памяти, модель режима реального адреса.
При использовании сплошной модели (Flat Model) памяти программа оперирует единым непрерывным адресным пространством - линейным адресным пространством. В нем содержатся и код, и стек, и данные программы, адресуемые смещением в пределах от 0 до 232-1. Такое 32-битное смещение называется линейным адресом.
При использовании сегментированной модели (Segmented Model) для программы память представляется группой независимых адресных блоков, называемых сегментами. Для адресации байта памяти программа должна использовать логический адрес, состоящий из селектора сегмента и смещения. Селектор сегмента выбирает определенный сегмент, а смещение указывает на конкретный байт в адресном пространстве выбранного сегмента. Каждая задача в защищенном режиме может иметь до 16383 сегментов, размером до 4 Гбайт каждый, таким образом, общий объем памяти, адресуемой программой составляет 64 Тбайт. Микропроцессор при помощи блока сегментации отображает логический адрес в линейное адресное пространство. Сегментация позволяет эффективно управлять пространством логических адресов. Сегменты используются для объединения областей памяти с общими атрибутами. Каждый сегмент имеет несколько связанных с ним атрибутов: размер, расположение, тип (стек, программа или данные) и характеристики защиты.
При использовании сплошной или сегментированной модели памяти линейное адресное пространство может быть отображено на пространство физических адресов либо непосредственно (линейный адрес есть физический адрес), либо при помощи механизма страничной трансляции. Во втором случае линейное адресное пространство делится на страницы одинакового размера (обычно 4 Кбайт), которые составляют виртуальную память. Страничная трансляция обеспечивает отображение требуемых страниц виртуальной памяти в физическое адресное пространство. Только при использовании страничной трансляции на процессорах P6+ доступны 36-битные физические адреса (до 64 Гбайт).
Следует отметить, что сплошная модель реализуется как частный случай сегментированной модели, когда программа обращается к сегменту, под который отведено все линейное пространство.
Для совместимости с программами, написанными для МП 8086, современные процессоры IA-32 могут использовать модель режима реального адреса (Real-address Mode Model). Эта модель является специфическим случаем сегментированной модели. Линейное адресное пространство образуется из массива сегментов длиной по 64 Кбайт. Размер такого линейного адресного пространства - 1 Мбайт. В этой модели селектор сегмента непосредственно используется для вычисления базового адреса в линейном адресном пространстве путем сдвига значения селектора на 4 бита влево (умножение на 16). Это значит, все сегменты начинаются с адреса, кратного 16. 16-байтный блок памяти называют параграфом, поэтому говорят, что сегмент выравнивается по границе параграфа. Т.к. размер сегмента намного превышает размер параграфа, то имеет место перекрытие сегментов, т.е. один и тот же байт линейного адресного пространства может быть адресован различными логическими адресами (используя селекторы разных сегментов).
Модель режима реального адреса используется программами в реальном режиме, в режиме системного управления и в защищенном режиме для задач в состоянии VM86.
Режимы адресации
Формат команды микропроцессора
Инструкция микропроцессора может содержать следующие поля:
| префикс | КОП | Mod R/M | SIB | смещение | непосредственный операнд |
| 0/1 байт | 1/2 байта | 0/1 байт | 0/1 байт | 0/1/2/4 байта | 0/1/2/4 байта |
Префикс - необязательная часть инструкции, позволяет изменить некоторые особенности ее выполнения. В команде может быть использовано сразу несколько префиксов разного типа. Типы префиксов:
- командные префиксы (префиксы повторения) REP, REPE/REPZ, REPNE/REPNZ;
- префикс блокировки шины LOCK;
- префиксы размера (см. далее);
- префиксы замены сегмента.
КОП - код операции.
Байт "Mod R/M" определяет режим адресации, а также иногда дополнительный код операции. Необходимость байта "Mod R/M" зависит от типа инструкции.
Байт SIB (Scale-Index-Base) определяет способ адресации при обращении к памяти в 32-битном режиме. Необходимость байта SIB зависит от режима адресации, задаваемого полем "Mod R/M".
Кроме того, инструкция
может содержать
На размер инструкции накладывается ограничение в 15 байт. Инструкция большего размера может получиться при некорректном использовании большого количества префиксов. Микропроцессоры IA-32 в таком случае генерируют исключение #13.
Режимы адресации операндов
Если инструкция
микропроцессора требует
- непосредственно в коде инструкции (только операнд-источник);
- в одном из регистров;
- через порт ввода-вывода;
- в памяти.
Для совместимости с 16-битными процессорами архитектура IA-32 использует одинаковые коды для инструкций, оперирующих как с 16-битными, так и 32-битными операндами. Новая архитектура предусматривает также новые возможности при указании адреса для операнда в памяти. Как процессор будет считать операнд или его адрес, зависит от эффективного размера операнда и эффективного размера адреса для данной команды. Эти значения определяются на основе режима работы, бита D дескриптора используемого сегмента и наличия в инструкции определенных префиксов.
| RM, V86, SMM | ||||||||
| бит D сегмента (PM) | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
| OpSize | нет | нет | есть | есть | нет | нет | есть | есть |
| AddrSize | нет | есть | нет | есть | нет | есть | нет | есть |
| Эфф. размер оп. | 16 | 16 | 32 | 32 | 32 | 32 | 16 | 16 |
| Эфф. размер адр. | 16 | 32 | 16 | 32 | 32 | 16 | 32 | 16 |