Процессоры ЭВМ. Рабочий цикл
Из процессоров машины некоторые называются центральными, другие — периферийными. Как правило, к периферийным относят процессоры, предназначенные для ввода или выдачи информации. Общий принцип действия всех процессоров одинаков. Наиболее сложны центральные процессоры. Именно их мы и рассмотрим подробнее.
Все коды, присутствующие в запоминающих устройствах процессора, делятся на команды, управляющие коды и операнды. Как правило, команды характеризуются так называемым форматом. Понятие о формате получим, если укажем, из каких частей состоит команда и сколько символов должно входить в каждую такую часть.
При описании формата мы ограничимся лишь указанием составных частей, входящих в состав команды, оставляя в стороне число символов. Будем считать, что каждая команда имеет формат, приведенный на рис. 2. В действительности форматы команд бывают значительно более сложными и не все команды имеют один и тот же формат (обычно типы команд делятся на группы, каждой из которых соответствует свой формат).
Частями команды в нашем примере являются код операции и три кода адресов (первого, второго и третьего). Кодами адресов (или коротко адресами) обычно называют номера ячеек некоторого ЗУ, в нашем случае — оперативной памяти. Ячейками называются наименьшие части ЗУ, к которым данный процессор имеет отдельный доступ. В оперативной памяти каждая ячейка имеет имя, иначе говоря, номер. Это имя и является ее адресом.
В зависимости от кода операции команда обозначает некоторое действие, которое должно быть выполнено над кодами, находящимися во время выполнения команды в ячейках, имеющих соответствующие номера (в простейшем случае — указанные в первом и втором адресах команды). Результат операции должен быть записан в ячейку, номером которой является третий адрес команды.
Описывая принцип действия процессора, на схеме (рис. 3) укажем лишь принадлежащие ему ЗУ. Устройство управления и операционное устройство показывать не будем. Их функции опишем в тексте, объясняющем работу процессора. На рис. 3 показана лишь одна группа ЗУ связи. Таких групп может быть столько, сколько в состав ЭВМ входит процессоров, контактирующих с данным.
Условимся об одном приеме, удобном при описании функционирования процессора. Имя ячейки будем считать также именем величины, хранящейся в этой ячейке, а содержимое ячейки — значением указанной величины. В формулах, описывающих операции над содержимым ячеек, будем писать имена ячеек. Это будет касаться лишь ячеек, именами которых являются буквы.
Например, x+y=z означает, что содержимое ячейки х, сложенное с содержимым ячейки у, равно содержимому ячейки z. Формула х+1=z означает, что содержимое ячейки х, увеличенное на 1, равно содержимому ячейки z. Запись zi будет означать содержимое ячейки, имя которой содержится среди ячеек z1, z2, ..., zN, причем значение индекса ее содержится в ячейке с именем i.
Примеры приведены для случаев, когда в ячейках памяти записаны числа. Если там записаны другие коды, то операции в формулах должны быть другие, допустимые для хранимых в ячейках кодов.
Приступим теперь к описанию работы центрального процессора, ЗУ которого приведены на рис. 3.
В момент запуска процессора в ячейку l (счетчик команд) должна быть произведена запись некоторого адреса (номера ячейки), в ячейку t—запись числа 1, в ячейку ω — запись числа 0 или числа 1. Эти действия совершает либо оператор (человек) с пульта управления, либо другой процессор (для которого при этом ячейка l, а также ячейки t и ω, должны быть регистрами контакта). После этого работа процессора протекает автоматически следующим образом.
1. Содержимое ячейки t сравнивается с единицей. Если оно совпадает с единицей, то выполняется п. 2, иначе (если оно совпадает с нулем) снова выполняется п. 1.
2. Содержимое ячейки zl переносится из оперативной памяти в регистр команд r. Далее выполняется п. 3.
3. Содержимое ячейки l увеличивается на единицу. Далее см. п. 4.
4. Выполняется операция, которая указана в ячейке 8. Далее см. п. 20.
20. Далее выполняется п. 1.
Приведенное описание работы является самым укрупненным. Способ выполнения операции θ в нем не указан. Пункт 20 включен для удобства дальнейшей детализации. Описание работы процессора можно представить в виде блок-схемы (рис. 4). Пункты, содержащие проверку какого-либо условия, изображают ромбами, расположенными так, что одна из диагоналей их вертикальна. Из каждого ромба исходят 2 стрелки, одна из которых помечена цифрой 0 (соответствует случаю, когда проверка условия дает ответ «нет»), а другая — цифрой 1 (соответствует случаю, когда проверка условия приводит к ответу «да»). Этапы работы процессора, требующие выполнения определенных действий, изображены прямоугольниками, расположенными на чертеже так, что одна из сторон каждого вертикальна. Из каждого прямоугольника может исходить только одна стрелка. Внутри блоков (ромбов и прямоугольников) записаны номера тех пунктов нашего описания, которым они соответствуют.
Приведенное грубое описание работы процессора называют схемой его рабочего цикла. Название это легко понять, рассматривая рис. 4, на котором отчетливо видно, что блоки (пункты описания) образуют замкнутую (циклическую) цепочку.
Схема рабочего цикла процессора должна быть уточнена. Для этого следует развернуть п. 4 рабочего цикла. При этом получим (рис. 5):
4. Если 0 означает некоторую операцию над данными, выполняется п. 5, иначе см. п. 9.
5. Если 9 означает одноместную[17] операцию, то см. п. 6, если двухместную, то см. п. 7.
6. Операция, соответствующая 0, выполняется над zi, результат записывается в zh. Далее см. п. 8.
7. Операция, соответствующая 6, выполняется над zi и zj. Результат записывается в zh. Далее см. п. 8.
8. Если результат операции отрицателен, в ячейку ω (логическую) записывается цифра 1, в остальных случаях (если он неотрицателен) — цифра 0. Далее см. п. 20.
9. Если θ означает операцию перехода, то выполняется п. 10, иначе см. п. 14.
10. Если θ означает операцию условного перехода[18], то выполняется п. 11, иначе (если — безусловного перехода) выполняется п. 13.
11. Если ω=0, то см. п. 12, иначе (если ω = 1) см. п. 13.
12. В ячейку l записывается код, одинаковый с кодом, находящимся в ячейке i. Далее см. п. 20.
13. В ячейку l заносится код, одинаковый с кодом, находящимся в ячейке j. Далее см. п. 20.
14. Если θ означает операцию останова, то см. п. 15, иначе см. п. 16.
15. Производится запись числа 0 в ячейку t. Далее см. п. 20.
16. Если θ означает операцию контакта, то выполняется п. 17. Иначе (если θ означает операцию обмена) выполняется п. 18.
17. Производится соответствующая θ операция контакта. Далее см. п. 20.
18. Производится соответствующая θ операция обмена. Далее см. п. 20.
Из приведенной детализации п. 4 мы видим, что среди операций, которые может выполнять центральный процессор, содержатся следующие группы: 1) операции над данными; 2) операции перехода (условного и безусловного); 3) операция останова; 4) операции контакта; 5) операции обмена.
Наборы операций в каждой группе могут быть различными. Например, операциями над данными могут быть сложение, вычитание и др. (если данными являются числа); операции контакта заключаются в прочитывании содержимого контактных ячеек и соответствующей реакции на него или в записи кодов в контактные ячейки, т. е. в получении информации от другого процессора или в передаче информации ему.
Операция обмена заключается в переносе кодов из основной памяти процессора (в данном случае — оперативной) в буферную или в переносе данных из буферной памяти в основную.
Для того чтобы получить полное описание работы процессора, необходимо еще более детализировать ряд пунктов, вошедших в детализацию рабочего цикла. Читатель понимает, что (реальное) устройство ЭВМ во много раз сложнее (воображаемого) устройства машин Тьюринга. Поэтому и описание работы ЭВМ очень сложно и громоздко.
Тем не менее мы уже теперь можем сделать вывод, что работа процессора сама имеет характер выполнения некоторого алгоритма (описание работы процессора вполне допустимо считать алгоритмом в интуитивном смысле).
Если соответствующим образом расположенные в оперативной памяти процессора команды назвать программой, введенной в машину, то указанный алгоритм можно назвать алгоритмом выполнения программы, введенной в машину. Но тогда напрашивается истолкование программы, введенной в машину, в качестве алгоритма. Ни одна из логических теорий нам возможности такого истолкования не предоставляет.
В этом параграфе мы подробно остановились на работе центрального процессора. Рассмотрим теперь другие процессоры. Несмотря на все их разнообразие, в общих чертах принцип их действия тот же, что и принцип действия центрального процессора. Основная разница между процессорами заключается в различии их функций, т. е. в наборах операций, которые они выполняют.
Процессор, представляющий собой устройство ввода с перфокарт, имеет свои систему запоминающих устройств, устройство управления и операционное устройство (рис. 6).
Его главным запоминающим устройством является колода перфокарт. Операции, которые выполняет этот процессор,— это операции обмена: перенос информации с перфокарт в ячейки буферной памяти. Кроме ЗУ на перфокартах и буферной памяти, этот процессор имеет ячейку пуска-останова и, которая может хранить в себе 0 или 1, счетчик перенесенных кодов U и счетчик буферной памяти s.
Перед началом работы процессора в ячейку и должна быть записана единица, в ячейку s — нуль, а в ячейку U — число кодов, которые должны быть перенесены с перфокарт в буфер. ЗУ на перфокартах обладает тем свойством, что считывание с него кода, к которому возможен доступ, приводит к тому, что этот код удаляется из ЗУ (перфокарта извлекается из колоды, протягивается через читающую систему и падает в так называемый карман). При этом доступным делается следующий за ним код, а число кодов, хранящихся в ЗУ, уменьшается на единицу.
Работа процессора ввода заключается в следующем.
1. Если значение и равно единице, то см. п. 2, иначе снова выполняется п. 1.
2. Величина s увеличивается на 1, а величина U уменьшается на 1. Далее см. п. 3.
3. Очередной код с перфокарт переносится в ячейку ws . Далее см. п. 4.
4. Если U=0, то выполняется п. 5, иначе выполняется п. 1.
5. В ячейку и производится запись нуля. Далее см. п. 1.
Программа процессора заключается в выполнении одного и того же действия до исчерпания содержимого регистра U. Поэтому нет необходимости хранить программу в виде команд в запоминающих устройствах, как это было в центральном процессоре. После конца работы процессора регистры и и U содержат нули, а в регистре s стоит число, равное максимальному адресу ячейки, хранящей введенную информацию.
Ячейки и, U, s являются контактными с тем процессором, который может получить информацию из буферной памяти.
Пульт управления ЭВМ тоже является процессором. Его главная память состоит из некоторого числа ячеек, которые доступны человеку-оператору либо для записи (различные так называемые тумблерные регистры), либо для чтения (ячейки, связанные с сигнальными лампочками той или иной конструкции). В последнее время в состав пульта управления стали включать электрическую пишущую машинку, объединяющую в себе два запоминающих устройства: входное — ячейку, в которой накапливается текст при печатании его оператором (после заполнения такой ячейки ее содержимое переносится в буферную память), и выходное — рулонная бумага, на которой пишущая машинка автоматически печатает текст, переносимый для этого из буферной памяти. Посредством буферной памяти и ряда контактных ячеек пульт управления связан с другими процессорами.
Что такое программа
Прежде всего заметим, что алгоритм работы процессора и программа его работы — это разные вещи. Некоторые процессоры (например центральные) при решении каждой задачи имеют свою программу, и алгоритм их работы является алгоритмом выполнения программ. В зависимости от их содержания (вида и взаимосвязи команд) такие процессоры могут перерабатывать информацию, находящуюся в ЗУ по-разному. Другие процессоры имеют свой алгоритм работы, но этот алгоритм работы не является алгоритмом выполнения программ. Примером является описанный в § 2 процессор ввода. Таковы же обычно и пульт управления и процессор выдачи.
В некоторых ЭВМ сложной конструкции процессоры ввода могут быть программными. Что же такое программа? Когда она присутствует и когда ее нет? Эти вопросы тонкие и ответить на них не так-то просто. Все же попытаемся это сделать. Прежде всего расскажем о том, как возникают программы. Особенности программ зависят от особенностей ЭВМ, которая их должна выполнять. Поэтому разъясняя, что такое программа, мы будем ее иллюстрировать программами для случая описанной выше структуры программного процессора.
Программы сперва составляют на бумаге и, естественно, что в таком виде они существенно отличаются от программ, находящихся в ЗУ процессора. Итак, сперва будем говорить о программах, написанных на бумаге.
Условимся, что адресами ячеек оперативной памяти являются натуральные числа. Для определенности положим, что каждый' адрес записывается в виде четырехзначного числа. Код операции будем записывать в виде двузначного числа.
Тогда командой назовем строку, содержащую код операции и три адреса[19], разделенные пробелами. При этом условимся в каждой команде эти элементы располагать так: сперва код операции, потом первый, второй и третий адреса.
Примерами команд могут служить:
01 2425 3274 6153
34 2601 0000 0001
Смысл команд можно описать в виде таблицы, которую обычно называют системой команд. В таких таблицах мы сохраним правила записи формул, о которых условились в § 2. Допустим, что для нашего процессора система команд задана табл. 4.
В табл. 4 команда с кодом 13 фактически означает: от процессора ввода с перфокарт через буферную память получить п чисел. Аналогично команда с кодом 11 означает: ввести в буферную память процессора печати п чисел и заслать соответствующую информацию в его контактные ячейки. Команда с кодом 12 требует выполнения лишь первой части того, что требует команда «13»; ввода п чисел с перфокарт в буферную память. Их можно перенести в собственную память программного процессора оттуда по команде «14». Операции «12» и «13» и соответствующие виды команд введены для того, чтобы в тех случаях, когда это допускает решаемая задача, программный процессор, затребовав числа с перфокарт, не ожидал конца работы процессора ввода, а продолжал выполнение программы.
Последние четыре вида команд предусматривают контакт (с другими процессорами) и обмен информацией (с ними). Процесс выполнения таких команд будет разъяснен несколько позже (в §4).
Приказом будем называть строку, составленную из адреса, скобки и команды, записанных в том порядке, в котором они перечислены. Например, приказом является
3361) 02 0001 0003 0235
Вид команды | Код операции | Описание действий, предписываемых командой | |||
i | j | k | вычислить zi+zj и записать в zk | ||
i | j | k | вычислить zi-zj и записать в zk | ||
i | j | k | вычислить zi*zj и записать в zk | ||
i | j | k | вычислить zi:zj и записать в zk | ||
i | k | вычислить и записать в zk | |||
i | k | число zi записать в ячейке zk | |||
i | j | условный переход к команде zi, если ω=0, и к команде zi, если ω=1 | |||
j | переход к команде zj | ||||
останов процессора: запись числа 0 в ячейку t | |||||
i | n | n чисел zi, zi+1, …, zi+n-1 выдать на печать | |||
n | n чисел ввести в буферную память с перфокарт | ||||
n | k | n чисел ввести с перфокарт и записать их в ячейки zk, zk+1, …, zk+n-1 | |||
n | k | n чисел из буферной памяти перенести в ячейки zk, zk+1, …, zk+n-1 | |||
Θ | i | j | k | 15≤θ≤99 и θ=10 или θ=00 | останов процессора: запись числа 0 в ячейку t |
Адрес, стоящий в начале приказа, будем называть собственным адресом приказа.
Любой столбец приказов, если хотя бы один из них имеет собственный адрес 0001, будем называть программой, написанной на бумаге.
Хотя это и не имеет теоретического значения, всегда будем приказы размещать в порядке возрастания их собственных адресов. Как читатель сейчас поймет, практическое значение это имеет.
Программа, написанная на бумаге, будет превращена в программу, записанную в машине (в процессоре), если каждую команду поместить в ячейку оперативной памяти, адрес (номер) которой одинаков с собственным адресом приказа. Приведем пример составления программы.
Предположим, что нужно составить программу решения произвольного квадратного уравнения
ax2+bx+c=0 (а≠0),
если заданы числа а, b, с. Формула решения этого уравнения имеет вид
.
Корни уравнения могут оказаться действительными или комплексными. В первом случае будем печатать каждый из них; во втором случае это неудобно, так как . Тогда, очевидно, достаточно напечатать только α и β. Но как, глядя на два напечатанных числа, узнать, являются ли они числами х1 и х2 или числами αи β? Для того чтобы можно было это узнать, условимся предпосылать им третье число, которое должно быть равно 2, если корни действительные, и 4, если они комплексные.
Алгоритм решения нашей задачи можно записать в следующем виде.
1. Ввести в машину числа[20] а, b, с, z=2, y=0 и перейти к п. 2.
2. Вычислить величины 2а, b2—4ас, —b. Обозначить их соответственно е, d, g и перейти к п. 3.
3. Если d≥0, перейти к п. 4, иначе перейти к п. 5.
4. Вычислить , и обозначить их соответственно x1 и х2. Перейти к п. 6.
5. Вычислить числа g:e, , обозначить их[21] соответственно x1 и х2. Умножить z само на себя и результат (он равен 4) обозначить через z. Перейти к п. 6.
6. Печатать числа z, х1, х2. Конец.
Составляя приведенный алгоритм, мы уже заранее учитывали порядок действий в программе, чего, может быть, читатель еще не умеет. Программу, соответствующую этому алгоритму, можно написать так: 0001) 123 0000 0005 0101
Этот приказ значит: ввести 5 чисел и записать их в ячейки оперативной памяти с номерами 101, 102, 103, 104, 105. Первые три число — это a, b, c, а последние — это z=2, y=0.
Выполняя приказы
0002) 03 0102 0102 0110
0003) 03 0101 0104 0111
0004) 03 0104 0111 0112
0005) 03 0112 0103 0112
0006) 02 0105 0102 0110
0007) 02 0110 0112 0112
последовательно получим
в ячейке №0110 число b2;
в ячейке №0111 число 2а;
в ячейке №0112 число 4a;
в ячейке №0112 число 4ac;
в ячейке №0110 число — b;
в ячейке №0112 число d=b2—4ас.
Эта группа приказов соответствует п. 2 алгоритма.
При выполнении последнего приказа в ячейке со окажется нуль, если d≥0, и единица, если d<0. Поэтому п. 3 алгоритма решения квадратного уравнения будет реализован, если мы составим приказ условного перехода:
0008) 07 0009 0050 0000
Во втором адресе последней команды мы написали 0050, потому что уверены, что ячеек, которые нам потребуются для записи приказов, соответствующих случаю d1230, немного, и ячейка 0050 не будет занята. Далее составим приказы
0009) 05 0112 0000 0112
0010) 02 0110 0112 0113
0011) 01 0110 0112 0114
0012) 04 0013 0111 0201
0013) 04 0114 0111 0202
0014) 06 0104 0000 0200
Эта группа приказов соответствует п. 4 алгоритма решения квадратного уравнения. В соответствии сними последовательно будет получено
в ячейке № 0112 число ;
в ячейке № 0113 число ;
в ячейке № 0114 число ;
в ячейке № 0201 число x1;
в ячейке № 0202 число х2;
в ячейке № 0200 число 2.
0015) 11 0200 0003 0000
0016) 09 0000 0000 0000
В силу этих приказов числа 2, Xi и х2 будут напечатаны. Затем процессор будет остановлен.
Теперь составим приказы, которые выполнялись бы в случае d<0, т. е. соответствующие п. 5 алгоритма решения квадратного уравнения. Первый из этих приказов имеет собственный адрес 0050.
Выполняя приказы
0050) 04 0110 0111 0201
0051) 02 0105 0112 0112
0052) 05 0112 0000 0112
0053) 04 0112 0111 0202
0054) 03 0104 0104 0200
0055) 08 0000 0015 0000
будем последовательно иметь
в ячейке № 0201 число (—b):(2а);
в ячейке № 0112 число —d;
в ячейке № 0112 число ;
в ячейке № 0202 число ;
в ячейке № 0200 число 4.
Наконец, последний приказ означает безусловный переход к приказу, имеющему собственный адрес 0015. На этом программа закончена.
Итак, мы ознакомились с составлением программы. Программисты разработали целый ряд приемов, позволяющих облегчить эту очень тяжелую, но и очень важную работу. О некоторых методах мы будем говорить ниже, хотя методика программирования и не составляет предмета данной книги.
Как уже было сказано, для решения задачи программа должна быть введена в машину. При этом в ячейки должны быть записаны только команды (а не полные приказы); собственные адреса, содержащиеся в приказах, указывают, в какие ячейки должны быть помещены команды, входящие в состав этих приказов. Ячейки запоминающего устройства представляют собой приборы, устойчиво сохраняющие свое состояние и меняющие его только в момент записи в них нового кода. Каждое состояние соответствует некоторому содержимому ячейки. Состояния, соответствующего ее пустоте, нет. Так устроены ЭВМ (почему так — это вопрос технический; в этой книге ответ на него не может быть дан). Кроме того, исходные данные и результаты тоже фиксируются в ячейках и физически могут иметь ту же форму, что и команды.
Ни один инженер и ни один математик, анализируя совокупность состояний ячеек программного процессора, не может сказать, содержится ли в них программа или нет, или, если хотите, всегда может сказать, что какая-то программа там есть. Конечно, если ему заранее не известно, что в ЭВМ введена такая-то программа.
Иногда приходится слышать афоризм: «Машина без программы — ничто. Машина с программой — все!» Очевидно, этот афоризм неверен. Действительно, чем отличается машина без программы от машины с программой? Только состоянием некоторых своих элементов (именно тех, из которых сделаны запоминающие устройства). Образно говоря, различие между машиной в первом и во втором случае такое же, как между винтовкой, заряженной и поставленной на предохранитель, и той же винтовкой, заряженной и взведенной. Функционирование винтовки, поставленной на предохранитель и взведенной при нажиме на спусковой крючок будет различным, хотя физически винтовка в обоих случаях одна и та же.
Какова бы ни была программа, введенная в ячейки собственного ЗУ программного процессора, он, будучи приведенным в действие, выполняет только свой алгоритм, пример которого приведен в § 2. Таково же поведение и всех других процессоров. Каждый из них выполняет свой алгоритм. Но алгоритм программного процессора подобран так, что с точки зрения пользователя, составившего по определенным правилам программу, процессор расчленяет свои исходные данные на «программу в машине» и ее исходные данные и выполняет эту программу. Это значит, что алгоритм процессора — алгоритм выполнения программы. Алгоритмы других процессоров имеют вспомогательное значение.
Если трактовать программы на бумаге и программы в машине как предложения некоторых языков, то наличие алгоритма их выполнения приводит к мысли, что программы в обеих формах являются алгоритмами. Но, конечно, не в смысле классических теорий, а пока что в интуитивном смысле.
Особенности современных ЭВМ
В § 2 командам контакта и обмена посвящены пп. 16, 17, 18 описания работы центрального процессора. Детализируем эти пункты. Число операций контакта и обмена зависит от количества процессоров, с которыми связан данный процессор, и от особенностей контактирующихся процессоров. Мы, для пояснения сущности контакта и обмена, ограничимся рассмотрением этих процессоров в случае связи центрального процессора и процессора ввода.
Итак, предположим, что 6 представляет собой операцию контакта. Такой контакт в описываемом (упрощенном) случае может преследовать только одну цель — ввод информации (у нас — с перфокарт). Мы имеем три операции контакта и обмена (см. систему команд в табл. 4): θ=12— операция контакта, θ = 13 — операция контакта и обмена, θ = 14— только обмена. Детализацию выполнения этих операций получим, если вместо пп. 16—18, приведенных
в §2, напишем:
16. Если u=0, то перейти к п. 17, иначе вернуться к выполнению п. 16 (т. е. ждать конца работы процессора ввода).
17. В ячейку U записать число из ячейки j, а в ячейку s записать нуль. Перейти к п. 18.
18. Если θ = 14, то см. п. 23, иначе см. п. 19.
19. В ячейку и производится запись числа 1. Далее
см. п. 21.
21. Если θ = 13, то см. п. 20, иначе перейти к п. 22.
22. Если u≠1(т. е. процессор ввода не работает), то см. п. 23, иначе снова перейти к п. 22 (т. е. ждать конца работы процессора ввода).
23. В ячейку zk записать число из ячейки ws+1, значение k увеличить на 1, значение s увеличить на 1, см. п. 24.
24. Если s≠U, то вернуться к п. 23, иначе см. п. 20. Блок-схема этой части алгоритма показана на рис. 7.
Мы видим, что операция контакта в данном случае представляет собой запуск другого процессора. В общем случае такие операции могут иметь и другое назначение. Операция обмена представляет собой перенос данных в буферную память (или из нее в основную память процессора). Если в момент выполнения операции контакта или обмена смежный процессор работает, может происходить приостановка работы данного процессора. В нашем примере так и делается.
Заметим, что как сами процессоры, так и способы контакта и обмена между ними, в реальных ЭВМ бывают очень разнообразными. Но принцип их действия один и тот же, и выше мы его пояснили на примере.
Современная ЭВМ, как уже было сказано в § 1, — это система взаимосвязанных процессоров. Связь между процессорами осуществляется с помощью буферных и контактных ЗУ.
Схема, на которой изображена эта система и указаны главнейшие функции процессоров, называется схемой архитектуры ЭВМ. На такой схеме обычно указывают и каналы связи. Мы их не рассматривали. Заметим, что они тоже могут быть истолкованы как процессоры. Однако такое истолкование каналов не нужно. Заметим только, что каналы, применяемые в данное время в составе ЭВМ, бывают двух видов, — мультиплексные, допускающие контакт с большим числом процессоров, но осуществляющие этот контакт медленно, и селекторные, могущие осуществлять контакт с небольшим числом процессоров, но с очень высокой скоростью обмена.
Приведем примеры архитектуры некоторых современных ЭВМ. На рис. 8 изображена архитектура современной ЭВМ, допускающей параллельную работу процессоров. На этом рисунке процессоры изображены в виде блоков, общие части которых представляют собой ЗУ контакта и обмена. Такое изображение архитектуры ЭВМ неудобно, потому что число процессоров в современной ЭВМ может быть очень большим, а обмен и контакты между ними — очень сложными.
Условимся процессор изображать в виде прямоугольного блока с поясняющей записью внутри, контактные и буферные ЗУ изображать кружочками. Каналы будем изображать двойными линиями (при этом пометка цифрой 1 будет говорить о том, что канал мультиплексный, а пометка цифрой 2 - о том, что он селекторный). Принадлежность контактного и буферного ЗУ процессору будем изображать, соединяя изображающие их блоки одинаковыми линиями. Та же архитектура, которая показана на рис. 8, но с новыми обозначениями, приведена на рис. 9.
Идея, в соответствии с которой ЭВМ рассматривается как система процессоров, и связанное с этой идеей выделение в особую категорию контактных ЗУ, оказалась очень плодотворной. Конструкторы ЭВМ стали искать наиболее совершенные способы осуществления контактов. В результате этих усилий были изобретены и включены в состав ЭВМ новые устройства (с нашей точки зрения, этот прогресс представляет собой внесение изменений в конструкцию процессоров и, как следствие, в алгоритмы их функционирования).
Одной из плодотворных находок явилась система прерываний. Сущность ее заключается в следующем (рис. 10). Однобуквенные контактные ячейки (обычно допускающие запись в них либо цифры 0, либо цифры 1) объединяют в некоторую группу, называемую регистром прерываний. Различные процессоры машины и даже некоторые элементы данного процессора могут в соответствующий разряд регистра прерываний записать 1. Наличие хотя бы в одном разряде регистра прерываний цифры 1 создает так называемую ситуацию прерывания.
Кроме регистра прерываний р обычно в состав процессора включают еще так называемый регистр маски. Этот регистр т содержит столько же одноразрядных ячеек, сколько их в регистре прерываний. Если в некотором разряде регистра маски стоит 0, то одноименный с ним разряд регистра прерываний считается замаскированным. Если же в указанном разряде регистра маски стоит 1, то одноименный с ним разряд регистра прерываний считается незамаскированным.
Кроме двух указанных регистров в состав процессора должны быть включены один или несколько наборов ячеек, которые служат для дублирования основных ячеек устройства управления (таких, как регистр команд, счетчик команд, ячеек ω, ячейка t и другие, если это надо), и один набор аналогичных ячеек, доступных только для чтения хранимых в них фиксированных кодов.
При выполнении каждого рабочего такта устройство управления «опрашивает» регистр прерываний и, если находит в нем незамаскированные единицы, производит прерывание, которое заключается в том, что коды, стоящие в регистре команд, счетчике команд, ячейках ω и t и т. д., переносятся в соответствующие ячейки одного из дублирующих наборов, а на место этих кодов в управляющие ячейки записываются коды, взятые из упомянутого набора ячеек с фиксированными содержимыми.
В результате описанного, вместо выполнения очередной команды программы, производится «скачок» к команде, стоящей в ячейке с заранее заданным адресом. В этой ячейке должна стоять первая команда специальной программы, называемой программой обработки прерываний.
Таким образом, выполнение основной программы оказывается прерванным, и начинает работать вспомогательная программа. Отсюда происходит название описанного процесса «прерывание».
Программа обработки прерываний должна определять реакцию процессора на соответствующий сигнал прерывания (единицу в разряде регистра прерываний). Обычно программа обработки прерываний переносит содержимое регистра прерываний в рабочую ячейку, стирает все единицы в регистре прерываний и затем уже «обрабатывает» прерывание (т. е. код, взятый из регистра прерываний).
Если в процессоре имеется только один набор дублирующих регистров, то программа обработки прерываний, получив «управление», прежде всего маскирует весь регистр прерываний, с тем чтобы новое прерывание, происшедшее во время ее работы, не привело к утрате информации, находящейся в регистрах дублирующего набора. Если же дублирующих наборов несколько, то подобная предосторожность может быть излишней.
В системе команд машины должны содержаться команды для считывания содержимого регистра прерываний в рабочую ячейку, для записи маски (специально составленного кода) из рабочей ячейки в регистр маски и, наконец, команда возврата к продолжению выполнения «прерванной» программы. По такой команде коды из ячеек дублирующего набора переносятся в соответствующие управляющие регистры, в результате чего прерванная программа продолжает выполняться так, будто прерывания не было.
Наличие в составе центрального процессора системы прерывания изменяет структуру его рабочего цикла. Например, рабочий цикл упрощенного центрального процессора, описанный в § 2, заменится следующим.
1. Содержимое ячейки t сравнивается с 1. Если оно совпадает с 1, то выполняется п.2°, иначе (если оно совпадает с 0) снова выполняется п. 1.
2°. Над кодами р и т производится операция поразрядного умножения. Если результат совпадает с 0, то см. п. 2, иначе (если не совпадает) см. п. 3°.
2. Содержимое ячейки zl переносится из оперативной памяти в регистр команд r. Далее выполняется п. 3.
3. Содержимое ячейки l увеличивается на единицу. Далее выполняется п. 4.
4. Выполняется операция, которая указана в ячейке 9. Далее см.
п. 20.
3°. Содержимое ячеек l, ω, t, p записывается соответственно в ячейках l', ω', t', p'. Далее содержимое ячеек U, ωо, t0 записывается соответственно в ячейках l, ω, t. В ячейку р производится запись нуля. Далее см. п. 2.
20. Далее выполняется п. 1.
Блок-схема видоизмененного рабочего цикла упрощенного центрального процессора приведена на рис. 11 (ср. с рис. 4).
Современные ЭВМ обладают еще многими другими устройствами, повышающими их эффективность и удобство применения, однако мы ограничимся уже сказанным.
Отметим лишь, что теперь созданы ЭВМ, допускающие одновременное обслуживание большого числа пользователей, каждому из которых предоставлен самостоятельный пользовательский пульт управления, имеющий в своем составе достаточно эффективные средства обмена (электрическую пишущую машинку и нередко — телевизор, на экран которого может выдаваться информация из машины). Такие пульты управления называются терминалами. Каждый терминал является, понятно, разновидностью процессора. Архитектура машины, приспособленной для такого применения, показана на рис. 12.
Большой интерес представляют также ЭВМ, содержащие в своем составе несколько центральных проц