7 лет назад 23 февраля 2017 в 0:46 1824

Себастьян Роше

Обещанная краткая прелюдия к истории х86 порядком затянулась, зато теперь наконец можно с полным знанием background’a изучить первого непосредственного предка тех процессоров, которые стоят в наших домашних машинах. Intel 8086 был совсем не революционным чипом, готовили его недолго, и в основе своей он мало отличался от ближайшего предшественника, 8085-го, сохранив совместимость с ним на уровне ассемблера: код для одного процессора легко конвертировался в код для другого без ручной правки. Набор инструкций без изменений достался ему от Intel 8080, а следовательно от Intel 8008. Осознайте этот факт, друзья: незыблемому стандарту х86 уже 35 лет (и создан он, кстати, мало кому известной ныне компанией Datapoint для компьютеров-терминалов).

Тем не менее, будучи совершенно обыденным на общем фоне, Intel 8086, вышедший в далеком 1978 году, первым из интеловского семейства перешел на «полные 16 бит». 8080-й был частично 16-битным процессором: работал с 16-битными числами, имел 16-битную адресацию памяти, и регистры у него, будучи 8-битными, могли объединяться в 16-битные пары. Оставалось сделать немного — добавить 16-битные вычислительные устройства, что и произошло с Intel 8086. Вместе с ними пришли и другие преобразования — четыре 16-битных регистра общего назначения, которые могли при необходимости разделиться на восемь 8-битных регистров. Легко понять, что со сменой формата вычислений у процессора осталось почти в два раза меньше регистров: у 8080-го было семь 8-битных регистров, которых ему вполне хватало, ибо он сам еще был 8-битным процессором. Однако это было некритично, ибо 16-битному софту еще предстояло пробить себе дорогу. Вот следующему процессору Intel, оснащенному четырьмя регистрами, их уже оказалось маловато. Кроме того, регистры зачастую использовались не самым оптимальным образом, т. к. некоторые типы инструкций неявно подразумевали работу с конкретными регистрами. В результате создавать быстрый код для 8086-го было задачей потруднее, чем для других современных ему процессоров, но все же легче, чем для 8085-го.

Новенький Intel 8086 обладал весьма хитроумной схемой взаимодействия с памятью. Объема адресного пространства в 64 Кбайт, который давала 16-битная адресация, Intel уже оказалось недостаточно, и ее расширили до 20 бит, сделав возможной работу с целым мегабайтом адресов, из которых 640 Кбайт были доступны в качестве RAM. Но 20-битные адреса не лезли в 16-битные регистры, которые Intel не стала расширять, и к дополнительному объему пришлось подбираться окольным путем: процессор «смотрел» на все пространство адресов через «окно» размером 64 Кбайт — так называемый сегмент. А конкретный адрес в пределах сегмента определялся смещением, то есть расстоянием ячейки относительно края «окна». При необходимости сегмент менялся, давая доступ к другому «окну» с другим «пейзажем». В целом 20-битный физический адрес генерировался следующим способом: содержимое 16-битного сегментного регистра сдвигалось влево на четыре бита, и адрес смещения, находящийся в соответствующем регистре, прибавлялся к нему. Эта схема выглядела разумно, и для программирования на ассемблере была вполне приемлема и даже изящна, но во всех остальных случаях оказалась чрезвычайно неудобной, так что программисты зачастую ограничивались простой 16-битной адресацией, махнув рукой на дополнительную память. Если бы не IBM, Intel хорошо аукнулся бы этот факт. Но впоследствии, когда расширенный объем оперативки стал насущной необходимостью, 20-битная адресация поневоле прижилась и даже после перехода на 32 бита широко использовалась, сохраняя совместимость со старыми «осями» и приложениями. «Реальный режим», в котором любой современный х86-совместимый процессор начинает свою работу при запуске, — это она и есть.

Все эти нововведения стоили Intel дополнительных транзисторов, внедренных в кристалл: Intel 8086 увеличился по сравнению с 8085-м почти в пять раз — до 29 000 транзисторов — и производиться стал по процессу 3 мкм. Оригинальную частоту установили на отметке в 5 МГц. CPU показал весьма крепкую производительность, охотно закупался компьютерными брендами и породил ряд лицензированных и неофициальных клонов, включая советский чип К1810ВМ86, — что-что, а реверс-инжиниринг у нас всегда был на высоте, говорят даже, что на недосягаемой. Но путевку в будущее архитектуре х86 дал, конечно же, IBM PC.

