Аббревиатура RISC (reduced instruction set computer) появилась в середине 80-х годов XX века, когда ученые из Беркли сообщили о создании "компьютера с ограниченным набором команд". С тех пор остальные компьютеры стали называться CISC (complication instruction set computer -- компьютеры со сложным (расширенным) набором команд.) К CISC-процессорам относятся процессоры системы IBM 360/370, Intel 80x86 и Pentium, Motorola MC680x0, DEC VAX и некоторые другие. К RISC-процессорам относятся Sun Ultra SPARC, MIPS, Alpha DEC, PowerPC и некоторые другие.
1. Из них удалены сложные (типа двоичного умножения) и редко используемые инструкции.
2. Все инструкции имеют одну длину. При этом уменьшается сложность устройства управления процессора и увеличивается скорость дешифрации команд.
3. Отсутствуют инструкции, работающие с памятью напрямую (типа команд "память - память", "регистр - память"). Возможна только загрузка данных из памяти в регистр и наоборот, из регистра в память. Соответственно на порядок увеличивается число регистров.
4. Отсутствуют операции работы со стеком.
5. Возможно использования конвейера и параллельных вычислений. АЛУ, например, одновременно может работать с 2-мя 32-х разрядными, 4-мя 16-ти разрядными, и 8-мью 8-ми разрядными числами. Смысл же конвейера -- в накоплении последовательно выполняемых команд программы (т.н. линейных участков) в буфере для их ускоренного дешифрования и выполнения.
6. Почти все операции осуществляются за один такт микропроцессора.
7. Благодаря этим нововведениям тактовая частота RISC-процессоров (при прочих равных условиях) выше.
Более того, в RISC-микропроцессорах появилась возможность работы разных его составляющих на разных тактовых частотах. Например, из-за того, что содержимое памяти обычно дублируется в кэше, частоту работы АЛУ, регистров и дешифратора команд можно повысить, а частоту синхронизации пересылки между кэшем и памятью, предвыборки команд можно уменьшить. Поэтому при указании тактовой частоты процессора выбирают его максимальную частоту.
Арифметико-логическое устройство (АЛУ).
По определению, предложенном в книге [Информатика в понятиях и терминах. - М.: Просвещение, 1991, стр. 67] "АЛУ -- функциональная часть ЦВМ, предназначенная для выполнения операций преобразования (обработки) величин: арифметических, логических (поразрядных), сдвига..." АЛУ является одним из основных устройств процессора. Оно выполняет одну из первых функций микропроцессора -- обработку данных и вычисления.
На вход АЛУ подаются данные в двоично-кодированном виде. Слово "двоично-кодированные" означает, что все данные (числа, символы и т.п.) представляются в виде последовательности двоичных цифр -- нулей и единиц. Отметим, что ЦВМ способна воспринимать только двоично-кодированные данные. Обычно АЛУ может оперировать с одним или сразу с двумя двоичными данными, в роли которых, как правило, выступают двоичные числа, и всегда возвращает один результат. Поступающие на вход данные автор, в зависимости от контекста, будут называться числами, аргументами или операндами. Кроме данных, на это устройство поступают сигналы -- преобразованные устройством управления операторы программы (команды), указывающие, какие операции нужно произвести над данными. Кроме того, на выходе арифметико-логическое устройство выдает также сигналы -- признаки успешного или некорректного (типа деления на ноль) результата. АЛУ бывает универсальным и специализированным. Элементарные сведения о схемах, на которых основано АЛУ, приведены ниже.
Элементная база АЛУ
На уровне логических схем АЛУ состоит из логических элементов, сумматоров, триггеров и некоторых других элементов.
Логический элемент -- электронная схема, реализующая элементарную переключающую функцию. [А.П. Заморин и др. Вычислительные машины, системы, комплексы. Справочник. -- М.: Энергоатомиздат, 1985. -- 264 с.: ил. -- стр. 31.] При реализации функций переключения входные переменные соответствуют входным сигналам, а выходной сигнал представляет собой значение функции. Всего существует десять логических элементов, реализующих десять логических (элементарных или сложных) функций.
Логическая схема может реализовать сложную функцию алгебры логики, а может входить в состав другого функционального блока процессора (сумматора, дешифратора, регистра, триггера.)
Триггер -- электронная схема с двумя устойчивыми состояниями, предназначенная для хранения одного бита информации. Триггер переходит из одного устойчивого состояния в другое при воздействии некоторого входного сигнала. Триггер имеет вход для установки в состояние 0 (X0) и в 1 (X1). На выходе выдается состояние триггера, которое выдается в прямом (Y) и в инверсном (Y1) виде. В компьютерах используют синхронизируемые и не синхронизируемые триггеры. Синхронизируемый триггер -- это триггер, изменение состояния которого осуществляется только в момент подачи сигнала синхронизации V.
В зависимости от способа управления различают несколько типов триггеров: D- (с одним входом), RS- (с двумя входами), T- (со счетным входом), RST- (с двумя входами и счетным выходом) триггеры, и универсальные триггеры: JK- и DF-триггеры.
Триггеры, как правило, выполняются на логических элементах ИЛИ-НЕ, И-НЕ (рисунок D.1.2.) Если триггеры выполняются на логических элементах И-НЕ, то это триггеры с инверсным управлением; если на элементах ИЛИ-НЕ, то это триггеры с прямым управлением.
Рис. D.1.2. Схема реализации триггера - защелки на элементах И-НЕ (a) и ИЛИ-НЕ (b).
Триггер-защелка фиксирует состояние входного сигнала, поданного на один из его входов (рисунок D.1.2.)
Рис. D.1.3. Схема реализации RS-триггера на элементах И-НЕ.
RS-триггер -- двухвходовый триггер с раздельными входами для установки в 0 или 1 (рисунок D.1.3.) При подачи единичного сигнала на вход R (-X0) триггер переходит в состояние 0 (Y=0, Y1=1), а при подачи на вход S (=X1) единичного сигнала -- в состояние 1 (Y=1, Y1=0). Одновременная подача единичного сигнала на оба входа запрещена. Обычно RS-триггеры бывают синхронизируемыми (вход для синхронизации -- V).
Рис. D.1.4. Схема реализации T-триггера.
T-триггер -- одновходовый триггер со счетным входом: информация подается одновременно на два входа. При подаче сигнала состояние триггера меняется на противоположное (рисунок D.1.4.) Он, как правило, является не синхронизируемым, и позволяет не только хранить информацию, но и осуществлять сложение по модулю 2.
Рис. D.1.5. Схема реализации D-триггера.
D-триггер выполняет функцию задержки входного сигнала на один такт синхронизации (рисунок D.1.5.). Сигнал, появившийся на входе D (=X0) в момент времени T, задерживается в нем и появляется на выходе Y в момент времени T+1.
JK-триггер -- двухвходовый триггер, допускающий раздельную установку состояния 0 и 1, а также смену текущего состояния (режим со счетным входом), осуществляемую при подаче на оба входа единичного сигнала. Вход K в этом триггере соответствует входу R (=X0) RS-триггера, а вход J -- S (=X1).
DF-триггер -- двухвходовый триггер, позволяющий по одному входу реализовать режим D-триггера, а по другому -- модифицировать режим работы. Вход D соответствует X1, а F -- X0. При F=0 DF-триггер сохраняет текущее состояние. Сигнал F=1 устанавливает триггер в состояние 0. При D=1 и F=1 триггер устанавливается в состояние 1.
Триггеры с неустойчивыми состояниями называются вибраторами. Схема с одним неустойчивым состоянием (триггер Шмидта, одновибратор) генерирует импульсный сигнал определенной длительности. Схема с двумя неустойчивыми состояниями называется мультивибратором и служит для генерации последовательности прямоугольных сигналов. Он используется тактовым генератором.
Рис. D.1.6. Реализация регистра.
Регистр -- схема для приема, хранения и передачи n-разрядного блока данных Они используются для промежуточного хранения, сдвига, преобразования и инверсии данных. Регистры выполняются на триггерах и логических элементах. Их число и тип определяются разрядностью слова и назначением регистра. Если регистр не требует предварительного сброса данных (то есть установки всех его ячеек в ноль), то новые данные заменяют в нем старые. Схема регистра показана на рисунке D.1.6.
Рис. D.1.7. Реализация одноразрядного сумматора с переносом знака.
Сумматор -- схема, выполняющая операцию арифметического сложения двух чисел. Различают одно- и многоразрядный (на всю длину суммируемых слов) сумматоры, полный сумматор (с приведением переносов) и полусумматор (с запоминанием переносов).
В зависимости от числа входов сумматоры бывают двухвходовыми и трехвходовыми. В двухвходовом одноразрядном сумматоре на вход подаются два разряда суммируемых чисел, а на выходе формируется результат сложения разрядов по модулю 2 и перенос в следующий разряд. В трехвходовом одноразрядном сумматоре на вход подаются два разряда суммируемых чисел и результат переноса из суммирования предыдущих разрядов, а на выходе -- результат суммирования по модулю 2 и перенос в следующий разряд. Схема трехвходового сумматора показана на рисунке D.1.7.
Дешифратор -- логическая схема, преобразующая входное n-разрядное двоичное слово в единичный сигнал на одном из 2^n входов. Обратную функцию выполняет схема, называемая шифратором. Дешифраторы широко используются в устройствах управления для управления работой микропроцессорами.
Целочисленное АЛУ.
Целочисленное арифметико-логическое устройство является, наверное, первым универсальным АЛУ. Это АЛУ могло работать с целыми числами и вещественными числами с фиксированной точкой [А.В. Нестеренко. ЭВМ и профессия программиста. М.: Просвещение, 1990, пп. 2.1.1 - 2.1.4].
Не смотря на большое число команд микропроцессора, это устройство фактически все команды сводит к девяти элементарным операциям. Все оно приведены в таблице.
Таблица D.1.II. Элементарные операции целочисленного АЛУ.
Операция
Обозначение
Количество операндов
Подсистема выполнения
Сложение
+
Сумматор
Вычитание
-
Cумматор и регистр
Логическое умножение, И
^, &, and
Логические схемы
Логическое сложение, ИЛИ
V, |, or
Логические схемы
Сдвиг влево
<<
Регистр
Сдвиг вправо
>>
Регистр
Инверсия (НЕ)
!,not
Логические схемы
Увеличение на 1, инкремент
++,inc
Сумматор
Уменьшение на 1, декремент
--,dec
Сумматор
Подробнее об устройстве регистров, логических схем и сумматоров смотри приведенные перепечатки ([Информатика в понятиях и терминах. М.: Просвещение, 1991. - стр. 88-93], ["Квант", 1985. -- 9-12, 1986, -- 1-6.]) Именно эти операции выполняются за один такт микропроцессора (см. синхронизирующие импульсы, тактовая частота), и имеют наибольшую скорость выполнения. Они являются единственными командами для MISC-процессоров [Борис Богумирский. Эффективная работа на IBM PC. С.-Пб.: Питер-ПРЕСС, 1985 - 683 с.], основой для операция в RISC-процессорах (смотри раздел E этого выпуска). Фактически все другие операции осуществляются с помощью этих девяти базовых. Так, умножение восьмиразрядных целых чисел A и B выполняются по следующему алгоритму:
1. Обнуляется результат.
2. Если последний разряд числа B -- единица, ток результату прибавляется число A.
3. Число A сдвигается на разряд влево, а число B -- на разряд вправо.
4. Повторяются шаги со второго по третий семь раз.
Заметим, что сдвиг влево на 1 разряд соответствует умножению на два, а сдвиг вправо на один разряд -- целочисленному делению на два.
Команда изменения знака числа будет следующей:
1. Вначале происходит инверсия числа.
2. После этого производится инкремент результата (т.е. к нему прибавляется единица.)
3. Таким образом число переводится в дополнительный код (смотри форматы представления чисел в приложении I, книгу В.А. Григорьева "Микропроцессор i486, кн. 1-4 и книгу "ЭВМ и профессия программиста" Нестеренко.) Команда определения знака числа основывается просто на проверке самого старшего бита (смотри там же.)