1. Цели курса
Цель данного курса - изучение базовых принципов архитектуры микропроцессоров различных типов и систем, построенных на их основе, а также современного состояния и тенденций развития в этой области.
Данный курс сочетает в себе описание базовых принципов построения микропроцессоров различных типов (универсальных МП с CISC- и RISC-архитектурой, однокристальных микроконтроллеров, процессоров цифровой обработки сигналов) и систем на их основе с рассмотрением особенностей архитектуры наиболее современных из них. Подробно рассматривается регистровая структура микропроцессора, организация и принципы работы кэш-памяти, конвейерный принцип обработки информации, аппаратные средства микропроцессора, используемые для защиты программ и данных и обеспечения мультипрограммного режима работы. Представлены организация микропроцессорных систем на микропроцессорах различных типов и связанные с этим вопросы: физическая и логическая организация адресного пространства, работа системы прерываний, прямой доступ к памяти, типы и структуры мультимикропроцессорных систем. Дано описание методов и средств разработки и отладки микропроцессорных систем, а также оценки их производительности.
2. Определение микропроцессора
Микропроцессор — процессор (устройство, отвечающее за выполнение арифметических, логических операций и операций управления, записанных в машинном коде), реализованный в виде одной микросхемы или комплекта из нескольких специализированных микросхем (в противоположность реализации процессора в виде электрической схемы на элементной базе общего назначения или в виде программной модели). Первые микропроцессоры появились в 1970-х и применялись в электронных калькуляторах, в них использовалась двоично-десятичная арифметика 4-х битных слов. Вскоре их стали встраивать и в другие устройства, например терминалы, принтеры и различную автоматику. Доступные 8-битные микропроцессоры с 16-битной адресацией позволили в середине 1970-х создать первые бытовые микрокомпьютеры.
Долгое время центральные процессоры создавались из отдельных микросхем малой и средней интеграции, содержащих от нескольких единиц до нескольких сотен транзисторов. Разместив целый ЦПУ на одном чипе сверxбольшой интеграции удалось значительно снизить его стоимость. Несмотря на скромное начало, непрерывное увеличение сложности микропроцессоров привело к почти полному устареванию других форм компьютеров, в настоящее время один или несколько микропроцессоров используются в качестве вычислительного элемента во всём, от мельчайших встраиваемых систем и мобильных устройств до огромных мейнфреймов и суперкомпьютеров.
С начала 1970-х широко известно, что рост мощности микропроцессоров следует закону Мура, который утверждает что число транзисторов на интегральной микросхеме удваивается каждые 18 месяцев. В конце 1990-х главным препятствием для разработки новых микропроцессоров стало тепловыделение (TDP) из-за утечек тока и других факторов.
Некоторые авторы относят к микропроцессорам только устройства, реализованные строго на одной микросхеме. Такое определение расходится как с академическими источниками, так и с коммерческой практикой (например, варианты микропроцессоров Intel и AMD в корпусах типа SECC и подобных, такие как Pentium II — были реализованы на нескольких микросхемах).
В настоящее время, в связи с очень незначительным распространением микропроцессоров, не являющихся процессорами, в бытовой лексике термины «микропроцессор» и «процессор» практически равнозначны.
3. Общие сведения о процессорах
Как известно, процессор является основным вычислительным блоком компьютера, в наибольшей степени определяющим его мощь. Процессор является устройством, исполняющим программу - последовательность команд (инструкций), задуманную программистом и оформленную в виде модуля программного кода. Чтобы понять, что делает процессор, рассмотрим его в окружении системных компонентов IBM PC-совместимого компьютера. Этой компьютерной архитектурой, естественно, не ограничивается сфера применения процессоров.
Всем известный IBM PC-совместимый компьютер представляет собой реализацию так называемой фон-неймановской архитектуры вычислительных машин. Эта архитектура была представлена Джоном фон-Нейманом еще в 1945 году и имеет следующие основные признаки. Машина состоит из блока управления, арифметико-логического устройства (АЛУ), памяти и устройств ввода/вывода. В ней реализуется концепция хранимой программы: программы и данные хранятся в одной и той же памяти. Выполняемые действия определяются блоком управления и АЛУ, которые вместе являются основой центрального процессора. Центральный процессор выбирает и исполняет команды из памяти последовательно, адрес очередной команды задается "счетчиком адреса" в блоке управления. Этот принцип исполнения называется последовательной передачей управления. Данные, с которыми работает программа, могут включать переменные - именованные области памяти, в которых сохраняются значения с целью дальнейшего использования в программе. Фон-неймановская архитектура - не единственный вариант построения ЭВМ, есть и другие, которые не соответствуют указанным принципам (например, потоковые машины). Однако подавляющее большинство современных компьютеров основано именно на этих принципах, включая и сложные многопроцессорные комплексы, которые можно рассматривать как объединение фон-неймановских машин. Конечно же, за более чем полувековую историю ЭВМ классическая архитектура прошла длинный путь развития.
В общем смысле под архитектурой процессора понимается его программная модель, то есть программно-видимые свойства. Под микроархитектурой понимается внутренняя реализация этой программной модели. Для одной и той же архитектуры разными фирмами и в разных поколениях применяются существенно различные микроархитектурные реализации, при этом, естественно, стремятся к максимальному повышению производительности (скорости исполнения программ).
Сейчас существует множество архитектур процессоров, которые делятся на две глобальные категории - RISC и CISC.
RISC - Reduced (Restricted) Instruction Set Computer - процессоры (компьютеры) с сокращенной системой команд. Эти процессоры обычно имеют набор однородных регистров универсального назначения, причем их число может быть большим. Система команд отличается относительной простотой, коды инструкций имеют четкую структуру, как правило, с фиксированной длиной. В результате аппаратная реализация такой архитектуры позволяет с небольшими затратами декодировать и выполнять эти инструкции за минимальное (в пределе 1) число тактов синхронизации. Определенные преимущества дает и унификация регистров.
CISC - Complete Instruction Set Computer - процессоры (компьютеры) с полным набором инструкций, к которым относится и семейство х86. Состав и назначение их регистров существенно неоднородны, широкий набор команд усложняет декодирование инструкций, на что расходуются аппаратные ресурсы. Возрастает число тактов, необходимое для выполнения инструкций.
Процессоры х86 имеют самую сложную в мире систему команд. Хорошо ли это, вопрос спорный, но груз совместимости с программным обеспечением для IBM PC, имеющим уже 20-летнюю историю, не позволяет расставаться с этим "наследием тяжелого прошлого". В процессорах семейства х86, начиная с 486, применяется комбинированная архитектура - CISC-процессор имеет RISC-ядро.
Различают следующие способы организации вычислительного процесса:
один поток команд - один поток данных (Simple Instruction - Simple Data, SISD) - характерно для традиционной фон-неймановской архитектуры (иногда вместо Simple пишут Single);
один поток команд - множественный поток данных (Simple Instruction - Multiple Data, SIMD) - технология MMX;
множественный поток команд - один поток данных (Multiple Instruction - Simple Data, MISD);
множественный поток команд - множественный поток данных (Multiple Instruction - Multiple Data, MIMD).
Рассмотрим порядок исполнения инструкций обработки данных - выполнения арифметических или логических функций. Во многих случаях инструкция работает с парой операндов - операндом назначения dest (destination) и операндом-источником src (source). Традиционная схема действия инструкции: dest = F (dest, srс), где F - некоторая функция от двух переменных. Это означает, что при выполнении инструкции процессор извлекает из указанных в инструкции мест (регистр, память, константа в самой инструкции) пару двоичных чисел, и результат действия над ними записывает на место одного из них (dest). Для выполнения той же функции над следующей парой чисел требуется повторное исполнение инструкции, но уже с другой парой операндов.
Такой принцип исполнения естественен для базовой архитектуры процессоров х86. В процессоры Pentium, "под занавес" их развития, было введено расширение ММХ, направленное на ускорение обработки потоков и массивов данных. Ключевым в этом расширении стал принцип SIMD. Здесь вводятся новые упакованные форматы данных: в один регистр ММХ можно помещать не только один операнд (64-битное число), но и пару 32-битных, четверку 16-битных или восьмерку 8-битных чисел. Одна инструкция MMX выполняет однотипные действия сразу над всеми числами, упакованными в регистры ММХ, заданные операндной частью данной инструкции. Поначалу набор инструкций ММХ ограничивался целочисленной арифметикой и логикой, и он стал стандартом для всех современных процессоров х86. Позже появились расширения 3DNow! (от AMD) и SSE (от Intel) для чисел в формате с плавающей точкой, сильно различающиеся по набору инструкций.
Несколько слов о числах с плавающей точкой. Архитектура процессора 8086 позволяет выполнять арифметические функции (сложение, вычитание, умножение и деление) над целочисленными данными (знаковыми и беззнаковыми, двоичными и двоично-десятичными) разрядностью 8 или 16 бит. В процессорах 386+ можно обрабатывать и 32-разрядные числа. Для работы с числами в формате с плавающей точкой (представленными в виде мантиссы и порядка) предусмотрен математический сопроцессор.
Сопроцессор представляет собой набор 80-битных регистров и специализированное арифметическое устройство, которое кроме четырех арифметических действий способно вычислять значение квадратного корня, тригонометрических функций, логарифмов и степеней чисел. Сопроцессор может только перехватывать адресованные ему инструкции из потока команд, выполняемых центральным процессором. Все манипуляции с памятью выполняет центральный процессор. Сложные функции сопроцессора требуют довольно больших затрат времени, но во время их выполнения центральный процессор может продолжать выполнение инструкций, вплоть до момента появления следующей инструкции, адресованной сопроцессору. Однако эта эпизодическая параллельность вычислений не противоречит принципу последовательной передачи управления (самостоятельно сопроцессор передать управление не способен). При отсутствии сопроцессора его функции можно выполнять программно целочисленными средствами центрального процессора, но сопроцессор их выполняет в сотни и тысячи раз быстрее. Программная эмуляция сопроцессора может включаться прозрачно для прикладных программ, обращающихся к сопроцессору. Для этого используется механизм исключений.
4. История развития микропроцессоров
Термин "микропроцессор" был впервые употреблен в 1972 г., хотя годом рождения этого прибора следует считать 1971 г., когда фирма Intel выпустила микропроцессор серии 4004 - "интегральное микропрограммируемое вычислительное устройство", представляющее собой однокристальный центральный процессор, имеющий в своем составе 4-разрядный параллельный сумматор, 16 4-х - разрядных регистров, накапливающий сумматор и стек. Микропроцессор 4004 был реализован на 2300 транзисторах и мог выполнять 45 различных команд. Последующие поколения микропроцессоров, представляющие собой 8-, 16- и 32-разрядные устройства, появились соответственно в 1972, 1974 и 1981гг. Однако, в 1970 году, более чем за год до выхода чипа i4004, был изготовлен военный микропроцессор F14 CADC(en), который использовался ВВС США и был засекречен до 1998 года.
При оценке параметров микропроцессора и выборе микропроцессорной серии наибольшую роль играет разрядность прибора, которая задает элементарный объем обрабатываемых данных. Чем больше разрядность, тем выше производительность и шире возможности адресации. В ранних приборах разрядность регистров, шин управления, а также информационных шин почти всегда была одинаковой. Сейчас такая структура встречается редко. Например, микропроцессор Motorola 6800 имеет 32-разрядную внутреннюю архитектуру, 16-разрядную шину данных и 24-разрядную адресную шину (адресует до 16 Мбайт оперативной памяти). Для удобства такую архитектуру называют 32/16/24.
В настоящее время стремятся к большей разрядности, например делают полную 32-разрядную архитектуру (32/32/32).
Если считать, что выпуск предыдущих микропроцессоров должен прекращаться при появлении кристаллов с более высокой разрядностью, то 4-разрядные производились бы всего 1 год, 8-разрядные - 5 лет, 16-разрядные - 5 лет
Однако следует оговориться: 4-разрядные микропроцессоры производятся и применяются до настоящего времени.
В начале развития микропроцессоры изготовлялись по р-МОП технологии, затем специалисты стали отдавать предпочтение комплементарной МОП-технологии (КМОП) (технологии, используемые при изготовлении процессоров, будут рассмотрены ниже в подразделе 3.1). Теперь применяется множество разнообразных видов технологии и технологических приемов при изготовлении микропроцессоров: n-МОП технология с обогащением и с обеднением, биполярная технология, технология И2Л и др. Например, за первые 20 лет развития микропроцессорной техники в США зарегистрированы 237 технологических нововведений, из них 67 революционных.
Проследим историю развития микропроцессоров на примере семейства процессоров х86.
Первый 16-разрядный процессор i8086 фирма Intel выпустила в 1978 году. Частота - 5 Мгц, производительность - 0,33 MIPS для инструкций с 16-битными операндами (позже появились процессоры 8 и 10 МГц). Технология 3 мкм, 29 000 транзисторов. Адресуемая память 1 Мбайт. Через год появился i8088 - тот же процессор, но с 8-разрядной шиной данных. С него началась история IBM PC, неразрывно связанная со всем дальнейшим развитием процессоров Intel, Массовое распространение и открытость архитектуры IBM PC привели к лавинообразным темпам появления нового программного обеспечения, разрабатываемого крупными, средними и мелкими фирмами, а также энтузиастами-одиночками. Технический прогресс тогда и сейчас был бы немыслим без развития процессоров, но, с учетом огромного объема уже существующего программного обеспечения для PC, уже тогда возник принцип обратной программной совместимости - старые программы должны работать на новых процессорах. Таким образом, все нововведения в архитектуре последующих процессоров должны были пристраиваться к существующему ядру.
Процессор i80286, знаменующий следующий этап архитектуры, появился только в 1982 году. Он уже имел 134000 транзисторов (технология 1,5 мкм) и адресовал до 16 Мбайт физической памяти. Его принципиальные новшества - защищенный режим и виртуальная память размером до 1 Гбайт - не нашли массового применения; процессор большей частью использовался как очень быстрый 8088.
Рождение 32-разрядных процессоров (архитектура IA-32 - Intel Architecture 32 bit) ознаменовалось в 1985 году моделью i80386 (275000 транзисторов, 1,5 мкм). Разрядность шины данных (как и внутренних регистров) достигла 32 бит, адресуемая физическая память - 4 Гбайт. Появились новые регистры, новые 32-битные операции, существенно доработан защищенный режим, были введены режим V86 и страничное управление памятью. Процессор нашел широкое применение в PC; на его благодатной почве стал разрастаться "самый большой вирус" - Microsoft Windows с приложениями. С этого времени стала заметна тенденция "положительной обратной связи": на появление нового процессора производители ПО реагируют выпуском новых привлекательных продуктов, последующим версиям которых становится тесно на новом процессоре. Появляется более производительный процессор, но после непродолжительного восторга и его ресурсы быстро признаются недостаточными, затем история повторяется. Этот "замкнутый круг", конечно, естественен, но есть обоснованное подозрение, что большие ресурсы развращают (или, по крайней мере, расслабляют) разработчика ПО, не принуждая его напрягаться в поисках более эффективных способов решения задачи. Примером эффективного программирования можно считать игрушки на Sinclair ZX-Spectrum, которые работают на минимальных ресурсах - 8-разрядном процессоре и 64 (128) Кбайт ОЗУ. С противоположными примерами большинство пользователей PC сталкиваются регулярно, но, имея процессор Celeron 533 и 64 Мбайт ОЗУ, на них не всегда обращают внимание.
История процессора 80386 повторила судьбу 8086/8088: первую модель с 32-разрядной шиной данных (впоследствии названной 386DX) сменил 386SX с 16-разрядной шиной. Он довольно легко вписывался в архитектуру PC AT, ранее базировавшуюся на процессоре 80286.
Процессор Intel486DX появился в 1989 году. Транзисторов - 1,2 млн, технология 1 мкм. От процессора 80386 существенно отличается размещением на кристалле первичного кэша и встроенного математического сопроцессора - FPU (предыдущие процессоры использовали внешние сопроцессоры х87). Кроме того, для повышения производительности в этом CISC-процессоре (как и в последующих) применено RISC-ядро. Далее появились его разновидности, отличающиеся наличием или отсутствием сопроцессора, применением внутреннего умножения частоты, политикой кэширования и другим. Тогда же Intel занялась энергосбережением, что отразилось и в линии 386 - появился процессор Intel386SL.
В 1993 году появились первые процессоры Pentium с частотой 60 и 66 МГц - 32-разрядные процессоры с 64-разрядной шиной данных. Транзисторов 3,1 млн, технология 0,8 мкм, питание 5 В. От 486 процессор Pentium принципиально отличается суперскалярной архитектурой - способностью за один такт выпускать с конвейеров до двух инструкций (что, конечно, не означает возможности прохождения инструкции через процессор за полтакта). Интерес к процессору со стороны производителей и покупателей PC сдерживался его очень высокой ценой. Кроме того, возник скандал с ошибкой в сопроцессоре. Хотя фирма Intel математически обосновала невысокую вероятность ее проявления (раз в несколько лет), она (фирма, а не ошибка) все-таки пошла на бесплатную замену уже проданных процессоров на новые, исправленные.
Процессоры Pentium с частотой 75, 90 и 100 МГц, появившиеся в 1994 году, представляли второе поколение процессоров Pentium. При почти том же числе транзисторов они выполнялись по технологии 0,6 мкм, что позволило снизить потребляемую мощность. От первого поколения отличались внутренним умножением частоты, поддержкой мультипроцессорных конфигураций и другим типом корпуса. Появились версии (75 МГц в миниатюрном корпусе) для мобильных применений (блокнотных PC). Процессоры Pentium второго поколения стали весьма популярными в PC. В 1995 году были выпущены процессоры на 120 и 133 МГц, выполненные уже по технологии 0,35 мкм (первые процессоры на 120 МГц делались по технологии 0,6 мкм). 1996-й называют годом Pentium - появились процессоры на 150, 166 и 200 МГц, и Pentium стал рядовым процессором в массовых PC.
Параллельно с Pentium развивался и процессор Pentium Pro, который отличался "динамическим исполнением", направленным на увеличение числа параллельно исполняемых инструкций. Кроме того, в его корпусе разместили вторичный кэш, работающий на частоте ядра, - для начала объемом 256 Кбайт. Однако на 16-разрядных приложениях, а также в среде Windows 95 он был ничуть не быстрее Pentium. Процессор содержит 5,5 млн транзисторов ядра и 15,5 млн транзисторов для вторичного кэша объемом 256 Кбайт. Первый процессор с частотой 150 МГц появился в начале 1995 года (технология 0,6 мкм), а уже в конце года были достигнуты частоты 166, 180 и 200 МГц (технология 0,35 мкм), а кэш увеличен до 512 Кбайт.
В начале 1997 года фирма Intel выпустила процессоры Pentium ММХ. Технология ММХ (MultiMedia Extensions, мультимедийные расширения) предполагает параллельную обработку группы операндов одной инструкцией. Технология ММХ призвана ускорить выполнение мультимедийных приложений, в частности операций с изображениями и обработки сигналов. Ее эффективность вызывает споры в среде разработчиков, поскольку выигрыш в самих операциях обработки компенсируется проигрышем на дополнительных операциях упаковки-распаковки. Кроме того, ограниченная разрядность ставит под сомнение применение ММХ в декодерах MPEG-2, в которых требуется обработка 80-битных операндов. Кроме ММХ, эти процессоры, по сравнению с обычным Pentium, имеют удвоенный объем первичного кэша и некоторые элементы архитектуры, позаимствованные у Pentium Pro, что повышает производительность Pentium ММХ на обычных приложениях. Процессоры Pentium ММХ имеют 4,5 млн. транзисторов и выполнены по технологии 0,35 мкм. Развитие линейки моделей Pentium ММХ сейчас остановилось. Последние достигнутые тактовые частоты - 166, 200 и 233 МГц. Для мобильных применений (блокнотных ПК) процессоры под кодовым названием Tillamook выпускались по технологии 0,25 мкм, тактовая частота достигла 266 МГц при уменьшенной потребляемой мощности.
В мае 1997 года появился процессор Pentium II. Он представляет собой слегка урезанный вариант ядра Pentium Pro с более высокой внутренней тактовой частотой, в которое ввели поддержку ММХ. Трудности размещения вторичного кэша и процессорного ядра в корпусе одной микросхемы преодолели нехитрым способом - кристалл с ядром (processor core) и набор кристаллов статической памяти и дополнительных схем, реализующих вторичный кэш, разместили на небольшой печатной плате - картридже. Первые процессоры имели частоту ядра 233, 266 и 300 МГц (технология 0,35 мкм), летом 1998 года была достигнута частота 450 МГц (технология 0,25 мкм), причем внешняя тактовая частота с 66 МГц повысилась до 100 МГц. Вторичный кэш этих процессоров работает на половине частоты ядра.
В 1999 году появились процессоры Pentium III - в них ввели новый блок 128-битных регистров ХММ и новые инструкции, названные SSE. Частота ядра подбирается к 1 ГГц, частота системной шины - 100 и 133 МГц. С конструктивами начались "колебания генеральной линии", и теперь снова предпочтение отдается процессорам со штырьковыми выводами (необходимость картриджей отпадает). На базе Pentium II появилось семейство "облегченных" процессоров Celeron, сначала без вторичного кэша, а потом и с интегрированным вторичным кэшем размером 128 Кбайт. Позже процессоры Celeron приобрели и расширение SSE. Для мощных компьютеров имеется семейство процессоров Хеоn, которое охватывает и Pentium II, и Pentium III. Для этих процессоров характерен больший объем вторичного кэша, поддержка более чем двух процессорных конфигураций и более крупный картридж. Есть процессоры Pentium II/III и для мобильных применений.
Конечно же, перечисленными моделями не исчерпывается весь мировой ассортимент микропроцессоров. Это только представители семейства процессоров, имеющих обобщенное название х86. Ряд фирм (например, AMD, Cyrix, IBM) выпускает процессоры, совместимые с перечисленными процессорами Intel и имеющие свои характерные особенности. Обычно они слегка отставали от изделий Intel, выпускаемых в то же время. Однако процессор К7 от AMD изменил ситуацию. Ряд фирм (DEC, Motorola, Texas Instruments, IBM) имеет разработки процессоров, существенно отличающиеся от семейства х86; есть другие классы процессоров и у Intel. Среди них присутствуют и гораздо более мощные процессоры, относящиеся как к RISC-, так и к CISC-архитектуре.
Поколения процессоров
В настоящее время семейство х86 насчитывает 6 поколений процессоров у Intel и 7 - у AMD.
Первое поколение (процессоры 8086 и 8088 и математический сопроцессор 8087) задало архитектурную основу - набор неравноправных 16-разрядных регистров, сегментную систему адресации памяти в пределах 1 Мбайт с большим разнообразием режимов, систему команд, систему прерываний и некоторые другие черты. В процессорах применялась "малая" конвейеризация - пока одни узлы выполняли текущую инструкцию, блок предварительной выборки выбирал из памяти следующую. На выполнение каждой инструкции уходило в среднем по 12 тактов процессорного ядра.
Второе поколение (80286 с сопроцессором 80287) привнесло в семейство защищенный режим, позволяющий использовать виртуальную память размером до 1 Гбайт для каждой задачи, пользуясь адресуемой физической памятью в пределах 16 Мбайт. Защищенный режим является основой для построения многозадачных операционных систем (ОС), в которых система привилегий жестко регламентирует взаимоотношения задач с памятью, ОС и друг с другом. Защищенный режим 80286 не нашел массового применения - эти процессоры, в основном, использовались как "очень" быстрые 8086. Их производительность повысилась не только за счет роста тактовой частоты, но и за счет значительного усовершенствования конвейера. Здесь на выполнение инструкции уходило в среднем по 4,5 такта. Во втором поколении появились новые инструкции: системные (для обслуживания механизмов защищенного режима) и несколько прикладных (в том числе для блочного ввода/вывода). Наличие защищенного режима не отменяет возможности работы в реальном режиме 8086, и эта возможность сохраняется во всех последующих поколениях (дань совместимости с программным обеспечением, включая и MS DOS).
Третье поколение (386/387 с суффиксами DX и SX, определяющими разрядность внешней шины) ознаменовалось переходом к 32-разрядной архитектуре IA-32. Кроме расширения диапазона непосредственно представляемых величин (16 бит отображают целые числа в диапазоне 0-65535 или от -32767 до +32767, 32 бита - более чем 4 миллиарда) увеличился и объем адресуемой памяти (до 4 Гбайт реальной, 64 Тбайт виртуальной). Для этого почти все программно-доступные регистры были расширены и получили в названии приставку "Е" (ЕАХ, ЕВХ...). В систему команд ввели возможность переключения разрядности адресации и данных. Защищенный режим был несколько усовершенствован, но оставлена и обратная совместимость с 286. На таком процессоре стала "расцветать" система MS Windows - сначала оболочка, а потом и операционная система. В плане организации исполнения инструкций существенных изменений, повлекших за собой сокращение числа тактов на инструкцию, не произошло - те же средние 4,5 такта, но частота уже достигла 40 МГц.
Четвертое поколение (486, опять-таки DX и SX) в видимую архитектурную модель больших изменений не внесло, но зато принят ряд мер для повышения производительности. В этих процессорах значительно усложнен исполнительный конвейер - основные операции выполняет RISC-ядро, "задания" для которого готовят из входных CISC-инструкций х86. Этот конвейер стал способным выполнять инструкцию в среднем за два такта. Конечно, каждая инструкция проходит через весь конвейер процессора за гораздо большее количество тактов, но темп выполнения в потоке именно таков. Производительность конвейера процессора оторвалась от возможностей доставки инструкций и данных из оперативной памяти, и прямо в процессор ввели быстродействующий первичный кэш объемом 8-16 Кбайт. В этом же поколении отказались от внешнего сопроцессора: теперь он размещается либо на одном кристалле с центральным (называется FPU), либо его нет вообще. По сравнению с предыдущим поколением и сопроцессор стал работать значительно эффективнее. А тактовая частота в этом поколении достигла 133 МГц (у AMD, а у Intel - только 100).
Пятое поколение - процессор Pentium у Intel и К5 у AMD - привнесли суперскалярную архитектуру. Суперскалярность означает наличие более одного конвейера. У процессоров пятого поколения после блоков предварительной выборки и первой стадии декодирования инструкций имеется два конвейера, U-конвейер и V-конвейер. Каждый из этих конвейеров имеет ступени окончательного декодирования, исполнения инструкций и буфер записи результатов. U-конвейер "умеет" все, у V-конвейера возможности немного скромнее. Конвейеризирован и блок FPU. Процессор с такой архитектурой может одновременно "выпускать" до двух выполненных инструкций, но в среднем получается 1 такт на инструкцию. Не все инструкции могут выполняться парно, эффективность использования конвейеров (коэффициент их загрузки или простоя) зависит от программного кода - есть широкие возможности оптимизации. В процессорах применяется блок предсказания ветвлений (инструкций программы, выполняемых после очередного условного перехода или вызова), в обязанности которого входит не оставлять конвейеры без работы "на поворотах" алгоритмов. Для быстрого снабжения конвейеров инструкциями и данными из памяти шина данных процессоров имеет разрядность 64 бит, из-за чего поначалу их даже ошибочно называли 64-разрядными процессорами. На закате этого поколения появилось расширение ММХ, новизна которого заключается в принципе SIMD: одна инструкция выполняет действия сразу над несколькими (2, 4 или 8) комплектами операндов. В ММХ появился и новый тип арифметики - с насыщением (saturated): если результат операции не умещается в разрядной сетке, то вместо переполнения (антипереполнения) устанавливается максимально (минимально) возможное значение числа.
Шестое поколение процессоров Intel началось с Pentium Pro и продолжается по сей день в процессорах Pentium II, Pentium III, Celeron и Хеоn. Его лейтмотивом является динамическое исполнение, под которым понимается исполнение инструкций не в том порядке (out of order), как это предполагается программным кодом, а в том, как "удобно" процессору. Инструкции, поступающие на конвейер, разбиваются на простейшие микрооперации, которые далее выполняются суперскалярным процессорным ядром в порядке, удобном процессору. Ядро процессора содержит несколько конвейеров, к которым подключаются исполнительные устройства целочисленных вычислений, обращений к памяти, предсказания переходов и вычислений с плавающей точкой. Несколько различных исполнительных устройств могут объединяться на одном конвейере.
Результаты "беспорядочно" выполняемых микроопераций собираются в переупорядочивающем буфере и в корректном порядке записываются в память (и порты ввода/вывода). Чтобы можно было одновременно выполнять разные инструкции с одними и теми же программно-адресуемыми регистрами, внутри процессора выполняется аппаратное переименование регистров (их у процессора больше, чем доступных по программной модели). Конечно, при этом учитывается и связь по данным, которая сковывает "беспорядочные" параллельные исполнения, даже пользуясь дополнительными регистрами. В процессорах 6-го поколения реализовано исполнение по предположению: процессор пытается исполнить инструкцию, последующую (по его мнению) за переходом еще до самого перехода. В итоге всех этих ухищрений среднее число тактов на инструкцию у Pentium Pro сократилось до 0,5 такта. В систему команд были введены новые инструкции, позволяющие писать более эффективные коды (с точки зрения минимизации ветвлений).
Полтакта на инструкцию - звучит, конечно, странно. Но если вспомнить о 8-байтной шине данных, позволяющей за один такт загрузить "кусок" кода, содержащего несколько команд, и о нескольких исполнительных устройствах, одновременно приступающих к их выполнению, то вопросы рассеиваются. Правда, вопрос доставки инструкций и данных из памяти к ядру процессора становится острым, и один первичный кэш здесь не спасает. В то время как частоты ядра процессора (и первичного кэша) неуклонно растут по мере усовершенствования технологий изготовления микросхем (чем тоньше, тем быстрее), частота системной шины, по которой процессор обменивается данными с памятью, так быстро расти не может. Здесь уже сильно сказываются паразитные параметры проводников и разъемов, которые остаются относительно большими по размерам. Кроме того, и сама оперативная память не такая уж и быстрая.
Проблему доставки "сырья" для работы процессоров 6-го поколения фирма Intel стала решать, используя так называемую двойную независимую шину (DIB). Одна из шин процессора, "фасадная" (FSB - Front Side Bus), связывает его с системной платой, на которой находится и оперативная память. Другая шина связывает процессор со вторичным кэшем, который находится в одной упаковке с процессором (для пользователя вторичный кэш неотделим от процессора). Частота FSB долгое время оставалась в пределах 66 МГц, что обеспечивало пиковую пропускную способность 528 Мбайт/с. Лишь совсем недавно эта частота поднялась до 100 и даже 133 МГц. А вот тактовая частота второй шины пропорциональна частоте ядра - либо полная частота, либо ее половина. Пиковую пропускную способность этой шины можно оценить, умножив ее тактовую частоту на 8 - число байт данных на шине (у новых процессоров Pentium III разрядность этой шины уже 32 байта). Наличие двойной независимой шины у Intel является одним из атрибутов шестого поколения. Системная шина при этом имеет протокол, принципиально отличающийся от протокола шины процессоров Pentium.
Фирма AMD в своих процессорах шестого поколения (К6) реализовала "беспорядочное исполнение", но двойную независимую шину применять не стала. Вместо этого была увеличена тактовая частота той же шины, которой пользовался Pentium - весьма эффективной в однопроцессорных конфигурациях. Двойная шина появилась лишь в процессорах K6-III. Благодаря такому решению сокет-7 (Super7) пережил целых два поколения процессоров. По микроархитектуре (способу реализации "беспорядочного исполнения") процессоры К6 заметно отличаются от своих Intеl'овских собратьев.
Как пятое поколение по ходу развития было "сдобрено" расширением ММХ (целочисленное), так шестое поколение получило расширение 3DNow! (AMD) и SSE (Intel). Однако в отличие от единого ММХ, эти два расширения не эквивалентны. У них общая идея "потоковой" направленности и реализации SIMD для чисел с плавающей точкой. Поток в данном контексте подразумевает, что с его данными должны выполняться однотипные операции. Кроме того, данные, уже прошедшие обработку, в дальнейшем этим вычислительным процессом использоваться не будут и ими не следует засорять кэш. Теперь появились инструкции загрузки данных в кэш, а также записи в память, минуя кэш. Прежде такого явного управления кэшированием не было.
Седьмое поколение (по AMD) началось с процессора Athlon. Причисление его к новому поколению мотивировано развитием суперскалярности и суперконвейерности, которая теперь охватила и блок FPU (в прежних поколениях FPU если и конвейеризировали, то не распараллеливали).
Завершает линию процессоров IA-32 от фирмы Intel процессор Willamette (в начале 2000 года демонстрировался опытный образец с частотой ядра 1,5 ГГц). Его микроархитектура существенно отличается от привычной архитектуры Р6. Конвейер этого процессора имеет 20 ступеней, в то время как у Pentium III 12-ступенчатый целочисленный конвейер и 17-ступенчатый FPU. Длинный конвейер упрощает микрооперации каждой стадии, что позволяет повышать тактовую частоту. Однако при этом растет задержка прохождения инструкции, и, что особенно критично, растут потери времени при ошибках в предсказании ветвлений. Чтобы минимизировать вероятность этих ошибок, в процессоре существенно улучшены узлы, отвечающие за загрузку конвейеров, - блок предсказания переходов, буферы микроинструкций. Первичный кэш имеет объем 256 Кбайт, и в кэше применяется упорядочивание инструкций (чтобы инструкция, следующая за ветвлением, всегда оказывалась в кэше). Существенно повышена производительность исполнительных блоков целочисленных инструкций, но у стандартного FPU (не SIMD) производительность практически та же, что и у Pentium III (в пересчете на эквивалентную тактовую частоту). Для чисел с плавающей точкой основной упор сделан на инструкции SIMD. В процессоре появился набор инструкций SSE2: 76 новых инструкций обработки данных и управления кэшированием. Новые инструкции обработки работают с числами разных форматов, включая учетверенные слова (64 бит) и числа двойной точности с плавающей точкой (64 бит). Процессор имеет совершенно новую шину с тактовой частотой 100 МГц, но передающую до четырех 64-битных пакетов за такт (Quad Pumped) - производительность до 3,2 Гбайт/с. Эта шина является переходной к шине процессоров IA-64. Процессор устанавливается в Socket-462, естественно, не совместимый ни с каким из существующих сегодня сокетов или слотов. В 2001 году ожидается мобильный вариант Willamette - Northwood, а также серверный вариант - Foster.
Фирма Intel сейчас занимается 64-разрядной архитектурой - такая разрядность позволит считать целые числа с числом разрядов почти до 2ґ1019. Первый представитель 64-разрядных процессоров - Itanium, разрабатываемый под кодовым названием Merced. Его архитектура - IA-64 - обеспечивает совместимость с существующим программным обеспечением для используемой ныне архитектуры IA-32.
Микропроцессор Itanium использует 10-уровневый конвейер и может выполнить до шести инструкций за один такт. В новой архитектуре предусмотрено 128 регистров для вычислений с плавающей запятой и столько же для целых чисел, 64 регистра для предсказания переходов и 8 регистров ветвления. На кристалле расположены два блока вычислений с плавающей запятой, обеспечивающие производительность до 6 Гфлоп при операциях с одинарной точностью и до 3 Гфлоп - с повышенной точностью на частоте 1ГГц. Они существенно ускоряют и обработку графической ЗD-информации. Вся сверхоперативная память разделена на три уровня, два из которых интегрированы на самом кристалле. Кэш-память третьего уровня, выполненная на дискретных микросхемах SRAM общим объемом до 4 Мб, располагается в картридже микропроцессора.
В начале 2000 года фирма Transmeta заявила процессор Crusoe, который является аппаратно-программным комплексом. Этот комплекс работает нетрадиционным способом: инструкции х86 транслируются в длинные слова VLIW (Very Long Instruction Word) регулярной структуры длиной 64 или 128 бит, которые исполняются процессорным ядром. При этом оттранслированные инструкции хранятся в кэш-памяти и при многократном исполнении транслируются лишь единожды. Ядро процессора исполняет элементы кода в строгом порядке. С этим процессором уже могут работать ОС Windows 9x/NT/2000, Linux. Плавающее энергопотребление составляет от 10-20 мВт до 1-3 Вт, в зависимости от выполняемой работы. Процессор имеет наилучшее отношение производительности к потреблению энергии и предназначается для мобильных систем.
Семейство х86 фирмы Intel началось с 16-разрядного процессора 8086. Все следующие модели процессоров, в том числе 32-разрядные (386, 486, Pentium, Pentium Pro, Pentium II, Celeron) и с 64-разрядным расширением ММХ, включают в себя систему команд и программную модель предыдущих, обеспечивая совместимость с ранее написанным программным обеспечением.