Задумывая эту судьбоносную машину, руководители компании IBM глядели в сторону чипа Motorola 68000, вышедшего примерно в то же время, но выбор остановили на Intel 8088 — 8086-м процессоре с урезанной до 8 бит шиной памяти. У IBM уже были права на производство 8086-го семейства, полученные от Intel в обмен на технологию «пузырьковой» (пленочной) памяти, и электронная обвязка для Intel 8085, с которой 8088-й за счет урезания шины был полностью совместим, так что «Мотороле» дали безвременную отставку. Тогда-то Intel и прибегла к помощи AMD в производстве 8088-го для Голубого гиганта.

Успех 8086-й серии настолько впечатлил «счастливых родителей», что его решили немедленно повторить. Поэтому уже в 1982 году с перевалочным пунктом в виде 80186 / 80188-го процессора вышла незабвенная «двушка» — процессор Intel 80286. Что же касается «единицы», то она отличалась от 8086-го лишь аппаратным ускорением ряда инструкций, интеграцией в кристалл некоторой обслуживающей логики и увеличенной до 6 МГц частотой. Вне встраиваемых систем ее мало кто видел. «Двушка» же принесла, пожалуй, самый большой прирост производительности на такт процессора за всю историю архитектуры х86 — более чем в два раза — при том, что в первых релизах работала на сопоставимых с «единицей» частотах в 6 и 8 МГц. Число транзисторов тоже радикально увеличилось — с 29 000 до 134 000 штук, техпроцесс уменьшился до 1,5 мкм (видите, как тогда он скакал?), и камень перебрался из тесной 40-контактной упаковки на подложку с 68 «ногами».

Но самым интересным новшеством нового чипа стала усложненная адресация памяти — так называемый защищенный режим. Его сущность состоит вот в чем. В реальном режиме как 8086-го, так и 80286-го процессора один 16-битный регистр задавал адрес сегмента, а другой — адрес смешения. Это осталось без изменений. Но при работе в защищенном режиме сегментный регистр задавал уже не конкретное 64-килобайтное «окно», а ячейку в специальной таблице — сегментном дескрипторе. В ней и был записан адрес реального регистра, теперь 24-битный, к которому прибавлялось смещение. Как нетрудно посчитать, в таком случае адресное пространство разрасталось до 16 Мбайт (2 в 24-й степени байт), хотя отдельный сегмент был по-прежнему ограничен 16 Кбайт, т. к. смешение задавалось 16-битным числом.

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

Более того, защищенный режим не зря называется именно так. Для того чтобы программы не совали шаловливые ручки туда, куда не следует, адреса сегментов снабжались специальными метками, регулировавшими действия, которые с ними можно или нельзя совершать, а программы — четырьмя уровнями привилегий на эти действия. Все это хозяйство, разумеется, требовало поддержки со стороны операционной системы и принесло в мир настольных компьютеров технологии, ранее характерные лишь для мейнфреймов. Но всего один недочет поставил на защищенном режиме Intel 286 крест: переключившись в него из реального режима, процессор не мог вернуться обратно без системного сброса или хитроумных цепочек инструкций, выдуманных немногими шибко умными программистами. А так как все старые программы предназначались для реального режима и не могли работать в защищенном, то разработчики не спешили на него переходить. Сам Билл Гейтс (Bill Gates) заклеймил за это 286-й как «brain dead chip». Тем не менее в качестве очень быстрого 8086-го «двушка» была принята на ура производителями, в том числе такой полезной для Intel фирмой, как IBM, для которой AMD снова охотно выступила в качестве второго поставщика вычислительных чипов.

Вскоре Intel, испытывая жестокую конкуренцию с азиатами, значительно сократила производство памяти и окончательно переориентировалась на разработку центральных процессоров. Первым плодом новой стратегии стал всем известный и еще тянущий свою лямку кое в каких старых машинах камень 80386, он же i386 (хотя что уж там говорить, иногда можно встретить и работающую «двушку»), Именно он, выйдя в 1986 году, открыл эру полной обратной совместимости на базовом уровне между всеми следующими процами х86, формально продолжавшуюся вплоть до массового появления 64-разрядных камней. После такого вступления даже человеку, впервые сейчас узнавшему об i386, понятно, какое событие произошло вместе с выходом новинки, — это было пришествие эры 32-битных вычислений. До 32 бит расширились и регистры, и вычислительные устройства, и шина памяти. Тем не менее, совместимость с 16-битным и даже с 8-битным софтом осталась в неприкосновенности, ибо многие регистры могли делиться пополам, а 16-битные половины регистров общего назначения, которых стало восемь, — еще раз надвое, чтобы правильно вмещать данные устаревших форматов.

