ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 24.12.2021

Просмотров: 6687

Скачиваний: 8

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

58 Глава 2. Организация компьютерных систем

А + В

Регистры

^~*

 Входной регистр АЛУ

Входная шина АЛУ

АЛУ

А + В

-Выходной регистр АЛУ

Рис.

 2.2. Тракт данных в обычной фон-неймановской машине

Команды второго типа вызывают два операнда из регистров, помещают их во

входные регистры АЛУ, выполняют над ними какую-нибудь арифметическую или

логическую операцию и переносят результат обратно в один из регистров. Этот

процесс называется циклом тракта данных. В какой-то степени он определяет, что

может делать машина. Чем быстрее происходит цикл тракта данных, тем быстрее

компьютер работает.

Выполнение команд

Центральный процессор выполняет каждую команду за несколько шагов:

1) вызывает следующую команду из памяти и переносит ее в регистр команд;

2) меняет положение счетчика команд, который теперь должен указывать на

следующую команду

1

;

3) определяет тип вызванной команды;
4) если команда использует слово из памяти, определяет, где находится это слово;

5) переносит слово, если это необходимо, в регистр центрального процессора

2

;

1

 Это происходит после декодирования текущей команды, а иногда и после ее выполнения. —

 Примеч.

научи, ред.

2

 Следует заметить, что бывают команды, которые требуют загрузки из памяти целого множества слов

и их обработки в рамках одной-единственной команды. —

 Примеч. научн. ред.


background image

Процессоры 59

6) выполняет команду;

7) переходит к шагу 1, чтобы начать выполнение следующей команды.

Такая последовательность шагов

 (выборка—декодирование—исполнение)

 яв-

ляется основой работы всех компьютеров.

Описание работы центрального процессора можно представить в виде програм-

мы на английском языке. В листинге 2.1 приведена такая программа-интерпрета-
тор на языке Java. В описываемом компьютере есть два регистра: счетчик команд,
который содержит путь к адресу следующей команды, и аккумулятор, в котором

хранятся результаты арифметических операций. Кроме того, имеются внутренние

регистры, в которых хранится текущая команда (instr), тип текущей команды

(instr_type), адрес операнда команды (datajloc) и сам операнд (data). Каждая ко-
манда содержит один адрес ячейки памяти. В ячейке памяти находится операнд,

например кусок данных, который нужно добавить в аккумулятор.

Листинг  2 . 1 . Интерпретатор для простого компьютера (на языке Java)

public class Interp{

static  i n t PC. //PC содержит адрес следующей команды
static  i n t AC; // аккумулятор, регистр для арифметики

static  i n t  i n s t r . //регистр для текущей команды

static  i n t instr_type. //тип команды (код операции)
static mt data_loc. //адрес данных или  - 1 , если его нет

static  i n t data. //содержит текущий операнд
static boolean run_bit = true; //бит. который можно выключить, чтобы остановить машину

public static void interpretCint memory[],  i n t starting_address{
//Эта процедура интепретирует программы для простой машины.

которая содержит команды только с одним операндом из памяти Машина содержит регистр АС

(аккумулятор) Он используется для арифметических действий Например, команда ADD суммирует

число из памяти с АС. Интерпретатор работает до тех пор. пока не будет выполнена команда

HALT, вследствие чего бит run_bit поменяет значение на false. Машина состоит из памяти,

счетчика команд, бита run  b i t и аккумулятора АС Входные параметры состоят из копии
содержимого памяти и начального адреса

PC=starting_address.

while (run_bit) {

instr-memory[PC], //вызывает следующую команду в instr

РС-РС+1. //увеличивает значение счетчика команд
mstr_type=getjnst retype  ( i n s t r ) . //определяет тип команды

data_loc=find_data(instr,  m s t r j t y p e ) . //находит данные  ( - 1 , если данных нет)

1f(datajoc>=0) //если data_lock=-l. //значит, операнда нет

data=memory[data_loc]. //вызов данных

execute(mstr_type.data), //выполнение команды

}

private static  i n t get_instr_type(mt addr) {.}
private static  i n t find_dataCint  i n s t r .  i n t type) {.}

private static void executednt type,  i n t data) {..}

}

