Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Boroda_2

.doc
Скачиваний:
7
Добавлен:
20.03.2015
Размер:
1.67 Mб
Скачать

Наше описание микросхемы UltraSPARC III не отличается полнотой, но его вполне достаточно, чтобы вы получили некоторое представление о принципах ее работы и отличиях от архитектуры Pentium 4.

Микроархитектура процессора 8051

Микроархитектура процессора 8051 (рис. 4.35) значительно проще двух преды­дущих — Pentium и UltraSPARC. Дело в том, что размер этой микросхемы очень мал (она состоит из 60 ООО транзисторов), а разрабатывалась она задолго до того, как конвейерная технология стала популярной. Кроме того, перед разработчика­ми 8051 ставилась задача создать дешевую, а не быструю микросхему. Как из­вестно, «дешевый» и «простой» — очень близкие понятия, в то время как деше­визна и быстродействие в нашем контексте редко сочетаются.

Центральное положение в микроархитектуре 8051 занимает основная шина. С ней связаны немногочисленные регистры, причем для большинства из них операции чтения и записи выполняются программно. Регистр АСС представ­ляет собой основной арифметический регистр, в котором сохраняется большая часть результатов вычислений. Через него проходят почти все арифметические команды. Регистр В применяется для умножения и деления; кроме того, при хранении результатов он выполняет роль временного регистра. Регистр SP яв­ляется указателем стека, как и в большинстве других систем он указывает на вершину стека. В регистре команд IR содержатся команды, выполняемые в данный момент.

Регистры ТМР1 и ТМР2 — это защелки, обслуживающие АЛУ. Перед выпол­нением операций в АЛУ соответствующие операнды копируются в эти защелки. Результаты вычислений в АЛУ записываются в любой регистр записи, доступ к которому обеспечивает основная шина. Коды состояний, обозначающие нулевые, отрицательные и тому подобные результаты, записываются в регистр PSW (Program Status Word — слово состояния программы).

В 8051 предусмотрены независимые модули памяти для размещения данных и кода. Емкость ОЗУ для размещения данных составляет 128 (модель 8051) или 256 (модель 8052) байт; соответственно, 8-разрядного регистра RAM ADDR вполне достаточно для полной адресации этой памяти. В процессе адресации ОЗУ адрес целевого байта размещается в регистре RAM ADDR, после чего про­изводится обращение к памяти. Емкость памяти кода может достигать 64 Кбайт (при условии размещения модуля памяти вне микросхемы), поэтому разряд­ность регистра ROM ADDR составляет 16 бит. Схема адресации к программно­му коду в ПЗУ с помощью регистра ROM ADDR аналогична вышеописанной схеме для памяти данных.

Регистр DPTR (Double PoinTeR — двойной указатель) — это 16-разрядный временный регистр, предназначенный для управления и сборки 16-разрядных адресов. Регистр PC представляет собой 16-разрядный счетчик команд; иными словами, он определяет адрес следующей команды, которую требуется вызвать и выполнить. Регистр PC incrementer — это специальный аппаратный модуль, выполняющий роль псевдорегистра. Когда в него копируется, а затем считыва­ется содержимое регистра PC, его значение автоматически увеличивается на единицу. Ни к PC, ни к PC incrementer нельзя обратиться через основную ши­ну. Наконец, BUFFER — это еще один 16-разрядный временный регистр. На самом деле каждый 16-разрядный регистр процессора 8051 состоит из пары 8-разрядных регистров, с каждым из которых можно выполнять разные опе­рации.

В дополнение ко всему, на микросхеме 8051 устанавливаются три 16-разряд­ных таймера, необходимых для выполнения приложений в реальном времени. Также предусмотрено четыре 8-разрядных порта ввода-вывода, через которые процессор 8051 может управлять 32 внешними кнопками, световыми индикато­рами, датчиками, выключателями и т. д. Именно наличие таймеров и портов вво­да-вывода делает возможным применение 8051 в качестве встроенного процессо­ра без установки дополнительных микросхем.

Процессор 8051 относится к категории синхронных — большинство ко­манд, которые он обрабатывает, завершаются за один цикл. Каждый цикл делится на шесть частей, называемых состояниями. В первом состоянии сле­дующая команда вызывается из ПЗУ, и по основной шине отправляется в ре­гистр IR. Во втором состоянии проводится декодирование этой команды, а зна­чение в регистре PC увеличивается на единицу. В третьем состоянии под­готавливаются операнды; в четвертом один из них передается основной шине, после чего, как правило, размещается в регистре ТМР1 и выполняет роль опе­ранда АЛУ. В этом же состоянии возможно копирование содержимого АСС в регистр ТМР2, после чего оба АЛУ становятся готовы к дальнейшей обработке. В пятом состоянии происходит выполнение команд АЛУ. Наконец, в шестом со­стоянии результаты выполнения команд АЛУ передаются обратно основной ши­не. Одновременно в регистре ROM ADDR проводится подготовка к вызову сле­дующей команды.

Об устройстве 8051 можно было бы рассказать подробнее, однако имеющего­ся описания и схемы, изображенной на рис. 4.35, вполне достаточно для того, чтобы получить общее представление. Резюмируя вышеизложенное, отметим, что 8051 состоит из одной основной шины (что позволяет уменьшить размер микро­схемы), гетерогенного набора регистров, трех таймеров и четырех портов, под­ключенных к основной шине, а также нескольких дополнительных регистров, соединенных с локальной шиной. В течение каждого цикла тракта данных два АЛУ получают на входе по одному операнду, после чего, как и в более современ­ных системах, результаты сохраняются в регистре.

Сравнение процессоров Pentium, UltraSPARC и 8051

Приведенные три процессора во многом отличаются друг от друга, однако у них есть удивительная общность, которая может помочь в разработке компьютера. Pentium 4 поддерживает унаследованный набор CISC-команд, который инжене­ры компании Intel рады бы слить в ближайший водоем, но этим бы они без­условно нарушили природоохранное законодательство. UltraSPARC III — клас­сическая RISC-система с эффективным набором команд. 8051 — простой 8-разрядный процессор, применяемый в качестве встроенного компьютера. В ос­нове всех представленных примеров — набор регистров и один или несколько АЛУ, выполняющих простые арифметические и булевы операции с операндами из регистров.

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

Такое внутреннее сходство не случайно, причиной его являются вовсе не по­стоянные переходы инженеров из одной компании Кремниевой долины в дру­гую. Когда мы рассматривали микроархитектуры Mic-З и Mic-4, мы видели, что достаточно просто построить конвейеризированный тракт данных с двумя реги­страми в качестве источников, в котором значения этих регистров проходят че­рез АЛУ, а результат сохраняется в регистре. На рис. 4.22 представлено графиче­ское изображение такого конвейера. Для современной технологии это наиболее эффективная система.

Главное различие между Pentium 4 и UltraSPARC III состоит в том, как пере­даются ISA-команды функциональному блоку. Компьютеру Pentium 4 прихо­дится разбивать CISC-команды, чтобы преобразовать их в 3-регистровый фор­мат, необходимый для функционального блока. Именно этот процесс показан на рис. 4.32 — разбиение больших команд на маленькие микрооперации. Машине UltraSPARC III не нужно ничего делать, поскольку ее исходные команды уже представляют собой удобные и компактные микрооперации. Вот почему боль­шинство новых архитектур ISA относятся к типу RISC, который обеспечивает оптимальное сочетание набора команд и внутреннего механизма их выполнения.

Полезно сравнить нашу последнюю разработку, микроархитектуру Mic-4, с этими тремя реальными машинами. Mic-4 больше всего напоминает Pentium 4. Обе системы интерпретируют команды, не являющиеся RISC-командами. Для этого обе системы разбивают команды на микрооперации, в которых указаны код операции, два входных и один выходном регистр. В обоих случаях микро­операции помещаются в очередь для дальнейшего выполнения. В Mic-4 микро­операции запускаются строго по порядку, выполняются строго по порядку и за­вершаются тоже строго по порядку. В Pentium 4 микрооперации запускаются по порядку, выполняются в произвольном порядке, а завершаются опять-таки по порядку.

Сравнивать Mic-4 и UltraSPARC III некорректно, поскольку команды систе­мы UltraSPARC III — это RISC-команды (то есть 3-регистровые микроопера­ции). Их не нужно ни разбивать, ни объединять. Их можно выполнять в том ви­де, в котором они есть, каждую за один цикл тракта данных.

По сравнению с Pentium 4 и UltraSPARC III, микросхема 8051 очень проста. Ее микроархитектура больше напоминает RISC, чем CISC, поскольку простые команды выполняются в ней за один цикл без разбивки на составные части. Ни конвейеризация, ни кэширование в 8051 не предусмотрены. Команды запуска­ются, выполняются и возвращают результаты по порядку. По своей простоте процессор 8051 напоминает Mic-1.