Помимо большей производительности удвоение разрядности наконец предоставило программистам адресное пространство в 4 Гбайт, доступное без всяких дополнительных ухищрений вроде сегментации, хотя сами сегменты никуда не делись, просто теперь один из них мог занимать все доступные 4 Гбайт. В результате, меняя сегменты, процессор мог адресовать в защищенном режиме аж 64 Тбайт виртуального пространства. Но при всем удобстве крупных сегментов (даже я, человек, никогда не занимавшийся программированием, проведя несколько часов с документацией на процессоры, чувствую облегчение от их появления) они из-за своего размера не подходят для реализации виртуальной памяти. Для этой цели понадобилась более изящная технология, делящая доступное пространство на мелкие блоки, которые удобно переносить из ОЗУ в ПЗУ и обратно. В результате на пути готового адреса в память вырос еще один механизм — блок пейджинга, делящий все физическое адресное пространство на страницы объемом в 4 Кбайт и ловко перемещающий их на диск и в память, причем для ускорения доступа наиболее часто использующиеся таблицы адресов кэшируются в устройстве под названием Translation Lookaside Buffer (TLB). Эта технология широко используется начиная с Windows/386 (32-битной версии Windows 2.0) и до сегодняшних дней. Однако все прекрасные идеи, воплощенные в i386, снова могла погубить плохая сочетаемость со старым добрым реальным режимом. Но, к счастью, теперь переход из реального режима в защищенный осуществлялся совершенно легко и непринужденно, без необходимости «сброса» процессора и программных трюков.

Более того, разработчики обнаружили в Intel 386 неожиданно приятную багофичу: нарушая положенный алгоритм перехода из защищенного режима в реальный, можно было оказаться в реальном режиме с прямой поддержкой четырех гигабайтов адресов. В лучшие годы операционной системы DOS, не поддерживавшей защищенный режим, этой лазейкой широко пользовались разработчики игр и других жадных до памяти приложений. Такой режим в противоположность реальному называется «нереальным» (unreal mode). Наконец, для того чтобы совместить старый софт, созданный для реального режима, с нoвыми ОС, такими как Windows, работавшими в защищенном режиме, был создан виртуальный режим 8086-го процессора. Понятно, что программу реального режима с механизмом адресации защищенного режима запустить нельзя, — она рассчитана на совсем другое формирование адреса. Но можно отвести ей уголок в памяти, где она будет свободно пастись, не подозревая о существовании пространства за пределами своего мегабайта. Что и делает механизм пейджинга, совершенно прозрачный для адресов как защищенного, так и реального режима, которые начинают формироваться по старинке — сложением 16-битных адресов сегмента и смещения.

Вместе с новым процессором технология производства в очередной раз рванула вперед, и без прогресса в этой области Intel 386, разработанный еще в предыдущем году, не ушел бы далеко, ибо камень выдался совершенно немаленьким по масштабам своего времени, вобрав целых 275 000 транзисторов при техпроцессе 1 мкм. Частоты тоже оказались неплохие и достигли 33 МГц. Однако при всех достоинствах 386-го нельзя сказать, что производители его немедленно возлюбили. Причиной тому стала серьезная цена камня, подкрепленная дороговизной материнских плат с 32-битной шиной. Так что в 1988 году появился бюджетный процессор i386SX с уполовиненной шиной памяти, полноценная версия которого переименована в i386DX, а еще через два года Intel выпустила свой первый ноутбучный камень — 80386SL. Потенциал новых чипов был оценен по достоинству, чему немало помогла оболочка Windows, представшая во всей красе, с использованием защищенного режима и пейджинга. А для нас важно то, что с выходом «трешки» архитектура х86 фактически стабилизировалась и в своих основах не изменялась вплоть до появления AMD64, лишь обрастая дополнительными приблудами. Инструкции, разрядность, режимы работы с памятью и даже количество регистров общего назначения с тех пор не менялись. На 386-м, представьте себе, можно запускать Windows 95, хотя я не могу поручиться за Windows 98.

Продолжение следует…

 