Сама возможность написать программу, имитирующей работу центрального

процессора, показывает, что программа не обязательно должна выполняться реаль-
ным процессором, относящимся к аппаратному обеспечению. Напротив, вызывать


background image

60 Глава 2. Организация компьютерных систем

из памяти, определять тип команд и выполнять эти команды может другая про-

грамма. Такая программа называется интерпретатором. Об интерпретаторах мы
говорили в главе 1.

Написание программ-интерпретаторов, которые имитируют работу процессо-

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

Если они решают написать интерпретатор, они должны создать аппаратное обес-

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

терпретируется.

Интерпретатор разбивает команды на маленькие шаги. Таким образом, маши-

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

ными опциями. В сущности, экономия проистекает из самой замены аппаратного

обеспечения программным обеспечением (интерпретатором).

Первые компьютеры содержали небольшое количество команд, и эти команды

были простыми. Но поиски более мощных компьютеров привели, кроме всего про-

чего, к появлению более сложных команд. Вскоре разработчики поняли, что при

наличии сложных команд программы выполняются быстрее, хотя выполнение от-

дельных команд занимает больше времени. В качестве примеров сложных команд

можно назвать выполнение операций с плавающей точкой, обеспечение прямого

доступа к элементам массива и т. п. Если обнаруживалось, что две определенные

команды часто выполнялись последовательно одна за другой, то вводилась новая

команда, заменяющая работу этих двух.

Сложные команды были лучше, потому что некоторые операции иногда пере-

крывались. Какие-то операции могли выполняться параллельно, для этого исполь-
зовались разные части аппаратного обеспечения. Для дорогих компьютеров с вы-
сокой производительностью стоимость этого дополнительного аппаратного

обеспечения была вполне оправданна. Таким образом, у дорогих компьютеров было

гораздо больше команд, чем у дешевых. Однако развитие программного обеспече-

ния и требования совместимости команд привели к тому, что сложные команды

стали использоваться и в дешевых компьютерах, хотя там во главу угла ставилась

стоимость, а не скорость работы.

К концу 50-х годов компания IBM, которая лидировала тогда на компьютер-

ном рынке, решила, что производство семейства компьютеров, каждый из кото-

рых выполняет одни и те же команды, имеет много преимуществ и для самой ком-
пании, и для покупателей. Чтобы описать этот уровень совместимости, компания

IBM ввела термин архитектура. Новое семейство компьютеров должно было иметь

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

ные для высокоэффективных дорогостоящих машин?


background image

Процессоры 61

Решением этой проблемы стала интерпретация. Эта технология, впервые

предложенная Уилксом в 1951 году, позволяла разрабатывать простые дешевые

компьютеры, которые, тем не менее, могли выполнять большое количество ко-
манд. В результате IBM создала архитектуру System/360, семейство совместимых
компьютеров, различных по цене и производительности. Аппаратное обеспечение

без интерпретации использовалось только в самых дорогих моделях.

Простые компьютеры с интерпретированными командами имели некоторые

другие преимущества. Наиболее важными среди них были:

1) возможность фиксировать неправильно выполненные команды или даже

восполнять недостатки аппаратного обеспечения;

2) возможность добавлять новые команды при минимальных затратах, даже

после покупки компьютера;

3) структурированная организация, которая позволяла разрабатывать, прове-

рять и документировать сложные команды.

В 70-е годы компьютерный рынок быстро разрастался, новые компьютеры мог-

ли выполнять все больше и больше функций. Спрос на дешевые компьютеры про-

воцировал создание компьютеров с использованием интерпретаторов. Возможность

разрабатывать аппаратное обеспечение и интерпретатор для определенного набо-

ра команд вылилась в создание дешевых процессоров. Полупроводниковые техно-

логии быстро развивались, преимущества низкой стоимости преобладали над воз-

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

К концу 70-х годов интерпретаторы стали применяться практически во всех