Краткое содержание главы

Основным компонентом любого компьютера является тракт данных. Он содер­жит несколько регистров, одну, две или три шины, а также один или несколько функциональных блоков, например АЛУ и схему сдвига. В основном цикле вы­зываются несколько операндов из регистров и передаются по шинам к АЛУ и другому функциональному блоку на выполнение. После завершения операции результаты вновь сохраняются в регистрах.

Тракт данных может управляться контроллером последовательности, кото­рый вызывает микрокоманды из управляющей памяти. Каждая микрокоманда содержит биты, управляющие трактом данных в течение одного цикла. Эти биты определяют, какие операнды нужно выбрать, какую операцию выполнить и что делать с результатами. Кроме того, каждая микрокоманда указывает на следующую микрокоманду (обычно в ней содержится ее адрес). Некоторые микрокоманды изменяют этот базовый адрес с помощью операции ИЛИ.

IJVM — это машина со стековой организацией и с однобайтными кодами опе­раций, которые помещают слова в стек, выталкивают слова из стека и выполня­ют различные операции над словами из стека (например, складывают их). В дан­ной главе описывается микропрограмма для микроархитектуры Mic-1. Если добавить блок выборки команд для загрузки команд из потока байтов, то можно устранить большое количество обращений к счетчику команд, и тогда скорость работы машины значительно возрастет.

Существует множество подходов к организации уровня микроархитектуры, в том числе 2- или 3-шинная структура, кодированные или декодированные поля микрокоманд, наличие или отсутствие вызова с упреждением, конвейер с большим или небольшим количеством ступеней, и т. д. Mic-1 — это простая ма­шина с программным управлением, последовательным выполнением команд и полным отсутствием параллелизма. Mic-4, напротив, является микроархитекту­рой с высокой степенью параллелизма и 7-ступенчатым конвейером.

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

Наши три процессора, Pentium 4, UltraSPARC III и 8051, рассматриваемые в ка­честве примеров, похожи в том плане, что их микроархитектуры неочевидны для программистов, пишущих на языке ассемблера архитектурного уровня. Pentium 4 реализует сложную схему преобразования ISA-команд в микрооперации, их кэши­рования, передачи суперскалярному RISC-ядру для выполнения вне исходной по­следовательности, подмены регистров и применения всех остальных описанных в этой книге трюков, позволяющих разогнать оборудование до максимально возмож­ной скорости. Что же касается процессора UltraSPARC III Си, то, если не считать многоступенчатого конвейера, его микроархитектура достаточно проста: запуск и выполнение команд, а также получение их результатов осуществляются без измене­ния последовательности команд. Процессор 8051 прост до крайности — к одной ос­новной шине подключено несколько регистров и одно АЛУ.

Вопросы и задания

  1. На рис. 4.5 регистр шины В кодируется через 4-разрядное поле, а шина С представлена в виде битового отображения. Почему?

  2. На рис. 4.5 есть блок «Старший бит». Нарисуйте его схему.

  3. Когда в микрокоманде установлено поле JMPC, регистр MBR соединяется операцией ИЛИ с полем NEXT_ADDRESS, чтобы получить адрес следую­щей микрокоманды. Существуют ли такие обстоятельства, при которых име­ет смысл использовать поле JMPC, если в NEXT_ADDRESS находится зна­чение 0x1FF?

  4. Предположим, что в листинге 4.1 после оператора if имеется следующий опе­ратор:

к = 5;

Каким будет новый ассемблерный код при условии, что компилятор является оптимизирующим?

  1. Напишите два разных варианта трансляции для IJVM следующего оператора на языке Java:

i = k + л + 5;

  1. Напишите на языке Java оператор, ставший источником следующего кода для IJVM:

ILOAD j ILOAD k ISUB

BIPUSH 6 ISUB DUP I ADD ISTORE i

  1. В этой главе мы упомянули, что при трансляции показанного ниже оператора в двоичную форму метка L2 должна находиться среди младших 256 слов управляющей памяти:

if (Z) goto LI; else goto L2

А может ли метка LI находиться, скажем, в ячейке с адресом 0x40, a L2 — в ячейке с адресом 0x140? Объясните, почему.

  1. В микрокоманде if_cmpeq3 микропрограммы для Mic-1 значение регистра MDR копируется в регистр Н, а в следующей строке от него отнимается зна­чение регистра TOS. Казалось бы, это удобнее записать в одном операторе:

i f_cmpeq3 Z=MDR-T0S: rd Почему этого не делают?

  1. Сколько времени потребуется машине Mic-1, которая работает на частоте 2,5 ГГц, на выполнение следующего Java-onepaTopa:

i = j + k;

Ответ дайте в наносекундах.

10. Аналогичный вопрос только уже для машины Mic-2, тоже работающей на частоте 2,5 ГГц. Опираясь на полученный результат, ответьте, сколько време­ни займет выполнение программы на машине Mic-2, если эта программа вы­полняется на машине Mic-1 за 100 не?

И. Напишите микропрограмму для Mic-1, чтобы реализовать JVM-команду P0PTW0. Эта команда удаляет два верхних слова из стека.

  1. На машине JVM существуют специальные однобайтные коды операций для загрузки в стек локальных переменных от 0 до 3, которые используются вме­сто обычной команды IL0AD. Какие изменения нужно внести в машину IJVM, чтобы наилучшим образом использовать эти команды?

  2. Команда ISHR (целочисленный арифметический сдвиг вправо) поддерживает­ся в JVM, но не поддерживается в IJVM. Команда извлекает два верхних сло­ва из стека и заменяет их одним словом (результатом). Второе сверху слово стека — это сдвигаемый операнд. Он сдвигается вправо на значение от 0 до 31 включительно, в зависимости от значения пяти самых младших битов верх­него слова в стеке (остальные 27 бит игнорируются). Знаковый бит дублиру­ется вправо на столько же битов, на сколько осуществляется сдвиг. Код опе­рации для команды ISHR равен 122 (0x7А).

  3. Команда ISHL (целочисленный сдвиг влево) поддерживается в JVM, но не под­держивается в IJVM. Команда извлекает два верхних слова из стека и заменяет их одним значением (результатом). Второе сверху слово в стеке — сдвигаемый операнд. Он сдвигается влево на значение от 0 до 31 включительно, в зависи­мости от значения пяти младших битов верхнего слова в стеке (остальные 2 бит верхнего слова игнорируются). Нули сдвигаются влево на столько же битов, на сколько осуществляется сдвиг. Код операции ISHL равен 120 (0x78).

  4. JVM-команде INVOKEVIRTUAL нужно знать, сколько у нее параметров. Зачем?

  5. Реализуйте JVM-команду DL0AD для Mic-2. Эта команда содержит однобайт­ный индекс и помещает локальную переменную, находящуюся в этом месте, в стек. Затем она помещает следующее старшее слово в стек.

  6. Нарисуйте конечный автомат для учета очков при игре в теннис. Правила иг­ры в теннис следующие. Чтобы выиграть, вам нужно получить как минимум 4 очка и у вас должно быть как минимум на 2 очка больше, чем у вашего со­перника. Начните с состояния (0, 0), то есть с того, что ни у кого из вас еще нет очков. Затем добавьте состояние (1,0), означающее, что игрок А получил очко. Ребро от состояния (0, 0) к состоянию (1,0) обозначьте буквой А. Затем добавьте состояние (0, 1), чтобы показать, что игрок В получил очко, а ребро к состоянию (0, 1) обозначьте буквой В. Продолжайте добавлять состояния и ребра до тех пор, пока не нарисуете все возможные состояния.

  7. Вернитесь к предыдущему вопросу. Существуют ли такие состояния, которые можно безболезненно удалить, никак не повлияв на результат любой игры? Если да, то какие из них эквивалентны?

  8. Нарисуйте конечный автомат для прогнозирования ветвлений, более надеж­ный, чем тот, который изображен на рис. 4.29. Он должен изменять прогноз только после трех последовательных неудачных прогнозов.

  9. Сдвиговый регистр, изображенный на рис. 4.18, имеет максимальную емкость 6 байт. Можно ли сконструировать блок выборки команд с 5-байтным сдви­говым регистром? А с 4-байтным?

  10. Предыдущий вопрос связан с удешевлением блока выборки команд. Теперь рассмотрим вопрос его удорожания. Может ли когда-нибудь понадобиться сдви­говый регистр большей емкости, скажем, на 12 байт? Если да, то почему? Ес­ли нет, то почему?

  11. В микропрограмме для микроархитектуры Mic-2 микрокоманда if_icmpeq6 выполняет переход к Т, если бит Z установлен в 1. Однако микрокоманда Т та же, что и для gotol. А можно ли перейти к gotol сразу, и станет ли машина ра­ботать быстрее после этого?

  12. В микроархитектуре Mic-4 блок декодирования отображает IJVM-код опера­ции в индекс ПЗУ, где хранятся соответствующие микрооперации. Кажется, что было бы проще опустить ступень декодирования и сразу передать IJVM-код операции в очередь. Тогда можно использовать IJVM-код опера­ции в качестве индекса в ПЗУ микроопераций, точно так же, как в микроар­хитектуре Mic-1. Что не так в этом плане?

  13. Компьютер содержит двухуровневую кэш-память. Предположим, что 60 % обра­щений к памяти — это кэш-попадания в кэш-память первого уровня, 35 % — в кэш-память второго уровня, а 5 % — это кэш-промахи. Время доступа со­ставляет 5, 15 и 60 не соответственно, причем время доступа в кэш-память второго уровня и в основную память отсчитывается с того момента, как ста­новится известно, что соответствующая память нужна (например, доступ к кэш-памяти второго уровня не может начаться, пока не произойдет кэш-промах при поиске в кэш-памяти первого уровня). Каково среднее время доступа?

  14. В конце подраздела «Кэш-память» в разделе «Повышение производительно­сти» было отмечено, что заполнение по записи выгодно только в том случае, если имеют место повторные записи в одну и ту же строку кэша. А если после записи следуют многочисленные считывания из одной и той же строки? Бу­дет ли полезным заполнение по записи в этом случае?

  15. В черновом варианте этой книги на рис. 4.27 вместо 4-входовой ассоциатив­ной кэш-памяти была изображена 3-входовая ассоциативная кэш-память. Один из рецензентов заявил, что читателей это может смутить, поскольку 3 — это не степень двойки, а компьютеры все делают в двоичной системе. По­скольку потребитель всегда прав, рисунок изменили на 4-входовую ассоциа­тивную кэш-память. Был ли рецензент прав? Аргументируйте.

  16. Компьютер с пятиступенчатым конвейером после обработки условного пере­хода простаивает следующие три цикла. Насколько этот простой снизит про­изводительность, если 20 % команд являются командами условного перехо­да? Другие причины простоя не учитывайте.

  17. Предположим, что компьютер вызывает до 20 команд заранее. В среднем 4 из этих них являются командами условного перехода, причем вероятность пра­вильного прогноза каждого составляет 90 %. Какова вероятность, что предва­рительно вызванная команда находится на одном из правильных путей?

  18. Предположим, что нам пришлось изменить структуру машины, представлен­ную с помощью табл. 4.11, чтобы использовать 16 регистров вместо 8. Тогда мы изменим команду 6, чтобы регистр R8 стал целевым. Что в этом случае будет происходить в циклах, начиная с цикла 6?

  19. Обычно взаимозависимости затрудняют работу конвейеризированных про­цессоров. Можно ли что-нибудь сделать с WAW-взаимозависимостыо, чтобы улучшить положение вещей? Какие существуют средства оптимизации?

  20. Перепишите интерпретатор Mic-1 таким образом, чтобы регистр LV указывал на первую локальную переменную, а не на связующий указатель.

  21. Напишите моделирующую программу для одновходовой кэш-памяти прямо­го отображения. Сделайте число элементов и длину строки параметрами про­граммы. Поэкспериментируйте с этой программой и представьте полученные результаты.