IntelvsAMD

В то же время разразился первый скандал между компаниями Intel и AMD, в конце концов сделавший компьютерный мир именно таким, каким мы его видим сегодня.

Начался он вот из-за чего. Intel, вовремя почуяв, что дело на рынке памяти запахло керосином, крепко взялась за производство процессоров и, изготовив успешный i386, смотрела в будущее с оптимизмом. Что касается AMD, то она тоже выпускала память и не меньше страдала от нашествия азиатских орд, но, в отличие от своего партнера, не имела спасательного круга в виде коммерчески успешных камней. Все, что было на руках у AMD в 1986 году, — это серия бит-слайсовых (bit-slice) микросхем, то есть компонентов для создания модульных процессоров. Срочно был необходим перспективный продукт, и в качестве такового по старой привычке выбрали процессор Intel. Но на этот раз, когда речь уже шла об основном продукте компании, Intel отказалась делиться. Теперь технологии производства микросхем уже вошли в полную зрелость, и фирма сама могла производить 386-е процессоры в достаточном количестве и качестве, став их единственным поставщиком как для IBM, так и для других сборщиков и умножая вместе с Microsoft армию клонов IBM PC.

олучившей отставку AMD не осталось другого выхода, кроме как прийти в арбитражный суд вместе с памятным соглашением 1982 года об обмене технологиями по платформе х8б. Узнав об этом, Intel просто разорвала то соглашение, но арбитраж вынес решение в пользу AMD, как и в скором времени суд высшей инстанции. Однако следующий процесс оказался удачным для другой стороны…

Конец открывшейся серии тяжб положил только Верховный суд Калифорнии в 1991 году, подтвердив соглашение 1982 года и обязав Intel выплатить один миллиард долларов! На эти деньги AMD немедленно основала SDC — Submicron Development Center, исследовавший производство компонентов размером меньше одного микрона. И именно на полученные выплаты был куплен мозговой ресурс, создавший впоследствии К7 и К8. Но постойте, такой исход кажется совершенно несправедливым! Вот сейчас ты делишься с товарищем последней дырявой рубахой, а через несколько лет он заявляется к тебе, разбогатевшему, на порог и требует свой кусок! Тут, чтобы не судить огульно, надо принять во внимание, что производственная политика Intel была для индустрии в новинку, а антимонопольный комитет США всегда бдит. Я думаю, это была не последняя причина, из-за которой компанию наказали столь сурово.

Intel vs AMD — 2

После выигранного дела AMD наконец-то получила право на производство своего аналога i386 и немедленно выпустила его на рынок. Откуда он так быстро взялся? Дело в том, что хитрые ребята в AMD в то время, когда адвокаты потели в судах, занимались реверс-инжинирингом интеловских чипов. Первым подпольным клоном стал математический сопроцессор для «двушки» Ат287, и хотя сама микросхема немного отличалась от оригинала, микрокод совпадал один в один. По этому поводу со взбешенной Intel опять пришлось судиться, но и тут Фемида встала на сторону AMD, подтвердив, что AMD воровала свое, положенное ей по соглашению 1982 года. После такого пробного шара можно было беспрепятственно выпускать собственный Ат38б — тоже немного другой чип, но с тождественным микрокодом. Но именно за микрокод и уцепилась Intel, в очередной раз подавая иск. Однако, несмотря на то что благополучие AMD опять было поставлено на карту, никто не стал смиренно ждать исхода разбирательства, и, когда суд подтвердил, что AMD имела все права на производство, первый миллион Ат386 успел уйти в продажу.

Между прочим, этот камень получился даже более удачным, чем родной Intel 386. AMD умело довела «трешку» до ума, начиная с того, что рабочая частота была увеличена до 40 МГц. А вместе с ней выросла и частота шины памяти, равная частоте ядра. Наконец, 386-й в исполнении AMD обладал кэш-памятью первого уровня, тоже благотворно повлиявшей на производительность, которая вплотную приближалась к младшим моделям Intel 486, имевшим 33-мегагерцевую шину. В результате как бюджетный процессор Ат38б продавался вплоть до середины 90-х годов, хотя он с большим скрипом тянул Windows 95 и другой современный ей софт. Кроме того, Ат386 нашли широкое применение в американском ВПК и космической отрасли — их до сих используют «шаттлы» и ракеты «Томагавк».

Продолжение следует…

Никто не прокомментировал материал. Есть мысли?