Здравствуйте! Когда появится возможность сдать экзамен на сертификат? |
RISC- и CISC-архитектуры процессоров
CISC- и RISC-архитектура: определение, особенности машинного языка, преимущества и ограничения; пример машинного кода программы на C для процессора Intel x86 (CISC-архитектура) и процессора ARM (RISC-архитектура).
Как мы убедились выше, различные архитектуры процессоров могут заметно отличаться, но задача повышения быстродействия разумной ценой актуальна для любых архитектур. В рамках этой лекции мы рассмотрим две распространённые архитектуры процессоров - RISC и CISC.
ОПРЕДЕЛЕНИЯ, ОСОБЕННОСТИ, ПРЕИМУЩЕСТВА И НЕДОСТАТКИ
Традиционный подход к проектированию процессоров ставил одной из главных задач эффективную аппаратную реализацию часто встречающихся операций и удобство написания программ на языке ассемблера и машинного языка. Этот подход называется CISC-архитектурой (Complicated Instruction Set Computer); данный термин переводится как "компьютер со сложной системой команд".
CISC-архитектура характеризуется большим количеством разнообразных команд, способных выполнять сложные, многошаговые действия.
При использовании данного подхода система команд и машинный язык обладали следующими свойствами.
- Выразительность системы команд. Используется большое количество разнообразных команд - от простейших арифметических до сложных, совмещающих, например, арифметические операции и различные проверки операндов (например, на равенство и неравенство или на состояние отдельных битов в них). Системы команд некоторых процессоров поддерживают также работу с массивами данных - копирование, поэлементное сравнение и т.д.
- Гибкость при задании аргументов команд. Одна операция, например, сложение, может быть представлена в CISC-процессоре целым семейством команд. Все эти команды позволяют различными способами задавать аргументы сложению, которые, таким образом, могут браться из машинного кода, а также из оперативной памяти - или по явно заданному адресу, или по адресу, заданному в регистре. Подобные возможности позволяют минимизировать вспомогательное копирование данных (например, из памяти в регистр) и помогают эффективно кодировать с помощью небольшого числа команд, а часто вообще с помощью одной единственной команды, такие распространённые операции, как, скажем, сравнение двух переменных, или сложение переменной с элементом массива.
- Экономное кодирование - возможность создавать машинный код, занимающий минимальный объём памяти. Двоичное представление разных команд в оперативной памяти имеет разную длину и разный формат: наиболее частые команды умещаются в один байт, а на редко используемых не экономят, кодируя их пятью или даже более байтами. Это позволяет, в среднем, существенно сократить размер машинного кода.
- Существенно разная длительность выполнения команд. Простые команды, такие, как обнуление регистра, выполняются в CISC-процессорах быстро, в то время как сложные команды, такие, как деление, требуют значительного времени.
В качестве примеров процессоров, имеющих CISC-архитектуру, укажем на процессоры знаменитых менфреймов IBM System/360, а также на процессоры семейства Intel x86.
Теперь перечислим недостатки CISC-архитектуры.
- Разработка процессоров с выразительной, но обширной и сложной системой команд является трудозатратной задачей, что повышает стоимость разработки процессоров и риск большого количества ошибок.
- Выпускаемые процессоры, будучи сложными, имеют высокую себестоимость и рыночную цену.
- Сложная система команд затрудняет внутрипроцессорные оптимизации, например, автоматическое распараллеливание выполнения машинных команд.
Многие CISC-процессоры реализуют сложные команды с помощью микрокода - специализированного машинного языка, позволяющего задавать последовательность действий (микроопераций), выполняемую одной машинной командой процессора. Таким образом команды CISC-процессоров оказываются настолько сложными, что их приходится описывать при помощи дополнительного машинного языка, который исполняется специализированным процессором внутри процессора.
RISC-архитектура (Reduced Instruction Set Computer) была нацелена на решение этих проблем.
RISC-архитектура процессора подразумевает небольшую систему команд с тем, что каждая команда имеет эффективную аппаратную реализацию, а сложные операции, необходимые для прикладных программ, составляются из множества этих простых команд.
Вот основные свойства процессоров с RISC-архитектурой.
- Минималистичность системы команд. Машинные команды RISC-процессора имеют простую функциональность, соответственно, время на их декодирование и исполнения оказывается небольшим, а блоки процессора, отвечающие за декодирование - простыми.
- Отсутствие гибкости в задании аргументов. Обработку и пересылку данных из оперативной памяти в регистры процессора выполняют разные команды, то есть нет арифметических и логических операции, чьи операнды находятся в оперативной памяти и поддерживают различные варианты адресации. Соответственно, арифметические и логические операции реализуются командами, которые работают только с регистрами процессора. Например, нельзя с помощью одной команды сложить два числа, одно из которых находится в регистре, а другое - в памяти, а нужно отдельной командой загрузить значение из памяти в некоторый регистр и только после этого запустить команду сложения. Этот принцип в литературе часто называется load-store architecture, что как раз и означает обмен данными процессора с памятью при помощи отдельных команд. Чтобы компенсировать это ограничение, RISC-процессоры обычно имеют большое количество регистров общего назначения. Большая регистровая память позволяет постоянно держать много данных внутри процессора, и, тем самым, минимизировать количество операций обмена данными с оперативной памятью.
- Унифицированное кодирование. Двоичное представление разных машинных команд (то есть соответствующий им машинный код) имеет одинаковый формат и фиксированный размер. Для большинства RISC-архитектур одна команда занимает одно машинное слово. Таким образом имеется простой и "единообразный" машинный язык.
- Фиксированное время выполнения команд. Все команды выполняются за одно и то же количество тактов, что упрощает различные оптимизации, в частности, конвейеризацию, о которой мы подробнее расскажем ниже. Однако в RISC-процессорах имеется некоторое количество сложных команд, время исполнения которых может существенно превышать стандартное, например, умножение и деление. Эти операции сложнее, чем сложение и вычитание: они требуют выполнения большого количества сдвигов, сложений/вычитаний и различных проверок. Поскольку такие команды выбиваются из стройной концепции RISC, для их реализации применяют специальные приёмы. В частности, команда деления исполняется асинхронно - само деление далее выполняется отдельным специальным блоком процессора, в то время как сам процессор исполняет другие команды. При этом исполняемая программа "знает", через сколько тактов деление завершится, и также знает, где (в каких регистрах) будут расположены частное и остаток от деления.
Ценой потери выразительности и экономности машинного языка процессоры с RISC-архитектурой достигают следующих преимуществ по сравнению с CISC-процессорами.
- Упрощение и удешевление процессоров, как при конструировании, так и при производстве.
- Обширные возможности для реализации различных оптимизаций, в частности, внутрипроцессорного распараллеливания.