История развития микропроцессоров

Микропроцессоры ведут свою историю с марта 1971 года, когда мало кому известная компания Intel выпустила 4-разрядный кристалл 4004, предназначенный для использования в микрокалькуляторах. В следующем году разрядность микропроцессоров увеличилась вдвое – был выпущен 8-разрядный 8008, а еще через два года на свет появился 8080. Последний примечателен тем, что на нем был собран первый персональный компьютер, а впоследствии создана операционная система CP/M-80 – первая ОС для персональных компьютеров, получившая широчайшее распространение.

Процессор 8080 работал на частоте 2 МГц. Выборка из памяти и исполнение команд осуществлялись синхронно: на каждое обращение к памяти процессор тратил по 3 такта и дополнительно 1-2 такта на декодирование команды. Команды были различной длины (от 1 до 3 байт) и исполнялись от 4 до 18 тактов. Адресное пространство составляло 64 Кбайт.

В 1978 году Intel выпустила свой первый 16-разрядный процессор 8086 (первый в мире 16 разрядный процессор был выпущен Texas Instruments в 1976 г.). В этом процессоре операционный блок и блок интерфейса работали параллельно и асинхронно, что позволило существенно увеличить производительность кристалла. Блок интерфейса содержал 6-байтную очередь команд – прообраз кэш команд более поздних процессоров. Длина команды составляла от 1 до 6 байт, адресное пространство – 1 Мбайт, а тактовая частота – около 5 МГц.

Процессор 8086 имел ряд архитектурных особенностей. К моменту его создания уже было разработано множество программ для 8-разрядных процессоров и уже стала выкристаллизовываться идея о совместимости системы команд с разработанным ранее программным обеспечением. Чтобы облегчить перенесение программ на новую платформу, Intel обеспечила совместимость системы команд на уровне языка Ассемблера. Двоичные коды команд процессоров 8080 и 8086 не совпадали, но у каждой команды 8080 в процессоре 8086 был прямой аналог. Таким образом, процессор мог работать как с 8-, так и с 16-разрядными данными. Кроме того, память имела сегментную организацию, т.е. адрес состоял из двух частей: сегмента, несущего старшую часть адреса и выровненного на границу 16 байт смещения. Смещение в точности соответствовало адресу в 8-разрядных процессорах, что в совокупности с набором аналогичных регистров позволяло при переносе программ обходиться практически только перетрансляцией. Более того, появилось даже два формата исполняемых файлов: COM, являющийся точным аналогом исполняемого формата CP/M-80, и EXE – “родной” формат MS DOS, позволяющий использовать все адресное пространство. Скорее всего, Intel предполагала, что 8086 окажется временной переходной моделью от 8- к 16-разрядным процессорам, но накопленное программное обеспечение сделало невозможным отказ от принятой системы команд, и половинчатое решение Intel на долгие годы стало (отчасти является и до сих пор) промышленным стандартом и головной болью для разработчиков программного обеспечения. Разрядность процессора не позволяла непосредственно работать с полным 20-разрядным адресом, поэтому программистам для обработки больших массивов данных приходилось в буквальном смысле бороться с сегментированной организацией памяти.


Через некоторое время Intel выпустила 8088 – облегченный вариант 8086, имеющий сокращенную до 8 разрядов шину данных, что позволяло использовать его совместно со сравнительно дешевыми 8-разрядными периферийными устройствами. Именно на этом процессоре и были собраны как IBM PC, так и IBM PC XT.

Именно сегментированная модель памяти позволила ввести в следующей разработке Intel, процессоре 80286, защищенный режим. Новый процессор имел уже 16 Мбайт адресного пространства, тактовую частоту 8 МГц и мог работать в одном из двух режимов: реальном и защищенном. В реальном режиме он в точности имитировал 8086 (за исключением одной неточности: его адресное пространство составляло 1 Мбайт + 64 Кбайт – 16 байт), а в защищенном — в сегментные регистры вместо части физического адреса помещались селекторы (номера сегментов) в полном 16-Мбайтном адресном пространстве. Кроме того, каждый из сегментов имел разграничение прав доступа, что позволяло организовать многозадачную среду с защитой адресных пространств каждой из задач от остальных. Но такая система оказалась неудобной: с одной стороны, она делала невозможной прямое вычисление полного адреса (как в реальном режиме), а с другой – была подвержена неустранимой фрагментации памяти.

