среда, 16 декабря 2009 г.

x86: Из глубины веков...

"The irony is that the original instruction set was theirs,
and the original motivation was theirs," Mazor said

"...по иронии судьбы этот основополагающий набор инструкций был
не наш, как и исходная постановка задачи.", Стенли Мазор


Ругая Intel за уродливый (с их точки зрения!) набор инструкций, ее противники зачастую даже и не подозревают, что роль компании Intel в становлении x86-набора инструкций более чем скромна. Собственно, "зачастую" - еще слабо сказано. Навряд ли хоть один из спорщиков об этом вообще знает! Но - все по порядку...


Disclaimer - большая часть материала "дернута" с одной из старых статей мыщъх'a (первоисточник уже недоступен), исправлены только явные стилистические огрехи, а также добавлен ряд собственных соображений и наблюдений.
Итак, в одной далекой-далекой Галактике...

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

Не то, чтобы этот заказ воодушевил руководство Intel, которое прекрасно осознавало, что осуществить такой проект своими силами ей просто нереально, но... в бизнесе - главное "застолбить" за собой заказ, а там... авось что-нибудь да придумаем! Собственно, так и произошло.

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

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

Приблизительно в это же самое время до руководства Intel доходит, что было у них в руках и что они упустили. Все, что остается - "лететь в Японию и вести с Busicom переговоры", выкупая у ошарашенных японцев только что проданный им чип назад... Впрочем, вернемся к непосредственному предмету нашего разговора - разработке системы команд для вновь созданного микропроцессора.

Система команд первого в мире микропроцессора, по-видимому, разрабатывалась двумя людьми - собственно самим Тедом Хофом и присоединившемуся к нему впоследствии Стенлом Мэйзором. Другие же источники утверждают, что она была естественным путем содрана с процессоров IBM и Digital. Как бы там ни было, система команд Intel 4004 не имела будущего и в скором времени умерла, см. http://www.cs.cuw.edu/csc/csc425/4004card.html.

История x86 начала свой отсчет несколько позднее - в том же 1969 году Intel получила заказ от техасской компании Computer Terminal Corporation (впоследствии переименованной в Data-Point), на интегрирование разработанного ею процессора в кристалл кремния.

Обратите внимание, - именно интегрирование(!), а отнюдь не самостоятельную разработку, как это было в случае с Busicom.

Другими словами, от Intel требовалось создать микропроцессор в полном соответствии со всеми предоставленными спецификациями, в которые, естественно, входило и полное описание набора машинных команд, которые должен быть понимать терминал.

Используемая Data-Point система команд была... нет, не плохой, скорее, ее можно назвать примитивной, но - для терминалов(!) вполне достаточной.
Действительно, терминалы (даже интеллектуальные!) не особо-то притязательны и излишняя элегантность и архитектурные изыски им абсолютно ни к чему.

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

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

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

К тому же, поскольку программное обеспечение терминала, зашитое в его ПЗУ, не меняется каждый день, на удобство программирования терминального процессора всем было глубоко начхать и никакой элегантности от его системы команд попросту не требовалось (кого из нас, сегодняшних, волнует система команд, ну, скажем, процессоров модема?).

Реализация микропроцессора заняла практически три года. Лучшие инженеры компании, увлеченные своими идеями, работали практически на пределе человеческих возможностей, отдавая процессору и дни, и ночи, и выходные.

"Они являлись на работу к восьми утра и работали до шести вечера, забывая сделать перерыв на обед. Часто они просыпались задолго до восхода солнца , чтобы опробовать идею, внезапно пришедшую им в голову. Часто семьи разваливались".

Когда же "младенец" наконец заработал, компания Data-Point переживала не лучшие времена и потому отказалась выплачивать положенную по контракту сумму, ссылаясь на то, что микропроцессор слишком медлителен и к тому же требует чрезмерно большого количества микросхем поддержки. В качестве отступного компании Intel были переданы все права на систему команд микропроцессора - не слишком-то хорошее утешение, но все-таки лучше, чем совсем ничего.



Терминал Data-Point с процессором, построенном на базе мелкой логики.

Такой поворот событий, признаться, сильно озаботил Intel, и она начала продвигать микропроцессор 8008 (а именно такое обозначение он получил!) собственными силами. И это - надобно сказать - ей удалось! Новый чип нашел широкое применение не только в микроконтроллерах, но и в первых персональных компьютерах только-только начавших появляться к тому времени.

Кстати, одна из распространенных легенд гласит, что первым персональным компьютер был "Альтаир", но это не так! "Альтаир", основанный на 8080, появился несколько позднее. Его опередило достаточно больше количество микро-ЭВМ, и RGS-08 с "Марком", в частности. Конечно, это были очень и очень простые машины, основанные на 8008, который поддерживал набор из 45 команд и мог непосредственного адресовать аж 16 Килобайт (не улыбайтесь - по тем временам эта величина была весьма значительной).

Вот так, собственно, все и началось. Следующий микропроцессор, представленный Intel - 8080 не был, да и не мог быть подлинно революционным. Да, разработчики добавили тридцать новых команд, увеличили непосредственно адресуемое пространство до 64 КБ, кое-что исправили по мелочи, но на принципиальное улучшение архитектуры они не отважились. Да и кому, собственно, принципиально новый процессор был нужен?

На базе 8080 процессора было собрано большое количество микрокомпьютеров, обросших за время своего существования большим количеством программного обеспечения. Операционная система CP/M, текстовой редактор WordStar, база данных dBase... Популярность этих программ была столь велика, что их веяния прослеживаются и до сих пор! А потому всякая мысль об отказе обратной совместимости в последующих моделях процессоров представлялась руководству Intel и экономически, и политически убийственной, но... они все-таки сделали это, благодаря чему все мы сидим под x86, а не решись инженеры Intel в свое время на достаточно рискованный шаг по усовершенствованию архитектуры своего процессора, его бы уже давно вытеснила Motorola 68K или DEC Alpha.

Новое детище - 8086, (кстати, на момент своего рождения заметно обогнавшее и время, и рынок) не обеспечивало с 8080 прямой бинарной совместимости (т.е. не могло выполнять уже откомпилированные программы), и было совместимо лишь на уровне ассемблера, т.е. при наличии исходных текстов проблема переноса решалось простой перекомпиляцией.

Система команд претерпела значительные изменения (не все из которых, впрочем, пошли ей на пользу), но вместе с дополнительными возможностями приобрела некоторую разношерстность и... печально известную сегментную модель памяти.

И откуда эти чертовы сегменты только появились - вздыхали программисты конца семидесятых - конца девяностых. Неужто эти идиоты из Intel не могли придумать, как обойтись без них? Что ж, попробую ответить. Сегменты, собственно, и появились потому, что 8086 опередил свое время, ухитряясь адресовать аж 1 Мб памяти вместо "положенных" ему 64 Кб.

Действительно, при побайтовой адресации памяти 16-битные указатели могут "бить" лишь в пределах одного 64 Кб блока, а ведь 8086 и был 16-разрядным! Можно, конечно, пойти на хитрость и адресовать память не байтами, а словами (и некоторые процессоры именно так и делают!) - тогда объем непосредственно адресуемой памяти возрастет до 128 Кб, но... во-первых, это все равно не выход, а во-вторых, такое решение идет вразрез с требованием об обратной совместимости. Наконец, сам объем непосредственно адресуемой памяти, каким бы большим он ни был, еще ничего не дает! И чтобы им эффективно воспользоваться необходимо иметь как минимум возможность создания перемещаемых программ, т.е. попросту говоря, уметь загружать программу в любое место памяти, что с помощью манипулирования сегментными регистрами достигалось легко и непринужденно.

Самое забавное заключается в том, что такой новый и замечательный процессор... поначалу не пошел. Производители аппаратуры довольно долго его не использовали чисто по экономическим соображениям - все существующие наборы микросхем окружения напрямую не поддерживали шестнадцатиразрядную шину адреса и шину данных той же ширины. Intel это довольно быстро обнаружила и приступила к разработке "упрощенной" версии микропроцессора, получившей название 8088. Именно его-то и использовала IBM при разработке своего персонального компьютера, когда борьба шла чуть ли не за каждую микросхему, чтобы сохранить цену на достаточно низком уровне.

Но это уже совсем другая история...

Комментариев нет: