Бытовой ретро-компьютер своими руками http://forum.pk-fpga.ru/ |
|
Сравнительный анализ элегантности архитектур процессоров http://forum.pk-fpga.ru/viewtopic.php?f=17&t=9 |
Страница 1 из 1 |
Автор: | Voland [ 09 дек 2011, 11:31 ] | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Заголовок сообщения: | Сравнительный анализ элегантности архитектур процессоров | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Непредвзятый сравнительный анализ элегантности архитектур различных процессоров Автор: (c)Крис Касперски ака мыщъх Изучение древних языков в первую очередь позволяет освободить мысль от оков слова, которое воспринимается как единственное данное... Даже элементарные грамматические упражнения зачастую заставляют учащегося древним языкам освободиться от кажущегося ему единственным способа выражения, почувствовать и увидеть свою мысль настолько многосторонне, насколько ни для кого другого это недоступно. Александр Гимадеев Введение Непрекращающиеся "священные" войны по поводу "x86 процессоры - дерьмо, xxx процессоры - rules" неприятны в первую очередь тем, что они унижают и дисквалифицируют x86-программистов в глазах всей остальной программистской общественности. Они лишают новичков уважения к x86-архитектуре. Причем подавляющее большинство защитников x86-архитектуры, с представителями других процессорных семейств знакомы в лучшем случае понаслышке, а противники x86-архитектуры (львиную долю которых составляют поклонники PDP-11), склонны ухватываться за отдельные, непринципиальные архитектурные особенности, которые в x86 реализованы несколько иначе, чем в их любимом процессоре. В общем, аргументы обеих сторон носят глубоко необъективный и бездоказательный характер, сводящийся в основном к ругани и наездам в стиле: "...мне пришлось как-то переносить Форт с PDP-11 на i8086, причем последний я видел впервые... так от архитектуры i8086 до сих пор тошнит (особенно по сравнению с PDP-11)", "господи, до чего трудно было преодолеть рвотный барьер, осваивая после 5 лет работы на PDP-11 это интеловское смоляное чучелко. Кто работал на PDP-11, думаю, подтвердит". Мыщъх'ем была предпринята попытка если не поставить точку в этом вопросе, то по крайней мере дать спорящим сторонам свежую пищу для размышлений (как знать, быть может после этого в конференциях вместо реплик "сам дурак" наконец-то зазвучат нормальные технические аргументы). Сразу оговоримся, что ниже будут сравниваться исключительно программные модели нескольких, наиболее "культовых" процессоров. В первую очередь это, конечно, PDP-11 - легендарнейший процессор всех времен и народов, породивший огромное количество клонов (и отечественные кальки К1801, в частности), многие из которых исправно работают и поныне; затем серию процессоров 68K от Motorola, известную в первую очередь по Эпплам ранних моделей и едва не ставшую основой для IBM PC. Наконец, для полноты картины мы рассмотрим процессоры семейства DEC Alpha. Мне могут возразить, что сравнивать Альфу со всеми вышеперечисленными процессорами не совсем корректно, поскольку он совсем из другой категории. Именно так! И поэтому это лишь усиливает контраст! (Кроме того, Альфа окутана таким количеством мифов, домыслов и легенд, что близкое знакомство с ней никому не помешает). Сравнительный анализ охватывает как ключевые архитектурные концепции, так и индивидуальные непринципиальные архитектурные особенности - такие, например, как наличие в PDP-11 команды обнуления, отсутствующей в x86 и вынуждающей программистов использовать либо пересылку непосредственного нуля, либо логическую операцию XOR, что с одной стороны ничуть не ухудшает технические характеристики программы, но с другой - создает впечатление уродства архитектуры. Система команд Это ведь действительно так - x86 обладает самой идиотской архитектурой и самым нелепым набором команд из всех ныне существующих процессоров. Так что, желание изучить его досконально кажется мне весьма сомнительным. V. S. Lugovsky aka Mauhuur Отличительной особенностью x86 является чрезвычайно богатый набор машинных команд, количество которых в старших моделях Pentium'ов достигает пятисот, что значительно превышает количество команд во всех остальных популярных процессорах, вместе взятых! Разумеется, само по себе число поддерживаемых машинных команд еще ни о чем не говорит, напротив - даже вызывает некоторые сомнения в их элегантности. Вспоминается анекдот десятилетней давности: встречаются как-то представители двух функционально одинаковых заводов, один из которых расположен в СССР, а другой - в Японии. Вот японский представитель и говорит "На моем заводе работают восемь человек". А русскому стыдно сказать, что у него работает целая тысяча и он, слегка приукрашивая действительность, скашивает количество работающих до девяти. На следующий день заметно нервничающий японец спрашивает нашего: слушай, я всю ночь не спал, но так и не смог понять: что же у тебя девятый рабочий делает-то? Действительно, чтобы полноценно программировать на ассемблере x86, нужно очень многому научиться и лишь немногим программистам удается удержать весь этот набор команд у себя в голове. Постоянным спутником программистов становятся тысячи страниц технической документации и вместо того, чтобы сосредоточиться непосредственно на решаемой задаче, программист вынужден снова и снова штудировать многочисленные руководства, пытаясь разобраться - в какую же форму следует облечь свою программистскую мысль, чтобы донести ее до "тупой" машины. Ассемблерные программисты уже улыбнулись? И правильно! Ведь большая часть этих пятисот команд относится к векторной и мультимедийной обработке, т.е. прямо-таки скажем, к весьма специфичным областям. Избыточность - она, конечно, карман не тянет (во всяком случае, карман программиста, про производителей процессоров мы намеренно не говорим), но вот многословность, междоусобная обособленность и косность системы команд уродуют листинги только так! Вот только несколько примеров: отсутствие адресации память-память не позволяет обрабатывать переменные, находящиеся в памяти без пересылки их содержимого во временный регистр (и это при том, что количество регистров общего назначения в x86 процессоров крайне невелико); команды x86 сопроцессора используют свои - причем, крайне примитивные - способы адресации, а потому и синтаксически, и архитектурно обосабливаются от целочисленных команд, что существенно затрудняет как их изучение, так и работу с ними; ряд машинных команд жестко связан со строго определенными регистрами и за счет этого произвола многие из них практически полностью обессмысливаются (в частности, привязка счетчика цикла к регистру ECX/CX не позволяет реализовывать вложенные циклы). Наконец, раздельная адресация оперативной памяти и портов ввода/вывода... Процессоры семейства PDP-11 и 68K обходятся значительно меньшим количеством команд, причем удобство их ассемблера было столь велико, что позволяло ему на равных конкурировать с Си и другими языками высокого уровня. Теперь, конечно, программистские веяния изменились и ассемблер неожиданно выпал из их внимания, однако недостатки системы команд x86-процессоров тут совершенно не при чем (хотя некоторые и не разделяют такой точки зрения). Ограниченный объем журнальной статьи не позволяет мыщъх'у рассказать о достоинствах и недостатках каждого из процессоров во всех подробностях, но это, собственно, и не нужно. Зачем жевать уже жеванное (мыщъх'и к жвачным животным не относятся!), когда табличный материал грызть намного удобнее! Перелопатив кучу страниц документации, мыщъх отделил зерна от плевел и складировал их посреди своей норы, получив в итоге очень внушительную (но зато легкоусваиваемую!) таблицу 1, готовую к непосредственному употреблению (желательно с пивом).
Рисунок 1. Формат машинных команд x86-процессоров. /* Листинг 1. "Hello, World" на x86-ассемблере.
Рисунок 2. Формат машинных команд процессоров PDP-11. ;; Hello world in MIDAS Листинг 2. "Hello, World" на PDP-ассемблере.
Рисунок 3. Формат машинных команд 68k-процессоров. start: Листинг 3. "Hello, World" на 68k-ассемблере.
Рисунок 4. Формат машинных команд процессора DEC Alpha 21264. Сводная таблица сравнительной элегантности программной модели различных процессоров
Из глубины веков... "The irony is that the original instruction set was theirs, and the original motivation was theirs," Mazor said "...по иронии судьбы этот основополагающий набор инструкций был не наш, как и исходная постановка задачи.", Стенли Мазор Ругая Intel за уродливый (с их точки зрения!) набор инструкций, ее противники зачастую даже и не подозревают, что роль компании Intel в становлении x86-набора инструкций более чем скромна. Собственно, "зачастую" - еще слабо сказано. Навряд ли хоть один из спорщиков об этом вообще знает! Но - все по порядку... ...Давным-давно, когда славные шестидесятые уже подходили к концу, а кремниевая революция семидесятых еще и не думала начинаться, молодая и еще совсем неокрепшая компания Intel, неожиданно для себя получила заказ от крупной (по тем временам) японской компании Busicom, поручившей парням из Intel разработку двенадцати микросхем для своих калькуляторов, которым Busicom тогда занималась. Не то, чтобы этот заказ воодушевил руководство Intel, которое прекрасно осознавало, что осуществить такой проект своими силами ей просто нереально, но... в бизнесе - главное "застолбить" за собой заказ, а там... авось что-нибудь да придумаем! Собственно, так и произошло. Ведущий сотрудник Intel примерно в это же самое время обнаружил, что новая метало-оксидно-кремниевая технология дает возможность разместить все компоненты центрального процессора на одной-единственной микросхеме. Сейчас это кажется очевидным, но тогда... Intel просто не поняла, что она изобрела и, проявив чудовищную недальновидность, "слила" эту технологию окончательно замучившей ее Busicom, которая к тому времени уже, вероятно, и не надеялась получить свои микросхемы. В общем, вместо двенадцати заказанных микросхем Intel предложила сделать всего одну супер-микросхему, реализующую функции их всех. Такой поворот событий не очень-то обрадовал японцев (точнее: совсем не обрадовал). По началу они даже едва не отказались, но хорошенько подумав, решили, что лучше синица в руке, чем совсем ничего и... согласились. Приблизительно в это же самое время до руководства Intel доходит, что было у них в руках и что они упустили. Все, что остается - "лететь в Японию и вести с Busicom переговоры", выкупая у ошарашенных японцев только что проданный им чип назад... Впрочем, вернемся к непосредственному предмету нашего разговора - разработке системы команд для вновь созданного микропроцессора. Система команд первого в мире микропроцессора, по-видимому, разрабатывалась двумя людьми - собственно самим Тедом Хофом и присоединившемуся к нему впоследствии Стенлом Мэйзором. Другие же источники утверждают, что она была естественным путем содрана с процессоров IBM и Digital. Что ж! Дотошным читателям еще во многом предстоит разобраться, мне же искать описание чипа Intel 4004 и скрупулезно сравнивать его с продукцией остальных компаний просто лень. Как бы там ни было, система команд 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 были переданы все права на систему команд микропроцессора - не слишком-то хорошее утешение, но все-таки лучше, чем совсем ничего.
Рисунок 5. Терминал 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 Кб, но... во-первых, это все равно не выход, а во-вторых, такое решение идет вразрез с требованием об обратной совместимости. Наконец, сам объем непосредственно адресуемой памяти, каким бы большим он ни был, еще ничего не дает! И чтобы им эффективно воспользоваться необходимо иметь как минимум возможность создания перемещаемых программ, т.е. попросту говоря, уметь загружать программу в любое место памяти. Многие микрокомпьютеры начала восьмидесятых (в том числе и те, что были собраны на базе 8080) выделяли программам фиксированные участки памяти и потому загрузка нескольких программ становилась весьма проблематичной. (В частности, "Stealth"–отладчики тех лет грузили себя в буфер экранной памяти, отъедая несколько нижних строк – естественно, код отладчика отображался на терминале в виде бессмысленного мусора, зато такой отладчик не конфликтовал с программами!). К более подробному обсуждению преимуществ и недостатков сегментной модели памяти мы еще вернемся, а пока же заметим лишь то, что сегментная организация памяти намного удобнее страничной адресации, используемой в машинах типа PDP-11 и намного дешевле 32-разрядных указателей, используемых в процессорах типа 68K. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |