Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
При проектировании суперминикомпьютеров на базе последних достижений СБИС-технологии оказалось невозможным полностью перенести в нее архитектуру удачного компьютера, выполненного на другой элементной базе. Такой перенос был бы очень неэффективен из-за технических ограничений на ресурсы кристалла: площадь, количество транзисторов, мощность рассеивания и т. д.
Для снятия указанных ограничений в Беркли (США, Калифорния) была разработана RISC(Restricted (reduced) instruction set computer)-архитектура (регистро-ориентированная архитектура). Компьютеры с такой архитектурой иногда называют компьютерами с сокращенным набором команд. Суть ее состоит в выделении наиболее употребительных операций и создании архитектуры, приспособленной для их быстрой реализации. Это позволило в условиях ограниченных ресурсов разработать компьютеры с высокой пропускной способностью.
В компьютерной индустрии наблюдается настоящий бум систем с RISC-архитектурой. Рабочие станции и серверы, созданные на базе концепции RISC, завоевали лидирующие позиции благодаря своим исключительным характеристикам и уникальным свойствам операционных систем типа UNIX, используемых на этих платформах.
В самом начале 80-х годов почти одновременно завершились теоретические исследования в области RISC-архитектуры, проводившиеся в Калифорнийском, Стэнфордском университетах, а также в лабораториях фирмы IBM. Особую значимость имеет проект RISC-1, который возглавили профессора Давид Паттерсон и Карло Секуин. Именно они ввели в употребление термин RISC и сформулировали четыре основных принципа RISC-архитектуры:
каждая команда независимо от ее типа выполняется за один машинный цикл, длительность которого должна быть максимально короткой;
все команды должны иметь одинаковую длину и использовать минимум адресных форматов, что резко упрощает логику центрального управления процессором;
обращение к памяти происходит только при выполнении операций записи и чтения, вся обработка данных осуществляется исключительно в регистровой структуре процессора;
система команд должна обеспечивать поддержку языка высокого уровня. (Имеется в виду подбор системы команд, наиболее эффективной для различных языков программирования.)
Со временем трактовка некоторых из этих принципов претерпела изменения. В частности, возросшие возможности технологии позволили существенно смягчить ограничение состава команд: вместо полусотни инструкций, использовавшихся в архитектурах первого поколения, современные RISC-процессоры реализуют около 150 инструкций. Однако основной закон RISC был и остается незыблемым: обработка данных должна вестись только в рамках регистровой структуры и только в формате команд "регистр регистр регистр".
В RISC-микропроцессорах значительную часть площади кристалла занимает тракт обработки данных, а секции управления и дешифратору отводится очень небольшая его часть.
Аппаратная поддержка выбранных операций, безусловно, сокращает время их выполнения, однако критерием такой реализации является повышение общей производительности компьютера в целом и его стоимость. Поэтому при разработке архитектуры необходимо проанализировать результаты компромиссов между различными подходами, различными наборами операций и на их основе выбрать оптимальное решение.
Развитие RISC-архитектуры в значительной степени определяется успехами в области проектирования оптимизирующих компиляторов. Только современная технология компиляции позволяет эффективно использовать преимущества большого регистрового файла, конвейерной организации и высокой скорости выполнения команд. Есть и другие свойства процесса оптимизации в технологии компиляции, обычно используемые в RISC-процессорах: реализация задержанных переходов и суперскалярная обработка, позволяющие в один и тот же момент времени посылать на выполнение несколько команд.
Двумя основными архитектурами набора команд, используемыми компьютерной промышленностью на современном этапе развития вычислительной техники, являются архитектуры CISC и RISC. Основоположником CISC-архитектуры архитектуры с полным набором команд (CISC Complete Instruction Set Computer) можно считать фирму IBM с ее базовой архитектурой IBM/360, ядро которой используется с 1964 г. и дошло до наших дней, например, в таких современных мейнфреймах, как IBM ES/9000.
Лидером в разработке микропроцессоров с полным набором команд считается компания Intel с микропроцессорами X86 и Pentium. Это практически стандарт для рынка микропроцессоров.
Простота архитектуры RISC-процессора обеспечивает его компактность, практическое отсутствие проблем с охлаждением кристалла, чего нет в процессорах фирмы Intel, упорно придерживающейся пути развития архитектуры CISC. Формирование стратегии CISC-архитектуры произошло за счет технологической возможности перенесения "центра тяжести" обработки данных с программного уровня системы на аппаратный, так как основной путь повышения эффективности для CISC-компьютера виделся, в первую очередь, в упрощении компиляторов и минимизации исполняемого модуля. На сегодняшний день CISC-процессоры почти монопольно занимают на компьютерном рынке сектор персональных компьютеров, однако RISC-процессорам нет равных в секторе высокопроизводительных серверов и рабочих станций.
Основные черты RISC-архитектуры с аналогичными по характеру чертами CISC-архитектуры отображаются следующим образом (табл. 2.1):
Таблица 2.1. Основные черты архитектуры
CISC-архитектура |
RISC-архитектура |
Многобайтовые команды |
Однобайтовые команды |
Малое количество регистров |
Большое количество регистров |
Сложные команды |
Простые команды |
Одна или менее команд за один цикл процессора |
Несколько команд за один цикл процессора |
Традиционно одно исполнительное устройство |
Несколько исполнительных устройств |
Одним из важных преимуществ RISC-архитектуры является высокая скорость арифметических вычислений. RISC-процессоры первыми достигли планки наиболее распространенного стандарта IEEE 754, устанавливающего 32-разрядный формат для представления чисел с фиксированной точкой и 64-разрядный формат "полной точности" для чисел с плавающей точкой. Высокая скорость выполнения арифметических операций в сочетании с высокой точностью вычислений обеспечивает RISC-процессорам безусловное лидерство по быстродействию в сравнении с CISC-процессорами.
Другой особенностью RISC-процессоров является комплекс средств, обеспечивающих безостановочную работу арифметических устройств: механизм динамического прогнозирования ветвлений, большое количество оперативных регистров, многоуровневая встроенная кэш-память.
Организация регистровой структуры основное достоинство и основная проблема RISC. Практически любая реализация RISC-архитектуры использует трехместные операции обработки, в которых результат и два операнда имеют самостоятельную адресацию R1 : = R2, R3. Это позволяет без существенных затрат времени выбрать операнды из адресуемых оперативных регистров и записать в регистр результат операции. Кроме того, трехместные операции дают компилятору большую гибкость по сравнению с типовыми двухместными операциями формата "регистр память" архитектуры CISC. В сочетании с быстродействующей арифметикой RISC-операции типа "регистр регистр" становятся очень мощным средством повышения производительности процессора.
Вместе с тем опора на регистры является ахиллесовой пятой RISC-архитектуры. Проблема в том, что в процессе выполнения задачи RISC-система неоднократно вынуждена обновлять содержимое регистров процессора, причем за минимальное время, чтобы не вызывать длительных простоев арифметического устройства. Для CISC-систем подобной проблемы не существует, поскольку модификация регистров может происходить на фоне обработки команд формата "память память".
Существуют два подхода к решению проблемы модификации регистров в RISC-архитектуре: аппаратный, предложенный в проектах RISC-1 и RISC-2, и программный, разработанный специалистами IВМ и Стэндфордского университета. Принципиальная разница между ними заключается в том, что аппаратное решение основано на стремлении уменьшить время вызова процедур за счет установки дополнительного оборудования процессора, тогда как программное решение базируется на возможностях компилятора и является более экономичным с точки зрения аппаратуры процессора.
Нас будет в основном интересовать выбор оптимального набора операций. При его решении мы можем по некоторой джентльменской смеси задач, для выполнения которой предназначен компьютер, выбрать пакет контрольных программ и построить для них профиль их выполнения либо использовать метод статических или динамических измерений параметров самих программ.
При профилировании программы определяется доля общего времени центрального процессора, затрачиваемого на выполнение каждого оператора (операции) программы. Анализ полученных результатов позволит выявить характерные особенности профилируемой программы.
При статических или динамических измерениях подсчитывается, сколько раз в программе встречается тот или иной оператор (операция) или как часто признаки принимают положительные или отрицательные значения в тексте программы (статика) либо в результате выполнения (динамика).
Сочетание результатов, полученных в ходе предложенных исследований, дает общую картину анализируемой программы. Вот результаты одного из таких измерений в статике, проведенные для программ-компиляторов: операторы присваивания 48 %; условные операторы 15; циклы 16; операторы вызова-возврата 18; прочие операторы 3 %.
Измерение трехсот процедур, используемых в программах операционных системах в динамике показали следующие измерения типов операндов: константы 33 %; скаляры 42; массивы (структуры) 20 и прочие 5 %.
При этом статистика среди команд управления потоком данных следующая. В разных тестовых пакетах программ команды условного перехода занимают от 66 до 78 %, команды безусловного перехода от 12 до 18 %, частота переходов на выполнение составляет от 10 до 16 %.
Отсюда можно сделать вывод, что операторы присваивания занимают основную часть в программах-компиляторах, а операнды типа константа и локальные скаляры составляют основную часть операндов в процедурах, к которым происходит обращение в процессе выполнения программы.
Подобные количественные и качественные измерения образуют основу для оптимизации процессорной архитектуры.
Так, если операторы присваивания занимают 48 % всех операторов, то ясно, что операцию доступа к операндам следует реализовать аппаратно. Особенно это важно, если речь идет о нечисловых задачах, в которых операции вычислительного плана, как правило, просты. В условных операторах, операторах цикла и вызова-возврата производятся манипуляции над множеством операндов, что также подтверждает необходимость аппаратной реализации операции доступа к операндам.
При анализе типов операндов мы учитывали три категории:
константы не меняются во время выполнения программы и имеют, как правило, небольшие значения;
скаляры обращение к ним происходит, как правило, явно по их имени. Их обычно немного, и они описываются в процедурах как локальные;
обращение к элементам массивов и структур происходит посредством индексов и указателей, т. е. через косвенную адресацию. Этих элементов, как правило, много.
Для осуществления доступа к операнду необходимо вначале определить физический адрес ячейки, где хранится операнд, а затем осуществить доступ к операнду. Если операнд константа, ее можно указать в команде. Доступ к ней может быть осуществлен немедленно после обращения. В других случаях все зависит от типа памяти, где хранится операнд. Регистровые блоки и кэш-память мало отличаются по емкости, скорости доступа и стоимости, однако существенно отличаются по накладным расходам на адресацию. Обращение к кэш-памяти осуществляется при помощи адресов полной длины, которые требуют более высокой полосы пропускания каналов обмена. Как правило, этот адрес приходится формировать во время выполнения программы, что как минимум требует полноразрядного сложения или обращения к регистру либо и того, и другого. Регистровые блоки адресуются короткими номерами регистров, которые обычно указываются в команде, что упрощает их декодирование. Однако регистровая память может хранить только определенные типы данных, в то время как кэш-память может использоваться и как основная. В связи с этим распределение скалярных переменных по регистрам необычайно важно, ибо существенно влияет на скорость обработки.
Необходимо решить вопрос с размером регистровых окон, ибо в обычной архитектуре окна однорегистровые, что требует операции запоминания-восстановления при каждом вызове-возврате.
При вызовах процедур необходимо запоминать содержимое регистров, а при возвращении восстанавливать их, на что тратится значительное время. Вызовы процедур в современных структурированных программах делаются довольно часто, при этом суммарные накладные расходы на выполнение команд вызова и возврата из процедур на стандартных процессорах доходит до 50 % всех обращений к памяти в программе. Чтобы уменьшить время передачи данных между процедурами-родителями и процедурами-дочерьми (в случае, когда глубина их вложенности больше единицы), можно создать блок регистров, предоставив и родителям, и дочерям доступ к некоторым из них. Другими словами, необходимо создать перекрывающиеся блоки регистров. Такая возможность реализуется через перекрывающиеся "окна", накладываемые на блок регистров. Этот механизм реализован в RISC-архитектуре. Многие измерения показывают, что около 97 % процедур имеют не более шести параметров, что требует, чтобы перекрытие соседних окон шло где-то на пять регистров.
Процессор всегда содержит указатель текущего окна с возможностью его модификации в рамках реализованной глубины вложения процедур. Если глубина переполняется, часть содержимого окон направляется в основную память, чтобы иметь место для новых процедур. Для простоты реализации в ОП направляется содержимое целого окна. Это говорит о целесообразности введения многооконного механизма с заданным размером окна. Размер окна определяется количеством передаваемых параметров, а количество окон допустимой вложенностью процедур.
Среди достоинств применения больших регистровых блоков можно выделить высокую скорость доступа к блокам и увеличение частоты вызова процедур. Среди недостатков высокая стоимость большого регистрового блока, организуемого в ущерб другим функциональным блокам на кристалле.
Аппаратная реализация механизма перекрытия окон должна вводиться, если получаемый выигрыш перекрывает затраты.
Так как значительная часть процедур требует от трех до шести параметров, то следует подумать об оптимизации использования окон. Во-первых, пересылать в ОП в случае переполнения регистрового блока можно не все окна, а только содержимое регистров, используемых для данной процедуры, и, во-вторых, применять механизм с окнами переменных размеров, определяемых во время выполнения.
Перспективной разновидностью RISC-архитектуры явилась архитектура SPARC (Scalable Processor Architecture).
Замечание. Scaling масштабирование, т. е. способность представлять данные таким образом, чтобы и они, и результат проводимых с ними вычислений находились в диапазоне чисел, которые могут обрабатываться в рамках данного процесса или на данном оборудовании.
Новая серия SPARCSTATIONS фирмы Sun Microsystems базируется на SPARC-архитектуре. Первые модели этой фирмы были изготовлены уже в 1989 г. Операционной средой для всех станций фирмы Sun является SunOS разновидность OS Unix, снабженная многооконным графическим интерфейсом Open Look.
Для повышения скорости обработки данных используются компьютеры с VLIW (Very Long Instruction Word)-архитектурой. Структура команды таких компьютеров наряду с кодом операции и адресами операндов включает теги и дескрипторы. Наряду с существенным ускорением обработки данных такая архитектура позволяет экономить память при достаточном количестве обращений к командам и сокращать общее количество команд в системе команд.
В машинах с регистрами общего назначения метод (или режим) адресации объектов, с которыми манипулирует команда, может задавать константу, регистр или ячейку памяти.
В табл. 2.2 представлены основные методы адресации операндов, которые реализованы в компьютерах, рассмотренных в настоящей книге.
Таблица 2.2. Методы адресации
Метод |
Пример |
Смысл |
Использование команды |
Регистровая |
Add R4, R3 |
R4 = R4+R3 |
Для записи требуемого значения в регистр |
Непосредственная или литерная |
Add R4, #3 |
R4 = R4+3 |
Для задания констант |
Базовая со смещением |
Add R4, 100(R1) |
R4= R4+M(100+R1) |
Для обращения к локальным переменным |
Косвенная регистровая |
Add R4, (R1) |
R4 = R4+M(R1) |
Для обращения по указателю к вычисленному адресу |
Индексная |
Add R3, (R1+R2) |
R3 = R3+M(R1+R2) |
Полезна при работе с массивами: R1 база, R3 индекс |
Прямая или абсолютная |
Add R1, (1000) |
R1=R1+M(1000) |
Полезна для обращения |
Косвенная |
Add R1, @(R3) |
R1 = R1+M(M(R3)) |
Если R3 адрес указателя р, то выбирается значение по этому указателю |
Автоинкрементная |
Add R1, (R2)+ |
R1 = R1+M(R2) R2 = R2+d |
Полезна для прохода в цикле по массиву с шагом: R2 начало массива. В каждом цикле R2 получает приращение d |
Автодекрементная |
Add R1, (R2) |
R2 = R2d R1 = R1+M(R2) |
Аналогична предыдущей. Обе могут использоваться для реализации стека |
Базовая индексная со смещением и масштабированием |
Add R1, 100(R2)(R3) |
R1=R1+M(100)+R2+R3*d |
Для индексации массивов |
Адресация непосредственных данных и литерных констант обычно рассматривается как один из методов адресации памяти (хотя значения данных, к которым в этом случае производятся обращения, являются частью самой команды и обрабатываются в общем потоке команд).
В табл. 2.2 на примере команды сложения (Add) приведены наиболее употребительные названия методов адресации, хотя при описании архитектуры в документации производители компьютеров и ПО используют разные названия для этих методов. В табл. 2.2. знак "=" используется для обозначения оператора присваивания, а буква M обозначает память (Memory). Таким образом M(R1) обозначает содержимое ячейки памяти, адрес которой определяется содержимым регистра R1.
Использование сложных методов адресации позволяет существенно сократить количество команд в программе, но при этом значительно увеличивается сложность аппаратуры.
Команды традиционного машинного уровня можно разделить на несколько типов, которые показаны в табл. 2.3.
Таблица 2.3. Основные типы команд
Тип операции |
Примеры |
Арифметические |
Целочисленные арифметические и логические операции: сложение, вычитание, логическое сложение, логическое умножение и т. д. |
Пересылки данных |
Операции загрузки/записи |
Управление потоком команд |
Безусловные и условные переходы, вызовы процедур и возвраты |
Системные операции |
Системные вызовы, команды управления виртуальной памятью и т. д. |
Операции с плавающей точкой |
Операции сложения, вычитания, умножения и деления над вещественными числами |
Десятичные операции |
Десятичное сложение, умножение, преобразование форматов и т. д. |
Операции над строками |
Пересылки, сравнения и поиск строк |
Тип операнда может задаваться либо кодом операции в команде, либо с помощью тега, который хранится вместе с данными и интерпретируется аппаратурой во время обработки данных.
Обычно тип операнда (целый, вещественный, символ) определяет и его размер. Как правило, целые числа представляются в дополнительном коде. Для задания символов компания IBM использует код EBCDIC, другие компании применяют код ASCII. Для представления вещественных чисел с одинарной и двойной точностью придерживаются стандарта IEEE 754.
В ряде процессоров применяют двоично кодированные десятичные числа, которые представляют в упакованном и неупакованном форматах. Упакованный формат предполагает, что для кодирования цифр 0 9 используют 4 разряда и две десятичные цифры упаковываются в каждый байт. В неупакованном формате байт содержит одну десятичную цифру, которая обычно изображается в символьном коде ASCII.
При создании компьютера одновременно проектируют и систему команд (СК) для него. Существенное влияние на выбор операций для их включения в СК оказывают:
элементная база и технологический уровень производства ком-пьютеров;
класс решаемых задач, определяющий необходимый набор операций, воплощаемых в отдельные команды;
системы команд для компьютеров аналогичного класса;
требования к быстродействию обработки данных, что может породить создание команд с большой длиной слова (VLIW-команды).
Анализ задач показывает, что в смесях программ доминирующую роль играют команды пересылки и процессорные команды, использующие регистры и простые режимы адресации.
На сегодняшний день наибольшее распространение получили следующие структуры команд: одноадресные (1A), двухадресные (2A), трехадресные (3A), безадресные (БА), команды с большой длиной слова (VLIW БДС) (рис. 2.1):
1А |
КОП |
А1 |
|||||
2А |
КОП |
А1 |
А2 |
||||
3А |
КОП |
А1 |
А2 |
А3 |
|||
БА |
КОП |
||||||
БДС |
КОП |
Адреса |
Теги |
Дескрипторы |
Рис. 2.1. Структуры команд
Причем операнд может указываться как адресом, так и непосредственно в структуре команды.
В случае БА-команд операнды выбираются и результаты помещаются в стек (магазин, гнездо). Типичными первыми представителями БА-компьютеров являются KDF-9 и МВК "Эльбрус". Их характерной особенностью является наличие стековой памяти.
Стек это область оперативной памяти, которая используется для временного хранения данных и операций. Доступ к элементам стека осуществляется по принципу FILO (first in, last out) первым вошел, последним вышел. Кроме того, доступ к элементам стека осуществляется только через его вершину, т. е. пользователю "виден" лишь тот элемент, который помещен в стек последним.
Рассмотрим функционирование процессора со стековой организацией памяти.
При выполнении различных вычислительных процедур процессор использует либо новые операнды, до сих пор не выбиравшиеся из памяти компьютера, либо операнды, употреблявшиеся в предыдущих операциях. В процессорах с классической структурой обращение к любому операнду (1A-ЭВМ) требует цикла памяти.
Рассмотрим пример.
Пусть процессор вычисляет значение выражения
Программа решения этой задачи для одноадресного компьютера может быть следующей (табл. 2.4).
Таблица 2.4. Пример программы
Номер |
Команда |
Комментарии |
1 |
||
2 |
||
3 |
рабочая ячейка |
|
4 |
||
5 |
||
6 |
рабочая ячейка |
|
7 |
||
8 |
||
9 |
||
10 |
Замечание. Выполнение команды типа подразумевает, что результат операции помещается в первый регистр, в данном случае в
регистр
Как следует из приведенной программы, операнд a выбирается из памяти 2 раза (команды 4 и 5), b 3 раза (команды 2, 7 и 8). Кроме того, потребовались дополнительные обращения к памяти для запоминания и вызова из памяти результатов промежуточных вычислений (команды 3, 6, 9, 10).
Если главным фактором, ограничивающим быстродействие компьютера, является время цикла памяти, то необходимость в дополнительных обращениях к памяти значительно снижает скорость его работы. Очевидно, что принципиально необходимы только обращения к памяти за данными в первый раз. В дальнейшем они могут храниться в триггерных регистрах или СОЗУ.
Указанные соображения получили свое воплощение в ряде логических структур процессора. Одна из них процессор со стековой памятью. Принцип ее работы поясняет схема, представленная на рис. 2.2.
Стековая память представляет собой набор из n регистров, каждый из которых способен хранить одно машинное слово. Одноименные разряды регистров P1, P2, ..., Pn соединены между собой цепями сдвига. Поэтому весь набор регистров может рассматриваться как группа nразрядных сдвигающих регистров, составленных из одноименных разрядов регистров P1, P2, ..., Pn. Информация в стеке может продвигаться между регистрами вверх и вниз.
Движение вниз: (P1) P2, (P2) P3, ..., а P1 заполняется данными из главной памяти.
Движение вверх: (Pn) Pn1, (Pn1) Pn2, а Pn заполняется нулями.
Рис. 2.2. Стековая организация процессора
Регистры P1 и P2 связаны с АЛУ, образуя два операнда для выполнения операции. Результат операции записывается в P1. Следовательно, АЛУ выполняет операцию .
Одновременно с выполнением арифметической операции (АО) осуществляется продвижение операндов вверх, не затрагивая P1, т. е. (P3) P2, (P4) P3 и т. д.
Таким образом, АО используют подразумеваемые адреса, что уменьшает длину команды. В принципе, в команде достаточно иметь только поле, определяющее код операции. Поэтому компьютеры со стековой памятью называют безадресными. В то же время команды, осуществляющие вызов или запоминание информации из главной памяти, требуют указания адреса операнда. Поэтому в ЭВМ со стековой памятью используются команды переменной длины. Например, в KDF-9 команды АО однослоговые, команды обращения к памяти и передач управления трехслоговые, остальные двуслоговые.
Команды располагаются в памяти в виде непрерывного массива слогов независимо от границ ячеек памяти. Это позволяет за один цикл обращения к памяти вызвать несколько команд.
Для эффективного использования возможностей такой памяти в ЭВМ вводятся спецкоманды:
дублирование (P1) P2, (P2) P3, ... и т. д., а (P1) остается при этом неизменным;
реверсирование (P1) P2, а (P2) P1, что удобно для выполнения некоторых операций.
Рассмотрим тот же пример для новой ситуации (табл. 2.5):
.
Таблица 2.5. Реализация программы со стековой памятью
№ п/п |
Команда |
P1 |
P2 |
P3 |
P4 |
1 |
2 |
2 |
3 |
4 |
5 |
1 |
Вызов b |
b |
|||
2 |
Дублирование |
b |
B |
||
3 |
Вызов c |
c |
B |
B |
|
4 |
Сложение |
b+c |
B |
||
5 |
Реверсирование |
b |
b+c |
||
6 |
Дублирование |
b |
B |
b+c |
|
7 |
Умножение |
b2 |
b+c |
||
8 |
Вызов a |
a |
b2 |
b+c |
|
9 |
Дублирование |
a |
A |
b2 |
b+c |
10 |
Умножение |
a2 |
b2 |
b+c |
|
11 |
Сложение |
a2+b2 |
b+c |
||
12 |
Деление |
Как следует из табл. 2.5, понадобились лишь три обращения к памяти для вызова операндов (команды 1, 3, 8). Меньше обращений принципиально невозможно. Операнды и промежуточные результаты поступают для операций в АУ из стековой памяти; 9 команд из 12 являются безадресными.
Вся программа размещается в трех 48-разрядных ячейках памяти.
Главное преимущество использования магазинной памяти состоит в том, что при переходе к подпрограммам (ПП) или в случае прерывания нет необходимости в специальных действиях по сохранению содержимого арифметических регистров в памяти. Новая программа может немедленно начать работу. При введении в стековую память новой информации данные, соответствующие предыдущей программе, автоматически продвигаются вниз. Они возвращаются обратно, когда новая программа закончит вычисления.
Наряду с указанными преимуществами стековой памяти отметим также:
уменьшение количества обращений к памяти;
упрощение способа обращения к ПП и обработки прерываний.
Недостатки стековой организации памяти:
большое число регистров с быстрым доступом;
необходимость в дополнительном оборудовании, чтобы следить за переполнением стековой памяти, ибо число регистров памяти конечно;
приспособленность главным образом для решения научных задач и в меньшей степени для систем обработки данных или управления технологическими процессами.
Важным вопросом построения любой системы команд является оптимальное кодирование команд. Оно определяется количеством регистров и применяемых методов адресации, а также сложностью аппаратуры, необходимой для декодирования. Именно поэтому в современных RISC-архитектурах используются достаточно простые методы адресации, позволяющие резко упростить декодирование команд. Более сложные и редко встречающиеся в реальных программах методы адресации реализуются с помощью дополнительных команд, что, вообще говоря, приводит к увеличению размера программного кода. Однако такое увеличение программы с лихвой окупается возможностью простого увеличения частоты RISC-процессоров. Этот процесс мы можем наблюдать сегодня, когда максимальные тактовые частоты практически всех RISC-процессоров (Alpha, R4400, HyperSPARC и Power2) превышают тактовую частоту, достигнутую процессором Pentium.
Общую технологию проектирования системы команд для новой ЭВМ можно обозначить так: зная класс решаемых задач, выбираем некоторую типовую СК для широко распространенного компьютера и исследуем ее на предмет присутствия всего разнообразия операций в заданном классе задач. Вовсе не встречающиеся или редко встречающиеся операции не покрываем командами. Все частоты встреч операций для задания их в СК всякий раз можно определить из соотношений "стоимость затрат сложность реализации получаемый выигрыш".
Второй путь проектирования СК состоит в расширении имеющейся системы команд. Один из способов такого расширения создание макрокоманд, второй используя имеющийся синтаксис языка СК, дополнить его новыми командами с последующим переассемблированием, через расширение функций ассемблера. Оба эти способа принципиально одинаковы, но отличаются в тактике реализации аппарата расширения.
Так, система команд для ПК IBM покрывает следующие группы операций: передачи данных, арифметические операции, операции ветвления и циклов, логические операции и операции обработки строк.
Разработанную СК следует оптимизировать. Один из способов оптимизации состоит в выявлении частоты повторений сочетаний двух или более команд, следующих друг за другом в некоторых типовых задачах для данного компьютера, с последующей заменой их одной командой, выполняющей те же функции. Это приводит к сокращению времени выполнения программы и уменьшению требуемого объема памяти.
Мы можем исследовать и часто генерируемые компилятором некоторые последовательности команд, убирая из них избыточные коды.
Оптимизацию можно проводить и в пределах отдельной команды, исследуя ее информационную емкость. Для этого можно применить аппарат теории информации, в частности для оценки количества переданной информации энтропию источника. Тракт "процессор память" можно считать каналом связи.
Замечание. Энтропия это мера вероятности пребывания системы в данном состоянии (в статистической физике).
Известны два подхода к построению логики формирования функциональных импульсов. Один из них: каждой операции процессора соответствует набор логических схем, выполненных на диодах, транзисторах и т. д. и определяющих, какой функциональный импульс (ФИ) и в каком такте должен быть возбужден. Пусть некоторый ФИ должен появиться в такте j операции m при условии наличия переполнения сумматора или в такте i операции n. Требуемое действие будет выполнено, если подать сигналы, соответствующие указанным кодам операции, тактам и условиям на входы схем И, а выходы последних через схему ИЛИ соединить с формирователем ФИ (рис. 2.3).
Такой принцип управления операциями получил название "жесткой" или "запаянной" логики и широко применяется во многих компьютерах.
Рис. 2.3. Формирование функционального импульса
Другой принцип организации управления: каждой микрооперации (МИО) ставится в соответствие слово (или часть слова), называемое микрокомандой и хранимое в памяти подобно тому, как хранятся в памяти команды обычного компьютера. Здесь команде соответствует микропрограмма, т. е. набор микрокоманд (МИК), указывающих, какие ФИ и в какой последовательности необходимо возбуждать для выполнения данной операции. Такой подход получил название микропрограммирования или "хранимой логики". Это подчеркивает тот факт, что в микропрограммном компьютере логика управления реализуется не в виде электронной схемы, а в виде закодированной информации, находящейся в каком-то регистре.
Идея микропрограммирования, высказанная в 1951 г. Уилксом, до недавнего времени не находила широкого применения, ибо:
не было надежных и быстродействующих ЗУ для хранения микропрограммы;
неправильно понимались задачи и выгоды микропрограммирования.
Поясним второй аргумент. Считалось, ценность микропрограммирования в том, что каждый потребитель может сконструировать себе из МИК нужный ему набор операций в данной конкретной задаче. Замена наборов команд достигалась бы заменой информации в ЗУ без каких-либо переделок в аппаратуре. Однако в этом случае программисту необходимо было бы знать все тонкости работы инженера-разработчика компьютера. А основная тенденция развития ЭВМ в связи с автоматизацией программирования состоит в том, чтобы освободить программиста от детального изучения устройств компьютера и в максимальной степени приблизить язык компьютера к языку человека. Поэтому микропрограммные компьютеры считали трудными для пользователя.
В последнее время интерес к микропрограммному принципу возродился, так как:
созданы односторонние (читающие) быстродействующие ЗУ с малым циклом памяти;
микропрограммирование рассматривается не как средство повышения гибкости программирования, а как метод построения системы управления процессором, удобный для инженера-разработчика компьютера.
Программист в своей работе может и не подозревать о микропро-граммной структуре компьютера и использовать все средства ПО и языки программирования самого высокого уровня. Использование микропрограммного принципа позволяет облегчить разработку и изменение логики процессора.
С появлением программного доступа к состоянию процессора после выполнения каждой МИК обеспечивается возможность создания экономичной системы автоматической диагностики неисправностей и появляется способность к эмуляции, т. е. к выполнению на данной ЭВМ программы, составленной в кодах команд другого компьютера. Это достигается введением дополнительного набора МИК, соответствующих командам эмулируемого компьютера.
Эти возможности способствуют распространению методов микропрограммирования при построении УУ в современных компьютерах.
Существуют два вида микропрограммного управления: горизонтальное и вертикальное. При горизонтальном каждому разряду МИК соответствует определенная МИО, выполняемая независимо от содержания других разрядов. Микропрограмма может быть представлена в виде матрицы n m, где n число ФИ, m количество МИК, т. е. строка соответствует одной МИК, а столбец одной МИО (рис. 2.4).
Рис.2.4. Микропрограмма при горизонтальном
микропрограммировании
Примерные значения разрядов МИК приведены на рис. 2.5.
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
... |
Рис.2.5. Значение разрядов МИК (МИО):
1 гашение сумматора; 2 гашение указателя переполнения; 3 обратный код сумматора; 4 гашение регистра множителя частного; 5 инвертирование знака; 6 сдвиг содержимого сумматора влево; 7 сдвиг содержимого сумматора вправо; 8 увеличение содержимого сумматора на 1; 9
чтение из ЗУ в сумматор; …
Наличие "1" в пересечении какой-либо строки и столбца означает посылку ФИ в данную МИК, а наличие "0" его отсутствие.
Размещение "1" в нескольких разрядах МИК означает выполнение нескольких МИО одновременно. Конечно, возбуждаемые МИО должны быть совместимы.
Пусть, например, разряды 9-разрядной МИК принимают следующие значения: 001001101. Тогда, если заданные разряды соответствуют семантике, указанной на рис. 2.5, то МИО, определяемые разрядами 9, 7 и 6, несовместимы.
Для расширения возможностей МИК иногда используют многотактный принцип исполнения МИК. При этом каждому разряду присваивается номер такта, в котором выполняется соответствующая ему МИО, т. е. здесь все совместимые МИО имеют один номер такта. Все остальные такты нумеруются в порядке их естественного выполнения. Однако универсальную нумерацию МИО в МИК указать затруднительно.
Достоинства горизонтального микропрограммирования:
возможность одновременного выполнения нескольких МИО;
простота формирования ФИ (без схем дешифрации).
Недостатки:
большая длина МИК, так как число ФИ в современных компьютерах достигает нескольких сот, и соответственно большой объем ЗУ для
хранения МИК;
из-за ограничений совместимости операций, а также из-за последовательного характера выполнения алгоритмов операций лишь небольшая часть разрядов МИК будет содержать "1". В основном матрица будет состоять из нулей. Неэффективное использование ЗУ привело к малому распространению горизонтального микропрограммирования.
При вертикальном микропрограммировании каждая МИО определяется не состоянием одного разряда, а двоичным кодом, содержащимся в определенном поле МИК. Микрокоманда несколько напоминает формат обычных команд. Отличие состоит в том, что:
выполняется более элементарное действие МИО вместо операции;
адресная часть (в большинстве случаев) определяет не ячейку памяти, а операционный регистр процессора.
Формат МИК при вертикальном микропрограммировании приведен на рис. 2.6.
Рис. 2.6. Формат вертикальной МИК
Поля Р1 и Р2 в адресной части МИК указывают двоичные номера операционных регистров, содержимое которых участвует в одной операции. Одно из полей является одновременно и адресом результата. Таким образом, реализация арифметической или логической МИО, указанной в данной МИК,
может быть выражена формулой
(P1) (P2) P1, или (P2) P1,
где символ МИО.
Для МИК обращения к памяти поле P1 указывает регистр, куда принимается информация, а P2 регистр, содержимое которого является адресом обращения к ЗУ. Указанный формат МИК не единственный.
Каждая МИК выполняет следующие функции:
указывает выполняемую МИО;
указывает следующую МИО через задание "следующего адреса";
задает продолжительность МИК;
указывает дополнительные действия контроль и т. д.
Обычно в слове МИК имеются четыре зоны, соответствующие указанным функциям. Вообще говоря, некоторые из зон могут указываться неявно, например выбор очередной МИК может осуществляться из следующей ячейки, продолжительность МИК может быть определена одинаковой для всех МИК и т. д.
Первыми компьютерами с микропрограммным управлением среди отечественных ЭВМ были МИР, НАИРИ, среди зарубежных IBM/360,
Spectra 70.
1. Проанализируйте особенности RISC и CISCархитектур компьютеров.
2. Приведите конкретные примеры воплощения RISCархитектур в реальных компьютерах.
3. Промоделируйте работу RISCпрограммы на CISC-компьютере.
4. Проанализируйте и сравните по различным параметрам (быстродействию, памяти, сложности программирования) программы для одно, двух, трех и безадресных компьютеров.
5. Проведите оптимизацию системы команд, если задан конкретный набор решаемых задач.
6. Разработайте микропрограммы выполнения заданных операций для реального компьютера. Проанализируйте целесообразность микропрограм-мной поддержки операций.
7. Разработайте систему команд для компьютера с VLIWархитектурой.