Истинный перелом в программировании совершила следующая модель процессора 80386. Это был уже 32-разрядный процессор, сохраняющий совместимость с двумя предыдущими моделями. Во-первых, с увеличением разрядности адреса вдвое адресное пространство возросло в 65 тысяч раз и составило 4 Гбайт, что позволило программистам обращаться ко всей физической памяти компьютера без использования сегментов. Во-вторых, защищенный режим дополнился средствами устранения фрагментации памяти – теперь любой объем, набранный из 4К-байтных страниц, расположенных в памяти как угодно, мог быть виден прикладной программе в виде одного непрерывного куска. Однако программисты еще в течение нескольких лет продолжали использовать 16-разрядные режимы – слишком сложным оказалось наладить взаимодействие 32-разрядной программы с 16-разрядной ОС.

Таким образом, разработка программной модели микропроцессора была практически завершена – последующий прогресс изделий Intel касался в основном оптимизации исполнения команд без изменения программной модели.

Следует сказать, что в отличие от 8-разрядных процессоров в набор поддержки 8086 входил сопроцессор 8087 – устройство, обрабатывающее числа с плавающей точкой. При комплектации компьютера этой микросхемой скорость вычисления математических выражений могла быть увеличена в десятки раз (для 386/387 – в 20-30 раз). При появлении 80286 существующий сопроцессор (8087) был слегка адаптирован, а вот для 80386 – разработан новый сопроцессор с существенным расширением системы команд. Это привело к заметному приросту производительности и практически впервые дало возможность использовать персональный компьютер для решения вычислительных научных задач, то есть в той области, где до этого использовались исключительно мейнфреймы.

Так как компьютеры на 386 процессорах были существенно дороже 286 моделей, Intel так же, как и в случае пары 8086/8088, выпустил вариант процессора с сокращенной вдвое шиной данных: 16 разрядов вместо 32. Одновременно шина адреса была сокращена до 24 разрядов – как у 286, что позволяло использовать до 16 Мбайт оперативной памяти – по тем временам также объем немалый. Но вместо 80388 этот процессор получил название 80386 SX. Одновременно 80386 был переименован в 80386 DX.

Если клоны процессоров Intel в ту пору занимали на рынке столь незначительное место, что их появление не тревожило компанию, то с сопроцессорами дело обстояло несколько иначе. Устройства, выпускаемые сторонними фирмами, показывали более высокую производительность, чем изделия Intel. Развитие сопроцессоров для х86 процессоров шло по двум направлениям: сопроцессоры с системой команд Intel и улучшенной архитектурой (Cyrix) и сопроцессоры с собственной системой команд (Weitek). Последние особенно беспокоили Intel, так как собственные сопроцессоры, построенные по принципу стековой машины, имели принципиальные недостатки по сравнению с memory-mapped регистровой архитектурой Weitek.

Одновременно наметилась еще одна проблема: с одной стороны, совершенствование архитектуры привело к существенному сокращению количества тактов на одну команду, а с другой – частота тактирования процессоров росла существенно быстрее, чем скорость работы запоминающих устройств. В результате интерфейсный блок процессора стал не поспевать за арифметико-логическим устройством. Для преодоления этого недостатка на системных платах для старших моделей 80386 (до 40 МГц) стали устанавливать кэш-память.

Таблица 2. Время выполнения основных команд в тактах

Команды процессора Pentium
AND,SUB,AND,OR,XOR reg, reg ½
AND,SUB,AND,OR,XOR reg, imm ½
AND,SUB,AND,OR,XOR reg, mem >9
AND,SUB,AND,OR,XOR mem, reg >16 3/2
MUL mem16 >124 12-25 13-26
DIV mem16 >150
INC, DEC reg ½
MOV reg, mem >8 ½

Следующий процессор Intel 80486 с программной точки зрения почти ничем не отличался от 80386, но в одном корпусе объединял более быстрое процессорное ядро, кэш-память и усовершенствованное устройство обработки чисел с плавающей точкой (сопроцессор). Такая интеграция позволяла существенно увеличить производительность, особенно в области вычислений, а заодно избавиться от конкурентов, делающих отдельные сопроцессоры.

Процессор вместе с оперативной памятью составляют компьютер. Перенесение части памяти (кэш) на кристалл процессора позволило сделать еще один шаг на пути увеличения производительности – развязать частоту, на которой работал процессор от частоты внешней шины. Процессор, сопроцессор и кэш-память стали работать на одной частоте (66-100 МГц), а шина продолжала работать на другой, более низкой (33 МГц).

Процессор, работающий на удвоенной частоте системной шины, получил суффикс “DX2”, а на утроенной – почему-то “DX4”. Вместе с тем появился облегченный вариант 486, с отключенным блоком обработки чисел с плавающей точкой. Следуя традиции, Intel присвоила ему суффикс “SX” (с удвоением частоты – SX2). Таким образом, во всех изделиях Intel суффикс DX означает “полную” модель процессора, а SX – урезанную. Только для 386 различие заключалось в ширине шины данных и адреса, а для 486 – в наличии арифметического сопроцессора.

Конкуренты повели себя по-разному. AMD стала выпускать 486 процессоры по лицензии Intel, а Cyrix выпустила несколько модификаций собственных процессоров, имеющих в названии цифры 486, но сильно уступающих 486 изделиям Intel по производительности и лишь слегка превосходя 386.

Попытки Intel заставить конкурентов маркировать процессоры как 386 (что в большей степени соответствовало действительности) успехом не увенчались, и она решила присвоить следующему своему процессору имя собственное — Pentium. И надо сказать, процессор этого действительно заслуживал.

Процессор Pentium (Intel 80586) — процессор 5-го поколения — появился в 1993 году. Выполненный по 0,8 мкм CMOS — технологии, он содержал на кристалле площадью 1 кв. дюйм около 3.1 млн. транзисторов (273 контакта на корпусе) и работал на частоте 66 МГц.

Рис 2. Блок-схема процессора Pentium

Главная особенность процессора — суперскалярная архитектура, т.е. наличие в его структуре двух параллельно работающих вычислительных блоков, что позволяет выполнять более одной инструкции одновременно. Во всех современных процессорах применяется конвейерный режим, т.е. считывание команды во время выполнения предыдущей команды. Конвейерная обработка данных применялась уже в ранних процессорах, например в процессоре 486.

В процессоре Pentium конвейерный режим значительно усовершенствован, что обеспечивает более высокую производительность. Частично ее повышение объясняется суперскалярной архитектурой процессора. Он может выполнять две параллельные команды одновременно, поэтому для выборки команд требуются два конвейера — сдвоенный конвейер обеспечивает одновременное выполнение двух команд, при этом одна команда декодируется в конвейере, а следующая команда анализируется на возможность одновременного выполнения. При положительном ответе обе команды передаются в конвейер для одновременного выполнения. Благодаря параллельному выполнению — или спариванию команд — целочисленные команды в каждом конвейере могут выполняться за один такт синхронизации.

Спаривание команд удваивает быстродействие процессора за исключением того факта, что два конвейера не одинаковы. U-конвейер может выполнять любую команду системы команд семейства 86, но V-конвейер выполняет только «простые» команды, которые заранее определены, как команды, допускающие спаривание с другими командами.

Каждый конвейер состоит из пяти ступеней, действующих в порядке:

· предвыборка;

· декодирование команды;

· формирование адреса;

· выполнение;

· запись результата.

Кроме того, резкое повышение производительности процессора обеспечивается следующими его особенностями:

· введение раздельного кэш команд и данных (по 8 Кбайт) — т.е. использование буферной множественно-ассоциативной двухканальной памяти с упреждающей выборкой, что исключает наложение стековых операций и доводит частоту обращения к стеку до 95%. Обращение в кэш поддерживается специальной шиной шириной 256 разрядов;