моделях, кроме самых дорогостоящих машин с очень высокой производительнос-
тью (например, Сгау-1 и компьютеров серии Control Data Cyber). Использование

интерпретаторов исключало высокую стоимость сложных команд, и разработчи-

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

Эта тенденция достигла пика своего развития в разработке компьютера VAX

(производитель Digital Equipment Corporation), у которого было несколько сотен
команд и более 200 способов определения операндов в каждой команде. К несчас-

тью, архитектура VAX с самого начала разрабатывалась с использованием интер-
претатора, а производительности уделялось мало внимания. Это привело к появ-
лению большого количества команд второстепенного значения, которые трудно

было выполнять сразу без интерпретации. Данное упущение стало фатальным
как для VAX, так и для его производителя (компании DEC). Compaq купил DEC

в 1998 году.

Хотя самые первые 8-битные микропроцессоры были очень простыми и со-

держали небольшой набор команд, к концу 70-х годов даже они стали разрабаты-

ваться с использованием интерпретаторов. В этот период основной проблемой для
разработчиков стала возрастающая сложность микропроцессоров. Главное преиму-

щество интерпретации заключалось в том, что можно было разработать простой

процессор, а вся сложность сводилась к созданию интерпретатора. Таким образом,


background image

62 Глава 2. Организация компьютерных систем

разработка сложного аппаратного обеспечения замещалась разработкой сложного
программного обеспечения.

Успех Motorola 68000 с большим набором интерпретируемых команд и одно-

временный провал Zilog Z8000, у которого был столь же обширный набор команд,
но не было интерпретатора, продемонстрировали все преимущества использования
интерпретаторов при разработке новых машин. Успех Motorola 68000 был несколь-
ко неожиданным, учитывая, что Z80 (предшественник Zilog Z8000) пользовался
большей популярностью, чем Motorola 6800 (предшественник Motorola 68000).

Конечно, важную роль здесь играли и другие факторы, например то, что Motorola

много лет занималась производством микросхем, a Exxon (владелец Zilog) долгое
время был нефтяной компанией.

Еще один фактор в пользу интерпретации — существование быстрых постоян-

ных запоминающих устройств (так называемых командных ПЗУ) для хранения
интерпретаторов. Предположим, что для выполнения обычной интерпретируемой
команды Motorola 68000 интерпретатору нужно выполнить 10 команд, которые

называются

 микрокомандами,

 по 100 не каждая, и произвести 2 обращения к опе-

ративной памяти по 500 не каждое. Общее время выполнения команды составит,
следовательно, 2000 не, всего лишь в два раза больше, чем в лучшем случае могло

бы занять непосредственное выполнение этой команды без интерпретации. А если
бы не было специального быстродействующего постоянного запоминающего
устройства, выполнение этой команды заняло бы целых 6000 не. Таким образом,

важность наличия командных ПЗУ очевидна.

RISC и CISC

В конце 70-х годов проводилось много экспериментов с очень сложными команда-

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

В компании IBM группа разработчиков во главе с Джоном Коком противосто-

яла этой тенденции; они попытались воплотить идеи Сеймура Крея, создав экспе-

риментальный высокоэффективный мини-компьютер

 801.

 Хотя IBM не занима-

лась сбытом этой машины, а результаты эксперимента были опубликованы только

через несколько лет, весть быстро разнеслась по свету, и другие производители

тоже занялись разработкой подобных архитектур.

В 1980 году группа разработчиков в университете Беркли во главе с Дэвидом

Паттерсоном и Карло Секвином начала разработку процессоров VLSI без исполь-

зования интерпретации. Для обозначения этого понятия они придумали термин

RISC

 и назвали новый процессор RISC I, вслед за которым вскоре был выпущен

RISC II. Немного позже, в 1981 году, Джон Хеннеси в Стенфорде разработал и вы-
пустил другую микросхему, которую он назвал

 MIPS.

 Эти две микросхемы разви-

лись в коммерчески важные продукты SPARC и MIPS соответственно.

Новые процессоры существенно отличались от коммерческих процессоров того

времени. Поскольку они не были совместимы с существующей продукцией, раз-