Вычислительная машина и мозг - Джон фон Нейман
Потребность в специальном органе памяти
Принцип только одного органа для каждой основной операции требует, однако, большого количества органов, предназначенных для пассивного хранения чисел – результатов различных частичных, промежуточных вычислений. Иными словами, каждый такой орган должен быть способен сохранить число, полученное от другого органа (предварительно стерев число, которое было сохранено ранее), и воспроизвести его по запросу, а именно – передать его некоему третьему органу. Такой орган называется регистром памяти, совокупность подобных органов – памятью, а количество регистров в памяти – емкостью этой памяти.
Теперь перейдем к описанию основных способов управления, применяющихся в цифровых машинах. Наилучший способ это сделать – описать два основных типа и рассмотреть некоторые очевидные принципы их сочетания.
Управление с помощью управляющих точек
Первый широко распространенный метод управления можно описать (с некоторыми упрощениями и допущениями) следующим образом.
Машина содержит некоторое количество органов логического контроля, называемых управляющими точками. (Количество таких управляющих точек может быть весьма велико. В некоторых новейших машинах оно достигает нескольких сотен.)
При самом простом способе использования данной системы каждая управляющая точка связана с одним из органов основных операций, который она приводит в действие, а также с регистрами памяти, одни из которых поставляют числовые входные данные для этой операции, другие – принимают ее результат. После определенной задержки (достаточной для выполнения операции) или получения сигнала «выполнено» (при вариабельной длительности операции, если максимальная продолжительность не определена или слишком велика, требуется дополнительная связь с органом, выполняющим данную основную операцию) управляющая точка задействует следующую управляющую точку, своего «преемника». Эта точка действует аналогичным образом согласно собственным связям, и т. д. В отсутствие дальнейших действий данная система обеспечивает схему безусловного, бесповторного вычисления.
Более сложные схемы применяются в случаях, когда некоторые управляющие точки, так называемые точки разветвления, связаны с двумя преемниками и могут находиться в двух состояниях, скажем А и Б, причем А направляет процесс к первому преемнику, а Б – ко второму. Обычно управляющая точка находится в состоянии А. Тем не менее она связана с двумя регистрами памяти; определенные события в этих регистрах могут заставить ее перейти из состояния А в состояние Б или, наоборот, из состояния Б в состояние А. Так, например, появление отрицательного знака в первом регистре заставит ее перейти из состояния А в состояние Б, а появление отрицательного знака во втором – из Б в А. (Обратите внимание, что, помимо хранения цифрового обозначения числа [ср. выше], регистр памяти обычно хранит и его знак [+ или – ]; для этого достаточно двузначного маркера). В этом случае открываются самые разнообразные возможности. Два преемника могут представлять две совершенно разобщенные ветви вычисления, зависящие от заданного числового критерия (управляющего переходом из А в Б, тогда как переход из Б в А используется для восстановления первоначального условия для нового вычисления). Возможно две альтернативные ветви объединятся позже, в общем преемнике. Другая возможность возникает тогда, когда одна из двух ветвей, скажем, ветвь, которая управляется состоянием А, в действительности ведет назад, к первой из упомянутых управляющих точек (точек разветвления). В этом случае мы имеем дело с итеративной процедурой, повторяющейся до тех пор, пока не будет удовлетворен некий числовой критерий (тот, который вызывает переход из А в Б; ср. выше). Таков, разумеется, базовый итеративный процесс. Все эти приемы могут сочетаться, накладываться друг на друга и т. д.
Необходимо отметить, что в данном случае, как и в случае коммутационного управления в аналоговых машинах, упомянутого ранее, совокупность задействованных (электрических) связей осуществляет первичную инициализацию – описание задачи, которую необходимо решить, т. е. намерения человека, использующего машину. Следовательно, это одна из разновидностей коммутационного управления. Схема коммутации может меняться от одной задачи к другой, но (по крайней мере, в простейших устройствах) в рамках решения отдельно взятой задачи всегда остается неизменной.
Данный метод поддается усовершенствованию различными способами. Каждая управляющая точка может быть связана с несколькими органами, задействуя две и более операции. Коммутационное соединение может (как в примере с аналоговыми машинами, приведенном выше) фактически управляться электромеханическими реле; эти электромеханические реле могут регулироваться лентами, а ленты в свою очередь могут двигаться под контролем электрических сигналов, возникающих в ходе вычислений. Однако здесь я не буду рассматривать все возможные варианты.
Управление при помощи команд, хранимых в памяти
Второй основной метод управления, который постепенно вытесняет первый, можно описать (опять-таки с некоторыми упрощениями) следующим образом.
Формально эта схема имеет некоторое сходство со схемой коммутационного управления, упомянутой выше. Однако вместо управляющих точек здесь используются команды. В большинстве вариантов данной схемы команда физически представляет собой то же самое, что и любое число (того типа, которым оперирует машина; ср. выше). Таким образом, в десятичной машине это последовательность десятичных цифр (12 десятичных цифр, как в примере выше, со знаком или без него, и т. д. Иногда в стандартном числовом пространстве содержится несколько команд, но здесь мы не будем рассматривать этот случай).
Команда указывает, какая основная операция должна быть выполнена, из каких регистров памяти должны быть получены ее входные данные и в какой регистр памяти должен быть отправлен выход. Это предполагает, что все регистры памяти пронумерованы последовательно. Номер регистра памяти называется адресом. Целесообразно пронумеровать также и основные операции. В таком случае команда просто содержит номер операции и адреса регистров памяти в виде последовательности десятичных цифр (в фиксированном порядке).
Существует несколько вариантов этой схемы, однако для данного контекста они не особенно важны. Команда может, как описано выше, управлять более чем одной операцией; она может требовать изменения содержащихся в ней адресов определенным образом перед ее выполнением (обычное – и практически самое важное такое изменение заключается в том, что ко всем соответствующим адресам добавляется содержимое определенного регистра памяти). В других случаях эти функции могут управляться особыми командами или же команда может влиять лишь на некоторые из составляющих действий, перечисленных выше.
Важнейшим свойством каждой команды является следующее. Как и управляющая точка в предыдущем примере, каждая команда должна определять своего преемника (с разветвлением или без него; ср. выше). Как я уже отмечал ранее, любая команда «физически» есть то же самое, что и число. Поэтому в ходе решения задачи абсолютно естественно хранить ее в регистре памяти. Другими словами, каждая команда хранится в памяти в определенном регистре, т. е. по определенному адресу.