· эффективный механизм конвейеризации поддерживается применением интеллектуального буфера предсказания ветвления (Branch Target Buffer);

· удвоенная ширина шины данных — 64 разряда соответствует требованиям мультискалярной обработки;

· оптимизированный блок (сопроцессор) десятичных и 3D операций (частичный переход от CISC к RISC–системе);

Кроме этого процессор Pentium имеет режим управления системой (System Management Mode — SMM), который впервые появился в процессоре 386SL. Этот режим обеспечивает в основном экономию энергии, а также некоторые дополнительные возможности. С помощью сигналов на внешних контактах программисты могут использовать режим SMM для управления работой других компонентов компьютера. Например, в режиме SMM можно задействовать средства экономии энергии накопителя на жестком диске, выключая двигатель при продолжительных периодах бездействия и включая его при появлении запроса данных; можно реализовать функции защиты и ряд других системных функций высокого уровня; реализуется почти полное самотестирование процессора.

Pentium может работать намного быстрее своих предшественников, если приложение использует все его специфические свойства и если программный код приложения получен с использованием соответствующих Pentium-оптимизированных компиляторов.

Вскоре Intel сделала заявку на новый для себя рынок сбыта – процессоров для высокопроизводительных серверов и рабочих станций, выпустив Pentium Pro.

Еще в 1974 году (т. е. одновременно с 8080) фирмой IBM был разработан прототип процессора с архитектурой, получившей позднее название RISC. Большинство высокопроизводительных процессоров к моменту создания Pentium Pro имели именно эту архитектуру. В таких системах экономически выгодно для каждой новой разработки писать новое программное обеспечение. Увеличение производительности за счет усовершенствования системы команд окупает разработку немногочисленных программ.

Intel же не могла отказаться от совместимости с разработанной более 10 лет назад системой команд, поэтому ей пришлось применить аппаратное преобразование существующей системы команд в RISC-команды для последующего исполнения их RISC-ядром. Pentium Pro имел и другие архитектурные отличия: двухуровневая кэш-память, работающая на частоте ядра, изменение порядка выполнения команд для их скорейшего прохождения через конвейер и т.д. Но процессор оказался очень дорогим – именно из-за расположенной в корпусе кэш-памяти второго уровня. Если в 80386 была в целом сформирована программная модель процессора, то в Pentium Pro практически закончилось формирование архитектуры, обеспечивающей наивысшую производительность (в расчете на один такт) при заданной системе команд. В последующих модификациях Pentium II и Pentium III ядро осталось без изменений.

Одновременно с разработкой Pentium Pro Intel решила подойти к увеличению производительности с другой стороны, – дополнив систему команд операциями над векторами (SIMD – Single Instruction – Multiple Data). Первым шагом в этом направлении стал Pentium MMX, разработанный на основе Pentium, но оснащенный дополнительным набором инструкций обработки новых 64-разрядных регистров. Каждый из восьми регистров ММХ, в зависимости от потребности, может рассматриваться как восемь 8-разрядных, четыре 16-разрядных или два 32-разрядных слова. Аббревиатура MMX расшифровывается как MultiMedia eXtension, т.е. расширение для обработки мультимедийных данных. Действительно, новые команды оказались очень удобными для обработки звука, спрайтовой графики, шрифтов.

Конкуренты в лице компании AMD вскоре предложили другое расширение набора команд – 3DNow! Оно также предусматривало работу с 64-разрядными регистрами, но теперь их содержимое могло также трактоваться как пара 32-разрядных чисел с плавающей точкой. Именно такие данные использовались при работе с трехмерной графикой, что и нашло свое отражение в названии технологии.

Следующая разработка Intel представляла собой результат “скрещивания” Pentium MMX и Pentium Pro и называлась Pentium II. Правда, с целью удешевления кэш второго уровня был вынесен из корпуса в процессорный картридж, а его частота уменьшена вдвое.

