Процессоры

Процессоры начало
Процессоры pentium 2
Современные процессоры

 Центральный процессор ЦП, CPU — англ. central processing unit — центральное вычислительное устройство — исполнитель машинных инструкций, часть аппаратного обеспечения компьютера или программируемого логического контроллера, отвечающая за выполнение арифметических операций, заданных программами операционной системы, и координирующий работу всех устройств компьютера.
Современные ЦП, выполняемые в виде отдельных микросхем (чипов), реализующих все особенности, присущие данного рода устройствам, называют микропроцессорами. С середины 1980-х последние практически вытеснили прочие виды ЦП, вследствие чего термин стал всё чаще и чаще восприниматься как обыкновенный синоним слова «микропроцессор». Тем не менее, это не так: центральные процессорные устройства некоторых суперкомпьютеров даже сегодня представляют собой сложные комплексы больших (БИС) и сверхбольших (СБИС) интегральных схем.
Изначально термин Центральное процессорное устройство описывал специализированный класс логических машин, предназначенных для выполнения сложных компьютерных программ. Вследствие довольно точного соответствия этого назначения функциям существовавших в то время компьютерных процессоров, он естественным образом был перенесён на сами компьютеры. Начало применения термина и его аббревиатуры по отношению к компьютерным системам было положено в 1960-е годы. Устройство, архитектура и реализация процессоров с тех пор неоднократно менялись, однако их основные исполняемые функции остались теми же, что и прежде.

Первый микропроцессор Intel — Intel® 4004 - 1973 год выпуска. 2300 транзисторов, тактовая частота 108 КГц
Процессор Intel 4004 стал первым микропроцессором общего назначения на рынке, компонентом, который инженеры могут приобретать и дополнять программным обеспечением для выполнения различных функций в разнообразных электронных устройствах.
 
Он был представлен публике 15 ноября 1971 года и сразу же вызвал интерес у компьютерного мира. В то время реализация всех функций большой ЭВМ на одном маленьком чипе казалась просто чудом. Правда, его возможности были скромными даже для тех лет. Он мог обрабатывать данные порциями по 4 бита, длина машинной команды составляла 8 бит, что позволило иметь 46 инструкций. Память была раздельной для кодов и данных, менее 1 Кб для данных и 4 Кб для команд. Внутри у него было шестнадцать 4-битных регистров и 4-х уровневый стек.

Первый микропроцессор имел 4-битную архитектуру и состоял всего-навсего из 2300 транзисторов. При этом стандартно он работал на частоте 108 КГц. Техпроцесс по сегодняшним меркам был ужасно "толстым" - целых 10 мкм. Несмотря на то что в компьютерах этот процессор не нашел применения, он все же использовался в калькуляторах Busicom и в различных системах управления (например, уличными светофорами). В 1972 году был выпущен 4040. Он представлял собой улучшенную версию 4004 - главным нововведением была поддержка прерываний. Кроме того, добавилось 14 новых инструкций и глубина стека была увеличена до 8 уровней, а память команд до 8 Кб.
Процессор 8008 Год выпуска 1972. Количество транзисторов 3500.
 
Мощность этого процессора, по сравнению с его предшественником, возросла вдвое. Энтузиаст вычислительных технологий Дон Ланкастер (Don Lancaster) применил процессор 8008 в разработке прототипа персонального компьютера - устройства, названного "гибридом телевизора и пишущей машинки".
Процессор 8080 1974 год. Количество транзисторов: 6000. Тактовая частота достигла 2 МГц.
 
8008 был разработан в апреле 1972 года и стал первым 8-битным микропроцессором. Он был очень похож на 4040: появившиеся 8-битные регистры и увеличенная до 16 Кб память команд - вот, пожалуй, единственные отличия. Стек по-прежнему находился внутри чипа и был ограничен 8 уровнями вложенности. Он все еще использовался как процессор для калькуляторов и терминалов ввода-вывода.


Через полтора года Intel создала гораздо более совершенную версию - 8080. Основные идеи архитектуры были взяты с его предшественника 8008, но внутренняя организация была улучшена настолько, что именно он стал стандартом де-факто для процессоров того времени, а 8008 был вскоре забыт. Новый процессор имел очень развитую систему команд (78 базовых + более 200 их вариаций). Шина данных была 8-битной, а 16-разрядная адресная шина позволила ему прямо адресовать 64 Кб единой памяти, которая перестала физически разделяться на память команд и память данных. С чипом 8080 связано появление стека внешней памяти, то есть стек стал располагаться не внутри процессора, а в оперативной памяти и мог быть довольно большим. Это позволило использовать в программах алгоритмы рекурсии. "Восьмидесятка" обладала семью 8-битными регистрами (именовавшимися A - E, H и L, - причем пары BC, DE и HL могли быть скомбинированы в 16-битные регистры). Кроме того, был улучшен техпроцесс, он составил 6 мкм. Количество транзисторов: 6000. Тактовая частота достигла 2 МГц.
Помимо всего прочего 8080 послужил основой первому персональному компьютеру Альтаир-8800в ыпущенный в 1975 году фирмой MITS "Альтаир". Оперативная память составляла всего 256 байт, правда позже стали продаваться блоки расширенной памяти (от 1 до 4 Кб). Тогда же фирмой Digital Research была написана операционная система CP/M (Control Program for Microcomputers), ставшей на некоторое время стандартом, и прообразом MS-DOS. Между прочим, программисты "Альтаира" умудрялись писать даже игры, а Билл Гейтс и Пол Аллен - написали интерпретатор Бейсика. Стоит упомянуть о процессоре 8085, представленном в марте 1976 года, в котором Intel добавила две новые команды для управления прерываниями и усовершенствовала конструкцию корпуса. В этом процессоре появился сброс в начальное состояние (RESET) и использовался только один источник питания +5В (микропроцессору 8080 требовалось три источника: +12В, +5В и -5В). Одно из применений, которое нашел себе 8085 - электронные весы Toledo. Однако к середине 70-х рынок 8-битных чипов был уже переполнен. По этой причине Intel оставила попытки закрепиться на нем и сделала шаг в сторону 16-битных процессоров.


Процессор 8088 1978 год.
 
В июне 1978 года Intel выпустила процессор 8086, который содержал набор команд под кодовым названием х86. Этот же набор команд до сих пор поддерживается в современных процессорах. Процессор 8086 был полностью 16-разрядным — внутренние регистры и шина данных. Он содержал 29 000 транзисторов и работал на частоте 5 МГц. Благодаря 20-разрядной шине адреса он мог адресовать 1 Мбайт памяти. 
Процессор 8086 стоил довольно дорого, и в 1979 году Intel выпустила "дешевую" версию этого процессора под кодовым названием 8088. Этот процессор отличался от предыдущего 8-разрядной шиной данных. Именно его стали устанавливать в первые компьютеры IBM PC. Оригинальный процессор 8088 содержал 30 000 транзисторов и работал на частоте 5 МГц. 


Процессор 286  
 
В 1982 году фирма Intel сделала крупный шаг в разработке новых идей: ее следующий 16-битный чип стал первой попыткой создать процессор, который мог бы аппаратно реализовывать многозадачность. Для этого был придуман защищенный режим. Ведь основная проблема многозадачности была в том, что любые программы, работавшие под управлением прежних процессоров, имели полную свободу действий - могли по любому адресу памяти записать все что угодно. Операционная система и другие приложения при этом были не защищены: в любой момент глючная программа могла затереть эти места в памяти и компьютер, скорее всего бы просто повис, даже не выдав знакомой таблички о выполнении "недопустимой операции". Были попытки создать операционную систему, которая сама бы контролировала все действия программ. Но для этого пришлось отказаться от компиляции приложений в готовые машинные коды - они стали интерпретируемыми, а производительность упала раз в двадцать. Стало ясно, что без аппаратной акселерации контроля, т. е. без защищенного режима процессора не обойтись.
Суть работы защищенного режима была проста. Все свои команды процессор выполнял точно так же как и в реальном режиме, но программистам пришлось использовать понятие "логического адреса". Логический адрес состоял из 32 бит: селектора (16 бит) и смещения (16 бит). При этом в сегментных регистрах (CS, DS, SS, ES) теперь хранился не сегмент, а селектор. Селектор - это индекс в таблице дескрипторов (рис. 2). Запись в таблице дескрипторов содержала всю необходимую информацию о некотором блоке памяти: его базовый адрес, размер всего блока, его тип (код или данные) и сведения о приоритете программы-владельца. Таким образом, каждый дескриптор полностью описывал один сегмент программы. Размер этого дескриптора был одинаков как для 286-х, так и для 386-х машин - 64 бита или 8 байт, но у 286-го старшие 16 бит не использовались.
Существовала одна глобальная и несколько локальных таблиц. Глобальная присутствовала всегда и хранила информацию о сегментах операционной системы. Локальные таблицы были для всех остальных программ. Управление памятью в защищенном режиме всегда было связано с конкретной операционной системой и ее версией. В OS/2 2.0 каждой программе были доступны глобальная и локальная (своя) таблицы дескрипторов. Всем приложениям в Windows 3.0 давалась одна общая локальная таблица. Система защиты 286-го процессора позволила разбить всю память и программы на 4 типа (кольца защиты - рис. 3). При этом программа работала только со своими блоками. Если программа обращалась к чужому сегменту памяти, то происходило прерывание с выдачей сообщения об ошибке. Ошибка также возникала, если программа пыталась считать или записать в свой собственный сегмент кода.
Теперь о параметрах 286-го чипа. 134 000 транзисторов, техпроцесс 1.5 мкм, 68 контактных ножек, 16-битная шина данных, 24-битная адресная шина (до 16 Мб физической памяти), 19 "видимых" регистров (к 14 регистрам 86-го процессора добавилось еще 5, необходимых для реализации защищенного режима) и 6 "невидимых" (у программиста не было к ним никакого доступа, а нужны они были для эффективной работы самого процессора). Максимальный размер виртуальной памяти (файл подкачки) составил 1008 Мб (хотя на практике "двушка" никогда не имела таких больших дисков). Стартовая частота - 6 МГц, затем были созданы модели с частотами от 10 до 25 МГц. Помимо количественного повышения быстродействия было и качественное: некоторые операции 286-й научился выполнять за меньшое число тактов. Процессор 286 с тактовой частотой 12.5 МГц работал примерно в 6 раз быстрее, чем 8086 с частотой 4.77 МГц. Команда push научилась сохранять в стеке константы. Шины адреса и данных теперь стали раздельными, а не совмещенными на одном множестве ножек. Как и в 8086-м новый процессор имел 6-байтную очередь команд - что-то вроде прообраза будущих конвейеров. Команды в эту очередь загружались в последовательном порядке и параллельно с производимыми вычислениями.
Несмотря на то, что 286-й процессор был окончательно представлен уже в 1982 году, производство компьютеров на его основе началось только в 1984-м. Новые компьютеры стали называться IBM PC AT (Advanced Technology). Выпуск этой модели подхлестнул интерес и к прежней IBM PC, способствуя популяризации архитектуры x86 в целом. Появилось несколько журналов, посвященных исключительно писишкам, магазинов, торгующих программным обеспечением. Словосочетание "персональный компьютер" становилось обыденным и больше не резало слух. Для меня, поклонника группы "Queen", 1984-й год ассоциируется со словами "I Want To Break Free". :-) Что ж, пожалуй, для писишек этот год стал и впрямь "освободительным". От диктата больших машин и насмешек их приверженцев.
К сожалению, защищенный режим 286-го обладал и недостатками:
• Несмотря на возможность адресовать 16 Мб памяти, максимальный размер сегмента остался по-прежнему равным 64 Кб, затрудняя программистам работу с большими массивами данных.
• Режим работы с виртуальной памятью не был толком продуман - отсутствовал "прозрачный" для приложений способ перемещения данных операционной системой из памяти на жесткий диск - для реализации этого программам приходилось прибегать к разным ухищрениям вроде "запирания" и "отпирания" указателей на блок памяти.
• В защищенном режиме отсутствовала совместимость с программами, написанными для реального режима MS-DOS.
• Переход из реального режима в защищенный был односторонним, для обратного перехода требовалась перезагрузка компьютера.
Таким образом, первый многозадачный "блинчик" у Intel получился слегка "комом" и 286-е компьютеры обычно использовались только в качестве быстрых аналогов 86-го. Сумела ли Intel исправить эти ошибки и подарить миру персоналок истинную многозадачность? Да, в следующем процессоре.

Процессор 386  
17 октября 1985 года фирма Intel представила свой первый 32-битный процессор, обладавший уникальным преимуществом: в отличие от своих конкурентов, разработанных к тому времени компанией Motorola, он был аппаратно совместим с огромным парком 86-х и 286-х машин. Это был Intel 80386, сердце легендарной "трешки". 
Обладая полностью 32-битной архитектурой, 386-й процессор адресовал до 4 Гб (232 байт) физической оперативной памяти и до 64 Тб виртуальной. Он состоял из 275 000 транзисторов и изготавливался на основе технологии CHMOS III фирмы Intel, вобравшей в себя быстродействие технологии HMOS и низкое энергопотребление CMOS технологии. Толщина транзисторных элементов, как и у 286-го, составляла 1.5 мкм (в дальнейшем - 1 мкм), а число ножек увеличилось с 68 до 132.
Новый процессор стал мощнее своих предшественников. Умножение двух 16-битных чисел командой MUL R16 выполнялось, в зависимости от числа единичных разрядов, за 9-22 такта. Для сравнения: то же у 286-го срабатывало всегда за 21 такт, а у 86-го аж за 118-133 такта! Математический сопроцессор 80387 не остался в стороне и тоже был оптимизирован - если 287-й выполнял команду извлечение корня FSQRT за 180-186 тактов, то 387-й чип справлялся с этой задачей уже за 122-129 тактов. В среднем количество тактов, необходимых для выполнения команд, уменьшилось в полтора-два раза в сравнении с 286-м и в 3-8 раз в сравнении с оригинальным IBM PC. Просмотр всего содержимого энциклопедии Britannica с применением 386-го занимал 12,5 секунд (286-у нужно было 45). Кроме того, добавилось несколько продвинутых команд сопроцессора, например вычисление синуса, косинуса и логарифмов.
Первые процессоры стали работать с наивысшей частотой, достигнутой к тому времени для 286-го - 16 МГц, затем появилась 20 МГц модель (16 февраля 1987), а к середине 1988 года предел был отодвинут до 25 МГц (4 апреля 1988). В начале 90-х популярность приобрели 33 МГц модели (10 апреля 1989), кстати, все 386-е работали на частоте материнской платы, никаких коэффициентов умножения!
Набор регистров в процессоре был существенно изменен - почти все 16-битные регистры были заменены их 32-битными аналогами. Новые регистры именовались как и прежде, только с приставкой "E" (Extended) в начале слова. Так, вместо регистров общего назначения AX, BX, CX, DX появились регистры EAX, EBX, ECX, EDX, младшие части которых (левые 16 бит) использовались 86/286-инструкциями в качестве прежних регистров. Вместо 16-битных IP (указатель следующей инструкции) и FLAGS (флаги процессора) - соответственно 32-битные регистры EIP и EFLAGS. Вместо SI/DI (индексы источника/назначения) - ESI/EDI. Словом, почти все прежние регистры заменились новыми, младшая часть которых использовалась по-старому. В новом процессоре 16-битными остались только сегментные регистры (CS, SS, DS, ES) и регистр локальной таблицы дескрипторов (LDTR). Кстати, к сегментным регистрам добавилась парочка новых, поначалу редко используемых - GS и FS. Напомню, что регистр CS указывает на начало сегмента кодов (исполняемый код программы), регистр SS - на "дно" стека, а остальные 4 регистра (DS, ES, GS, FS) - на разные сегменты данных (там хранятся переменные, массивы, в общем, любые данные программы).
Между прочим Intel надолго осталась верна набору регистров 386-го, включая сопроцессор, и при создании следующих моделей (486, Pentium) ограничилась несущественным расширением (TR3-TR5 регистры, появившиеся в 486-м, управляющий регистр CR4, появившийся в Pentium). Все эти дополнительные регистры предназначались не столько для программ-приложений, сколько для операционных систем и средств отладки, т. е. выгоды от них в играх и Windows-приложениях не было никакой. Следующее увеличение числа регистров, полезных для самих приложений, произойдет, по сути дела, только в процессоре Pentium III (1999).
Защищенный режим 386-го был существенно доработан. Именно тогда, 16 лет назад, Intel заложила фундамент успеха Windows 95. Модель 286-го в целом была сохранена, но добавилось три очень важных аспекта: сколь угодно большой размер сегмента, страничный режим адресации (Page Addressing) и режим виртуального 8086 (Virtual 8086 Mode). Все эти аспекты используются операционными системами Windows 95/NT и без них они работать не смогут. Кроме того, 386-й "научился" возвращаться обратно из защищенного режима в реальный без перезагрузки компьютера (в 286-м переход в защищенный режим был односторонним).
Снятие ограничения на размер сегмента (вообще-то он ограничен четырьмя гигабайтами, но по-моему для компьютерного ОЗУ это почти бесконечность) тесно связано со страничной организацией памяти. Без использования страниц ограничение на размер остается, правда уже не в 64 Кб как у 86/286, а в 1 Мб. Это объясняется тем, что для указания размера сегмента в таблице дескрипторов отведено 20 бит (у 286-го 16 бит). 220 дает нам 1 Мб комбинаций. Но в дескрипторе сегмента 386-й машины появился очень интересный бит - бит гранулярности. При его включении процессор начинает понимать размер сегмента не в байтах, а в страницах по 4 Кб (4096 байт). Минимальный размер сегмента в этом случае будет равен 4 Кб (1 * 4 Кб), а максимальный - 4 Гб (1 Мб * 4 Кб).
Ранее я говорил о принципах работы программ в защищенном режиме 286-го процессора. Не стоит заново все пересказывать, детали вы можете увидеть в предыдущей части, приведу только главные отличия. Вначале у трешки все почти так же - только смещение и базовый адрес в дескрипторе стали 32-битными, соответственно и результат их суммы - 32-битное число. Единственное что осталось 16-битным - селектор. Но вот дальше... Сумма базового адреса и смещения еще не физический адрес! Старшие 10 бит этой суммы, которая называется линейным адресом, задают индекс таблицы страниц в каталоге таблиц, следующие 10 бит - индекс страницы в найденной таблице страниц, оставшиеся 12 бит - смещение относительно начала этой страницы. И только когда процессор найдет в каталоге нужную таблицу, а в ней нужную страницу (потерпите, немного осталось :) и прибавит к полученному адресу смещение, он получит физический адрес ячейки памяти.
Мудрено? Для чего такие сложности? Для реализации замечательной вещи: теперь процессор мог динамически менять расположение данных в памяти при постоянном логическом адресе! Программа, например WinWord, могла работать со своими документами и даже не подозревать, что секунду назад данные физически были в этих ячейках памяти, а сейчас процессор переместил их в другие (ему могла приказать операционная система - Windows частенько "перетасовывает" содержимое памяти). Логические адреса, с которыми оперирует WinWord, остаются постоянными! Операционная система может переместить часть данных в файл подкачки, сбросив при этом "бит присутствия" в дескрипторе сегмента. Если программа захочет обратиться к засвопленной странице, то процессор по нулевому значению бита присутствия обнаружит ее отсутствие в памяти и выработает соответствующее прерывание. Святая обязанность любой операционной системы на него среагировать и восстановить эти данные в какой-нибудь области памяти, после чего возобновить работу прерванной программы. При этом логические адреса не меняются, в этом вся соль!
С режимом виртуального 8086 все просто - он наконец-то позволил в защищенном режиме запускать программы, написанные для реального режима, т. е. для MS-DOS. При этом в многозадачной среде любое количество MS-DOS приложений могло работать одновременно на одном компьютере, причем каждая программка думала, что она работает в одиночку, т. е. процессор обслуживает только ее. При запуске любой MS-DOS программы Windows 95/98 создает для нее виртуальную машину MS-DOS (DOS Virtual Machine) - задачу, использующую режим виртуального 8086. Кстати этот режим не запрещает DOS-приложениям использовать новые 32-битные регистры 386-го, за исключением тех, что необходимы для корректной работы самой системы защиты процессора и операционной системы.
Процессор 486  
 
10 апреля 1989 года Intel представила свой новый процессор - i486. 
Что же послужило причиной такого прорыва, превратившего очередной, по сути, бизнес-процессор в предвестника эры мультимедиа? Я постараюсь ответить на это и рассказать о ключевых достоинствах четверки. Тех "изюминках", которые отличают ее от предшественника, 386-го процессора. Дело в том, что в поисках способа повышения производительности наиболее передового в те годы 386DX-33, инженеры Intel столкнулись с серьезными проблемами. Традиционный путь уже не годился. Существовавшая в конце 80-х технология производства чипов не позволяла плотнее размещать транзисторы на кристалле. Это создавало трудности с теплоотводом при повышении частоты. Еще труднее было повысить частоту материнской платы. Нужны были качественные (и очень дорогие) модули памяти, чтобы работа на частотах свыше 33 МГц была стабильной. К примеру, самые дешевые мегабайтные модули памяти (SIMM 30-pin 100-ns) стоили тогда порядка $400. С другой стороны, оставаясь в рамках традиционной CISC-архитектуры, было трудно уменьшать количество тактов, необходимых для выполнения той или иной операции.
Эти и другие проблемы не давали двигаться обычным путем, просто наращивая частоту процессора и материнской платы. Но решения были найдены. Коротко их можно описать шестью словами: кэш, конвейер, встроенный сопроцессор, коэффициент умножения. Эти термины на 95% описывают достоинства 486-го. Остальные 5% это пара-тройка мелких нововведений, о которых я упомяну позднее. Поехали?
В 486-м процессоре появился внутренний кэш объемом 8 Кб, единый для данных и инструкций. Кэш имел 4-канальную наборно-ассоциативную архитектуру и работал на уровне физических адресов памяти. Он содержал 128 наборов по 4 строки размером по 16 байт. Кэш умел работать только со строками, и если процессор требовал какой-нибудь байт, отсутствующий в кэше, то кэш-контроллер загружал из ОЗУ всю 16-байтную строку, содержащую необходимый байт. Выбор строки для замещения производился по алгоритму "псевдо-LRU", для этого каждому набору строк отводилось по 3 бита статистики использования. Алгоритм LRU (Least Recently Used) основан на поиске элемента, к которому дольше всего не было обращений. При каждом обращении к строке кэш-контроллер увеличивал на 1 соответствующий счетчик LRU. Приставка "псевдо" означает лишь несовершенство механизма работы, ведь под счетчик отводилось всего 3 бита, что дает нам 8 положений счетчика (23). После 8-го обращения к строке счетчик обнулится и соответствующая строка из самой "необходимой" станет самой "не необходимой" и будет прямым кандидатом на замещение. Кэш первых 486-х работал в режиме Write Through (сквозная запись). В этом случае при записи данных тратилось дополнительное время на их запись во внешнюю память (даже если они присутствовали в кэше). Эта политика напоминает работу дискового кэша SmartDrive с настройками по умолчанию, когда ускоряется только чтение данных, а запись не ускоряется. Последовавшие процессоры (некоторые 486DX2 и все 486DX4) позволяли переключаться на политику Write Back. В этом варианте запись данных, если их старая копия уже присутствовала в кэше, производилась только в кэш, а запись в ОЗУ откладывалась.
Процессор i486 мог использовать и внешний кэш (вне микросхемы процессора). Именно 486-у мы обязаны появлением 2-х уровнего кэширования: кэш, интегрированный в ядро процессора, стал называться кэшем первого уровня (L1), а кэш наружный, находящийся на материнской плате, - кэшем второго уровня (L2). Очевидно, что кэш первого уровня функционирует быстрее второго. Даже если они оба работают на частоте процессора, потому что при чтении данных из кэша L2 процессор все равно вынужден делать несколько пустых тактов, хотя и меньше, чем при чтении из ОЗУ. Объем кэша L2 в зависимости от материнской платы составлял от 256 до 512 Кб. В системных платах 386-х моделей наружный кэш обычно не превышал 128 Кб (типичный объем - 64 Кб). В марте 1994-го Intel, выпустив 486DX4, увеличила объем кэша L1 до 16 Кб (он по-прежнему оставался общим для данных и для команд).
Что отрицательного несло в себе появление внутреннего кэша? Резкое увеличение числа элементов (486-й стал первым микропроцессором, перешагнувшим некий рубеж, - он содержал более миллиона транзисторов, и около половины их приходилось на долю кэша) повлекло за собой сильный процент брака, и как следствие высокие цены. Не только у Intel, но и у конкурентов (AMD, Cyrix). И лишь появление Pentium'а привело к падению цен на 486-е. Вторым минусом было увеличение энергопотребления и повышение температуры процессора. Именно это вынудило Intel применить новый подход - впервые на процессоры стали устанавливать радиаторы с активным охлаждением.
Конвейер - это специальное устройство, входящее в состав процессора, и реализующее такой метод обработки команд, при котором их выполнение разбивается на несколько этапов. В чем преимущество? Представьте себе часовой завод, на котором работает только один мастер, зато на все руки. Он сможет за час из пружинок и винтиков собрать работающие часы. Это и будет одна машинная команда, выполненная в течение часа. А теперь представьте, что вместо одного мастера - 5 узких специалистов. Никто из них не в состоянии в одиночку собрать часы. Но первый умеет вытачивать корпус, второй - стрелки, третий - нанизывать детали на ось, и т. д. Главное, что они работают параллельно и без задержек: сделал детальку, передал другому, берись за следующую. К тому же выполнять простые операции легче, а значит быстрее, чем сложные. В итоге эти спецы за час совместной работы изготовят не 5, а 10 или даже более часов (в нашем случае - машинных команд). Этот принцип не нов и был открыт еще пару веков назад - вспомните мануфактуры, расцвет массового производства. Помимо ускорения вычислений конвейеризация дает еще одно преимущество: каждый мини-блок, выполняющий часть операции, представляет собой менее сложное устройство, чем один исполнительный супер-блок, а значит он менее чувствителен к повышению частоты. Разбиение сложного вычислительного модуля на мелкие позволяет эффективнее разгонять процессор (это особенно актуально в свете нынешнего Pentium 4 с его 20-ступенчатым конвейером).
Конвейер процессора i486 имел 5 ступеней. Не буду описывать назначение каждой ступени - на рисунке все показано. Справедливости ради стоит отметить, что Intel не изобретала конвейеры, по крайней мере, не была пионером в этой области: первые процессоры с полностью конвейеризированной архитектурой появились раньше. Например, процессор Z-80 с 6-ступенчатым конвейером был анонсирован еще в начале 1986-го.
Процессор pentium  
Это был первый процессор с двухконвейерной структурой. Носил кодовое имя P5. Имел тактовые частоты 60 и 66 МГц. Частота шины совпадала с тактовой частотой процессора. Процессоры содержали более 3.1 млн. транзисторов и выпускались по технологии 0.80 мкм, а позже – 0.60 мкм. Размер кэша первого уровня L1 составлял 16 Кб - 8 Кб на данные и 8 Кб на инструкции, в то время как кэш второго уровня размещался на материнской плате и мог иметь объем до 1 Мб. Процессор выпускался для разъема Socket 4.
Через год, в марте 1994 года Intel выпускает второе поколение Pentium (ядро P54).
Процессор имел частоты от 75 до 200 МГц. Частота шины 50-66 МГц. Размер кэша L1 остался прежним – 16 Кб (8 Кб на данные и 8 Кб на инструкции). Кэш второго уровня остался на материнской плате, и мог иметь объем до 1 Мб. При производстве этого процессора Intel применяет более совершенный техпроцесс 0.50 мкм. Процессор содержал более 3.3 млн. транзисторов. Выпускался для разъема Socket 5, позднее Socket 7. 
В июне 1989 года Винод Дэм, инженер фирмы Intel, делал первые "наброски" Pentium'а, он и не подозревал, насколько сложной окажется предстоящая работа и что именно этот продукт станет одним из главных достижений Intel. Вскоре проект был разбит на несколько этапов. Для тестирования была придумана технология, позволившая имитировать функционирование еще не существовавшего процессора. Достигали это применением специальных устройств-блоков, объединенных на 14 платах с помощью кабелей. Когда первое тестирование было закончено, а основные ошибки - исправлены, макет начал работать. В разработке и тестирования Pentium'а принимали участие не только специалисты Intel, но и сторонние разработчики, что, наверное, немало способствовало общему успеху. В конце 1991 года макет процессора был завершен, и инженеры смогли запустить на нем программное обеспечение. Естественно, ни о какой скорости пока не было и речи: макет функционировал в полном объеме, но не быстрее калькулятора! Работа продолжалась, и когда все архитектурные тонкости уже определились, настала очередь проектировщиков: они принялись под микроскопом изучать топологию процессора и прохождение сигналов с целью ее оптимизации. Эта работа была завершена где-то к февралю 1992 года, после чего началось тестирование опытной партии. В апреле 1992 года наконец-то приняли решение о промышленном освоении. Индустриальной базой стала 5-я Орегонская фабрика, лучшая на тот момент. Примерно через год более 3 млн. транзисторов окончательно перенесли на шаблоны и запустили цикл производства. 4-х летняя история создания процессора Pentium завершилось его презентацией 22 марта 1993 года.
 Помимо традиционного повышения тактовой частоты и сокращения времени (числа тактов) выполнения инструкций, есть одно свойство, наиболее качественно отличающее его от предшественника.

Новая микросхема стала первым процессором Intel, способным выполнять за такт СРАЗУ ДВЕ инструкции. Архитектура, при которой процессор имеет несколько конвейеров, получила название "суперскалярной", в противовес старой, одноконвейерной, т.е. "скалярной" архитектуре.

Pentium имеет 2 целочисленных конвейера . Правда, они не равноценны: главным считается u-конвейер, он поддерживает весь набор инструкций и работает на полную катушку. v-конвейер имеет некоторые ограничения и лишь помогает основному. Он умеет обрабатывать только "простые" инструкции - целочисленная арифметика, логические команды, команды перехода... Вдобавок, он не может работать, если его действия зависят от результата выполнения команды, идущей по u-конвейеру. Условий, по которым определяется возможность "спаривания" инструкций, около десяти (если интересно - пишите, я пришлю). В моменты, не удовлетворяющие этим правилами, v-конвейер не берет новых команд, лишь продвигая по этапам те, за выполнение которых он уже взялся. Затем он простаивает, ожидая благоприятной ситуации. В остальных случаях процессор одновременно выполняет сразу 2 инструкции, точнее, учитывая конвейерную архитектуру, правильней сказать: "на различных стадиях выполнения одновременно продвигаются 2 потока инструкций".
У конвейерной архитектуры одно слабое место: при выполнении команд, чтобы выбрать из памяти следующую, иногда нужно знать результат выполнения текущей. Дело в том, что некоторые команды (например, условного перехода) нарушают порядок выполнения инструкций, приказывая процессору "перепрыгнуть" не на следующую по порядку команду, а на какую-то другую. В любой мало-мальски сложной программе это встречается сплошь и рядом. В простейшем случае (как в 486-м) конвейер будет ждать выполнения команды, определяющей адрес следующей инструкции, и лишь затем приступит к выборке. В Pentium же появилось интересное новшество branch prediction - предсказание переходов. Процессор запоминает статистику последних 256 переходов и на ее основе выдает предположение о следующем. Если переход был предсказан верно, удается избежать простоя, если нет - конвейер полностью очищается и начинает заполняться снова (на что тратится время).
Суперскалярность - особенность №1 микропроцессоров 5-го поколения. Она присуща не только Pentium, но и AMD K5, Cyrix M1, словом, всем его современникам. Кстати, помимо этой архитектуры, у Pentium еще один плюс: ступени D2 обоих конвейеров обзавелись многоканальным сумматором. Задержки, возникавшие в 486-м при декодировании сложных многокомпонентных адресов (например, "EBX + ESI + смещение"), наконец-то ушли в прошлое.
2-е по значимости отличие Pentium от 486-го - быстрый сопроцессор (FPU). Именно Pentium вылечил у некоторых программистов фобию к числам с "плавучкой". Помнится, раньше в Фидо ходила куча советов, как рассчитать трехмерную сцену, обходясь только целыми числами - получались вещественные с "фиксированной точкой". Сказывалось на точности, но для графики 320x200 вполне хватало...
С появлением Pentium стало очевидным: нет смысла соревноваться с оптимизированным сопроцессором. В результате появился целый ряд игр (Quake, MDK), сотворивших революцию в игровом мире. Благодаря новому FPU, мощность Pentium'а оказалась достаточной для показа Video CD без приобретения MPEG-карт, стоящих сотни долларов. За это отдельное спасибо Xing MPEG Player'у - родоначальнику чисто "софтового" проигрывания видео. А разве плохо слушать mp3, занимаясь при этом чем-то другим - гуляя в Интернете или набирая текст? На быстрой "четверке" mp3-файлы тоже игрались, но при работе в Word или Explorer звук начинал заикаться.
Причина ускорения сопроцессора кроется в его новой конвейерной архитектуре. Инструкции FPU сначала проходят по u-конвейеру до ступени D2 включительно, после чего сворачивают на ступени X1, X2 и WF конвейера FPU (на схеме). Причем инструкции на целочисленном конвейере могут продвигаться во время просчета длительных инструкций FPU - именно с учетом этого был оптимизирован Quake. Почему конвейер сопроцессора сам не выбирает инструкции? В основном из-за вопросов совместимости, а отчасти - чтобы не заниматься проблемами адресации в защищенном режиме, эту сложную рутину делает основной процессор.
Другая причина ускорения, пусть и не столь важная, - увеличение шины данных до 64 бит. Внешняя шина данных - это магистраль, передающая информацию между процессором и памятью. Особо заметно увеличение шины проявилось в серьезных программах, наподобие AutoCAD или Corel Draw. Почему? Небольшое отступление: в играх и MPEG-плеерах, где главное - скорость, процессор, как правило, работает с числами одинарной точности (32 бит). Это разумный компромисс между скоростью и качеством. Winamp при декодировании mp3 обходится 32-битными числами, что дает, по сравнению с 64-битными, меньшее на 30-40% потребление процессора. А разницу в звучании с NAD'ом (mp3-плеер, применяет 64-битную арифметику) замечают только завзятые аудиофилы. Но то, что оптимально в играх и мультимедиа, может быть неприемлемо в конструкторском или дизайнерском деле. В этих программах обычно применяют вещественные числа двойной точности (64 бит), иногда - даже повышенной (80 бит). Из-за 32-битной шины 486-го их приходилось загружать из памяти за несколько тактов. Pentium же, благодаря новой шине, обычно справляется за один такт. В итоге, пропускная способность была заметно увеличена - 528 Мб/с для Pentium-66 по сравнению со 160 Мб/с для 486DX-50. Из отрицательных "бонусов" 64-битной шины назову только один - потребность в специальной организации памяти.
С кэшем ситуация неоднозначная. Разумеется, он стал быстрее (в основном, благодаря объему), но появились и минусы. Сначала о главном: кэш L1 в Pentium стал раздельным и увеличился с 8 до 16 Кб - по 8 Кб на кэш команд и кэш данных. Оба кэша поддерживают политику отложенной записи (Write Back), хотя в кэш команд запись обычно не производится.
По поводу разделения кэша не могу сказать, что это однозначно хорошо. Не случайно процессоры M1 фирмы Cyrix имели общий кэш L1 и в задачах, не требующих интенсивных FPU-вычислений, показывали отличную производительность. Я могу привести примеры, когда по скорости выигрывает тот или иной вариант кэша, если интересно, к тому же его разделение приводит к росту числа транзисторов. Скорее всего, это разделение в Pentium было мотивировано упрощением схем некоторых ступеней конвейеров (ступени PF и WB).
Еще один минус: строки кэша стали 32-байтными (в 486-м строки 16-байтные). С одной стороны, это снизило число "служебных" транзисторов, а с другой - привело к небольшому падению эффективности. Напомню: все данные в кэше хранятся в строках, и в одной строке могут находиться только смежные данные, т. е. имеющие близкостоящие друг от друга адреса. Каждая строка имеет свойство "достоверности". По нему кэш-контроллер определяет, можно использовать содержащиеся в ней данные или нет. Строка не может быть "частично достоверной", она либо верна целиком, либо неверна совсем. Строка заполняется данными из памяти полностью, даже если процессору не хватает в кэше всего одного байта.
В Pentium появилось несколько новых инструкций. Перечислю: распознавание семейства и модели процессора - CPUID, сравнение и обмен сразу 8 байтов - CMPXCHG8B, чтение/запись из/в регистр, специфичный для конкретной модели (Model Specific Register) - RDMSR и WRMSR. И еще одна, RDTSC - потрясная инструкция - возвращает в EDX:EAX текущее значение внутреннего счетчика, который увеличивается на единицу при каждом цикле процессора (т.е. эта команда дает количество тактов, сделанных процессором с момента включения). При 133 МГц этого счетчика хватает на 4400 лет...
Кое-что из несущественного для домашних персоналок: в процессоре была введена трассировка инструкций и мониторинг производительности, реализован интерфейс построения двухпроцессорных систем с симметричной архитектурой (начиная со 2-го поколения Pentium, 1-е поколение позволяло строить лишь функционально-избыточную систему). Введена возможность оперирования страницами размером в 4 Мб. Расширен режим виртуального 8086 - введена виртуализация флага прерываний.
Процессор pentium pro
 
1 ноября 1995 года, выпуском процессора Pentium PRO (кодовое имя P6), начался отсчет шестого поколения процессоров. От предыдущего поколения их отличало применение технологии динамического исполнения - изменения порядка исполнения инструкций и архитектура двойной независимой шины. Добавилась еще одна шина, которая соединяет процессор с кэшем второго уровня, который встроен в ядро. В результате этого впервые был применен кэш L2, работающий на частоте процессора. Первоначальный размер кэша L2 – 256 Кб; к 18 августа 1997 году достиг 1024 Кб. Максимальный размер – 2048 Кб. Кэш первого уровня остался прежним: 8 Кб + 8 Кб. Имел тактовые частоты 150, 166, 180, 200 МГц. 
Процессоры Pentium PRO выпускались в корпусах SPGA (Staggered Pin Grid Array) с матрицей штырьковых выводов. В одном корпусе было установлено два кристалла – ядро процессора и кэш второго уровня собственного изготовления. Устанавливался в Socket 8 с возможностью объединить до 4-х процессоров для симметричной мультипроцессорной обработки. Шина 60-66 МГц. При 32-битных вычислениях и многозадачности значительно превосходил по производительности Pentium, но в 16-битных приложениях проигрывал ему. Процессор 150 МГц производился с использованием техпроцесса 0.60 мкм, более старшие модели – 0.35 мкм. Pentium PRO состоял из более чем 5.5 млн. транзисторов, плюс от 15.5 до 31 млн. включал кэш. Pentium MMX
8 января 1997 года произошел выпуск процессора Pentium w/MMX technology (кодовое имя P55), являющийся продолжением линейки Pentium, в котором впервые был реализован новый набор из 57 команд MMX (Multi Media eXtention), существенно увеличивающий производительность компьютера в мультимедиа-приложениях (от 10 до 60 %, в зависимости от оптимизации).
Выпускался с тактовыми частотами 166, 200 и 233 МГц. Работал на 66 МГц шине. По сравнению с Pentium, был вдвое увеличен размер кэша первого уровня, который составил 32 Кб. Как и в предыдущих версиях был применен раздельный кэш: 16 Кб на данные и 16 Кб на инструкции. Стоит сказать, что такое разделение (и размер) кэша L1 стало своеобразным стандартом на долгие годы. Кэш второго уровня, как и у предшественника, остался на материнской плате, и мог иметь объем до 1 Мб. Процессоры выпускались по 0.35 мкм технологии, и состояли из 4.5 млн. транзисторов. Рассчитан на Socket 7.

далее>>>

 

?????? ???????????