Глава 5

Уровень архитектуры набора команд

В этой главе подробно обсуждается уровень архитектуры набора команд (ISA). Как показано на рис. 1.2, он расположен между уровнями микроархитектуры и операци­онной системы. Исторически этот уровень развился прежде всех остальных уров­ней и изначально был единственным. В наши дни этот уровень очень часто называ­ют «архитектурой» машины, а иногда (что неправильно) — «языком ассемблера».

Уровень архитектуры набора команд имеет особое значение: он является свя­зующим звеном между программным и аппаратным обеспечением. Конечно, можно было бы сделать так, чтобы аппаратное обеспечение непосредственно вы­полняло программы, написанные на С, C++, Java или других языках высокого уровня, но это не очень хорошая идея. Преимущество компиляции перед интер­претацией было бы тогда потеряно. Кроме того, из чисто практических сообра­жений компьютеры должны уметь выполнять программы, написанные на разных языках, а не только на одном.

В сущности, все разработчики считают, что нужно транслировать программы, написанные на различных языках высокого уровня, в некую общую для всех промежуточную форму — уровень архитектуры набора команд — и, соответст­венно, строить аппаратное обеспечение, которое сможет непосредственно выпол­нять программы этого уровня. Уровень архитектуры набора команд связывает компиляторы и аппаратное обеспечение. Это язык, который понятен и компиля­торам, и устройствам. На рис. 5.1 показана взаимосвязь компиляторов, уровня архитектуры набора команд и аппаратного обеспечения.

В идеале при создании новой машины разработчики архитектуры команд должны консультироваться с разработчиками и компиляторов, и аппаратуры, чтобы выяснить, какими особенностями должен обладать подведомственный им уровень. Если разработчики компилятора потребуют какого-то свойства, ко­торое инженеры не смогут реализовать, то такая идея не пройдет. Точно так же, если разработчики аппаратного обеспечения захотят ввести в компьютер ка­кой-либо новый элемент, но программисты не смогут написать поддерживаю­щую его программу, такой проект никогда не воплотится. Реализуемый в конеч­ном итоге уровень архитектуры набора команд, оптимизированный для нужных языков программирования, всегда является плодом долгих обсуждений и моде­лирования.

Но все это в теории. А теперь перейдем к суровой реальности. Когда появля­ется новая машина, первый вопрос, который задают все потенциальные покупа­тели: «Совместима ли машина с предыдущими версиями?» Второй вопрос: «Можно ли запустить на ней прежнюю операционную систему?» И третий во­прос: «Будут ли работать на этой машине прежние приложения и не потребует­ся ли заменять их новыми версиями?» Если ответ на любой из этих вопросов оказывается отрицательным, разработчики должны объяснить, почему. Покупа­тели вряд ли захотят выбросить свои любимые программы, чтобы начать все за­ново.

Этот факт заставляет производителей компьютеров поддерживать один и тот же уровень команд в разных моделях или, по крайней мере, делать его обратно совместимым. Под обратной совместимостью мы понимаем способность новой машины выполнять старые программы без изменений. В то же время новая ма­шина может поддерживать новые команды и иметь другие особенности, исполь­зуемые новым программным обеспечением. Разработчики должны делать уро­вень команд совместимым с предыдущими моделями, но они вправе как угодно менять аппаратное обеспечение, поскольку едва ли кого-нибудь из покупателей волнует, что собой в реальности представляют «внутренности» компьютера и что именно делает то или иное устройство. Разработчики могут переходить от микропрограмм к непосредственному использованию устройств, добавлять кон­вейеры, реализовывать суперскалярные схемы и т. п., но при условии, что они сохранят обратную совместимость с уровнем команд предыдущих моделей. Ос­новная цель — убедиться, что старые программы работают на новой машине. То есть на первый план выходит задача не просто создания хороших машин, а соз­дания хороших машин при условии их обратной совместимости.

Все сказанное вовсе не принижает значимость уровня архитектуры набора команд. Качественный уровень архитектуры набора команд чрезвычайно важен, особенно в отношении вычислительных возможностей и стоимости. Производи­тельность эквивалентных машин с разными уровнями архитектуры набора ко­манд может различаться на 25 %. Мы просто хотим сказать, что рынок в опреде­ленной степени затрудняет переход от старой архитектуры команд к новой. Тем не менее иногда появляются новые уровни команд универсального назначения, а на специализированных рынках (например, на рынке встроенных систем или на рынке мультимедийных процессоров) они возникают гораздо чаще. Следова­тельно, важно понимать принципы работы этого уровня.

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

Во-вторых, хорошая архитектура команд должна обеспечивать предельную ясность в отношении того, какой именно должна быть откомпилированная про­грамма. Регулярность и полнота вариантов — те черты, которые не всегда свой­ственны архитектуре команд. Эти черты особенно важны для компилятора, ко­торый не всегда может сделать оптимальный выбор из нескольких альтернатив, особенно если некоторые очевидные на первый взгляд альтернативы архитекту­рой команд не поддерживаются. Если говорить кратко, поскольку уровень архи­тектуры набора команд является промежуточным звеном между аппаратным и программным обеспечением, он должен быть приемлемым и для разработчиков аппаратного обеспечения (с точки зрения эффективной реализации), и для про­граммистов (с точки зрения написания качественного кода).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]