Вскоре Intel поняла, что поспешила снять с производства Pentium MMX, – весь low-end рынок оказался заполненным продукцией конкурентов, в числе которых были IBM, Cyrix, AMD и IDT. Тогда был придуман новый “маневр”: наряду с “полным” Pentium II на рынок был выброшен его несколько сокращенный и удешевленный вариант – Celeron. Так назвали процессор, имеющий то же ядро, что и Pentium II, но без кэш-памяти второго уровня (по сложившейся традиции его следовало бы назвать Pentium II SX). Однако первый блин вышел комом. Системные платы для Pentium II (в отличие от системных плат конкурентов, процессоры которых обладали одноуровневым кэш) не несли на себе кэш-памяти второго уровня, а без нее процессор демонстрировал очень скромную производительность. Однако вскоре Intel исправилась – переход на новую технологию позволил поместить кэш-память второго уровня сокращенного объема (128К, такой объем памяти ставили на 386, для 486-Pentium более характерным объемом является 256К, а для Pentium II – 512К) на самом кристалле. Так как размещенный на кристалле кэш работал на полной частоте процессора, оказалось, что в некоторых приложениях Celeron работает даже быстрее “полного” Pentium II. Однако это продолжалось недолго. Вскоре Pentium II был переведен на частоту внешней шины 100 МГц, тогда как Celeron так и остался на 66, и разрыв в производительности был восстановлен.

Долгое время заполнявшая low-end сегмент рынка компания AMD неожиданно для многих вдруг выпустила процессор, на поверку оказавшийся не только достойным соперником изделию Intel, но и по многим тестам превосходящим его. Новое изделие также получило собственное имя – Athlon. Был расширен и набор дополнительных инструкций, названный 3DNow!2. Следующим шагом стало повторение политики Intel — вскоре за “главным” процессором появился и его вариант, рассчитанный на нижний сегмент рынка – Duron, также с урезанным кэш.

Intel позволила себе ввести 8 дополнительных 128-разрядных регистров, каждый из которых мог быть использован как четырехмерный вектор, состоящий из 32-разрядных чисел с плавающей точкой. Расширение системы команд получило имя SSE. А новый процессор получил название Pentium III, хотя его ядро ничем не отличалось от ядра Pentium II.

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

В течение некоторого времени продукция Intel и AMD находилась примерно на одном уровне, однако в дальнейшем их пути разошлись. Intel начала “гонку за мегагерцами”, выпустив Pentium IV, который существенно уступал в производительности как Pentium III, так и Athlon на одинаковой с ним тактовой частоте, зато допускающий значительное повышение частоты при тех же технологических нормах.

AMD удалось еще больше увеличить количество инструкций, выполняемых за один такт. Одновременно в кристалл был добавлен набор команд SSE и введена температурная блокировка, без которой Athlon и Duron нередко горели от перегрева. Так появился Athlon XP. Чтобы хоть как-то ответить на действия Intel, AMD прибегла к не очень красивому приему – стала маркировать новые процессоры значением рейтинга, а не тактовой частоты. Правда, рейтинг вычислялся при сравнении не с чужим, а с собственным процессором: он показывал, какой частотой должен был бы обладать Athlon, чтобы работать наравне с Athlon XP. Впрочем, результаты тестов свидетельствуют, что Athlon XP оказывается производительнее Pentium IV, даже если последний работает на тактовой частоте выше рейтинга первого. Intel, правда, утверждает, что “низкая производительность Pentium IV связана с отсутствием программ, оптимизированных под него”.

Ядро Pentium около двух третей своей мощности тратит на декодирование инструкций, и только треть – на выполнение. Также дают о себе знать и другие узкие места традиционной архитектуры х86, например очень ограниченное количество регистров. Получается, что сначала оптимизирующий компилятор тратит массу усилий, чтобы уместить все необходимые данные в мизерном количестве регистров, а затем блок декодирования проделывает обратную работу, распределяя содержимое видимых снаружи логических регистров по многочисленным конвейерам. Естественно, безболезненно для производительности это не проходит. Поскольку инструкции выполняются процессором параллельно, то неплохо было бы освободить от работы по распараллеливанию центральный процессор и переложить эту работу на компилятор. А раз так, то требуется переходить на новую систему команд, без чего дальнейший рост производительности оказывается невозможным.

by
Categories:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *