К декабрю 1943 года Тьюринг спроектировал и построил «Колосс», который часто называют первым компьютером в истории электронных вычислительных машин. «Колосс» предназначался для выполнения одной-единственной задачи – декодирования радиосообщений, зашифрованных нацистской машиной Enigma – и не мог быть перепрограммирован для выполнения другой задачи. Зато с дешифровкой он справлялся блестяще: считается, что именно благодаря ему союзники смогли взять верх над немецкими «люфтваффе» и выиграть решающую битву за Британию.
Все вышеизложенное послужило своеобразным фундаментом, на котором Джон фон Нейман создал архитектуру современного компьютера – машину фон Неймана, составляющую основу практически каждого автомата, изобретенного за последние шестьдесят шесть лет: от микроконтроллера стиральных машин до самых больших суперкомпьютеров. Это третья ключевая идея информационной эры. В статье «Первый проект отчета о EDVAC»,[1] датированной 30 июня 1945 года, фон Нейман изложил революционные принципы в области машинных вычислений. Модель фон Неймана состоит из центрального процессора, в котором выполняются арифметические и логические операции, блока памяти, в котором хранятся программа и данные, устройства массовой памяти, счетчика команд и каналов ввода-вывода. Данная концепция описана в первой части этой книги. Хотя статья фон Неймана, по сути, представляла собой внутренний проектный документ, она не только стала библией для конструкторов вычислительных машин 1940-х и 1950-х годов, но и значимо повлияла на архитектуру всех компьютеров, построенных с тех пор.
Машина Тьюринга не была рассчитана на практическое применение. Теоремы Тьюринга не имели никакого отношения к эффективности решения задач; они лишь позволяли определить круг тех задач, которые могли быть решены посредством машинных вычислений. Фон Нейман, наоборот, ставил своей целью формулирование практических принципов вычислительной машины. Так, в машине фон Неймана однобитовые вычисления Тьюринга заменены многобитовыми словами (как правило, количество битов кратно восьми). Если машина Тьюринга тратит огромное количество времени на перемещение ленты вперед и назад, чтобы сохранять и извлекать промежуточные результаты, то машина фон Неймана, напротив, снабжена памятью с произвольным доступом, поэтому любой элемент данных может быть извлечен немедленно.
Одним из важнейших принципов, предложенных фон Нейманом, является принцип хранимой программы, который он сформулировал десятью годами ранее: программа хранится в той же памяти, что и данные. Это позволяет перепрограммировать вычислительную машину для выполнения различного рода задач, а также использовать самомодифицирующийся код, допускающий применение некоторых форм рекурсии. До того времени практически все вычислительные машины, включая «Колосс» Тьюринга, могли решать только те задачи, для решения которых были предназначены изначально. Хранимая программа придала вычислительной машине поистине универсальный характер. Так, идея Тьюринга об универсальной машине получила реальное воплощение.
Другой ключевой принцип фон Неймана заключается в том, что каждая инструкция должна содержать код арифметической или логической операции, которую необходимо выполнить, а также адрес операнда в памяти. Данная формула впервые была предложена фон Нейманом в рамках его публикации, посвященной совместному с Дж. Преспером Эккертом и Джоном Мокли проекту EDVAC. Сам EDVAC был запущен только в 1951 году; к тому времени уже существовали другие вычислительные машины с хранимыми программами, в частности Манчестерская малая экспериментальная машина, ENIAC,[2] EDVAC[3] и BINAC.[4] Все они были созданы под влиянием работ фон Неймана теми же конструкторами: Эккертом и Мокли. Фон Нейман принял непосредственное участие в проектировании ряда этих машин, включая более позднюю версию ENIAC, которая поддерживала хранимую программу.
Можно назвать несколько предшественников архитектуры фон Неймана, однако ни один из них не являлся истинной машиной фон Неймана, за одним неожиданным исключением. «Марк I» Говарда Эйкена, построенный в 1944 году, имел элемент программируемости, но не использовал хранимую программу. Эта вычислительная машина считывала инструкции с перфорированной бумажной ленты, а затем выполняла каждую команду отдельно. Поскольку ветвления в программе отсутствовали, ее нельзя рассматривать как пример архитектуры фон Неймана.
1
EDVAC (Electronic Discrete Variable Automatic Computer) – одна из первых электронных вычислительных машин на двоичной основе. –
2
ENIAC (русск. ЭНИАК) – электронный числовой интегратор и вычислитель, сокр. от Electronic Numerical Integrator and Computer, первый электронный цифровой вычислитель общего назначения, который можно было перепрограммировать для решения широкого спектра задач.
3
EDVAC (русск. ЭДВАК) – сокр. от Electronic Discrete Variable Automatic Computer, одна из первых электронных вычислительных машин. В отличие от своего предшественника ЭНИАКа, это был компьютер на двоичной, а не десятичной основе.
4
BINAC (русск. БИНАК) – сокр. от англ. Binary Automatic Computer, двоичный автоматический компьютер, электронный компьютер первого поколения, построенный в США компанией Eckert-Mauchly Computer Corporation и запущенный в апреле или августе 1949 года. Формально считается первым коммерческим электронным компьютером.