Принципы фон Неймана и первые компьютеры на их основе
Рассказываем, как фон Нейман присвоил себе чужие лавры, почему он ни в чём не виноват и что умели компьютеры, созданные на «не совсем его» идеях.
![](https://248006.selcdn.ru/main/iblock/733/733cca4ac71153fcc3550b5fd9fa5375/e0a5c51c8c6e637f6531bf45374e73e2.png)
![](https://248006.selcdn.ru/main/iblock/733/733cca4ac71153fcc3550b5fd9fa5375/e0a5c51c8c6e637f6531bf45374e73e2.png)
Иллюстрация: John von Neumann / EDSAC / Meery Mary для Skillbox Media
В 1946 году американский учёный Герман Голдстайн опубликовал доклад математика Джона фон Неймана «Предварительное рассмотрение логической конструкции электронно-вычислительного устройства». Автор доклада изложил принципы, ставшие основой архитектуры всех последующих поколений ЭВМ:
- Память компьютера состоит из ячеек, каждой из которых присвоен номер — адрес. Любая из ячеек доступна компьютеру в любой момент времени, и он может обратиться к её содержимому по адресу.
- Память компьютера используется как для хранения данных, так и для хранения программы. Команды и числа кодируются в двоичной системе счисления. Над командами можно производить те же операции, что и над числами. На этом принципе основана трансляция — перевод текста программы с языка высокого уровня на язык конкретной ЭВМ.
- Компьютером управляет программа, которая состоит из команд, хранящихся в последовательных ячейках памяти. Каждая команда выполняет операцию из набора операций, доступных компьютеру.
- Компьютер выполняет команды последовательно — от первой к последней, согласно порядку следования в программе. Этот порядок может быть изменён с помощью специальных команд в зависимости от результатов вычислений.
Как разрабатывалась архитектура фон Неймана
Первым в истории электронным компьютером был ENIAC, построенный в 1946 году в Пенсильванском университете США: огромное 30-тонное устройство, работавшее на 18 000 электронных ламп. Вычисления производились в десятичной системе, что сильно замедляло работу компьютера и приводило к перерасходу ламп.
ENIAC был не программируемой, а коммутируемой машиной — он управлялся с коммутационной панели. Чтобы задать программу, приходилось особым образом подсоединять провода: это могло продолжаться много часов и даже дней.
Создатели ENIAC Эккерт и Мокли видели его недостатки, поэтому ещё в 1943 году начали проектировать усовершенствованную модель электронного компьютера — да, в тот момент они даже не доделали ENIAC. Будущий компьютер назвали EDVAC (от англ. Electronic Discrete Variable Automatic Computer). Работа была строго засекречена.
Работая над EDVAC, Джон Эккерт впервые предложил идею программы, хранимой в памяти. Память EDVAC была выполнена на линиях задержки — особых трубках с ртутью, сохраняющих информацию. Данные кодировались в двоичной, а не в десятичной системе — это позволило сократить количество электронных ламп.
Спустя полтора года к Эккерту и Мокли в качестве научного консультанта присоединился Джон фон Нейман — известный математик и участник Манхэттенского проекта. Он сразу увидел перспективность новой ЭВМ и помог выбить финансирование у армии США.
Учёные были обязаны регулярно отчитываться перед военными о проделанной работе. Фон Нейман подготовил «Предварительный доклад о машине EDVAC», в котором описал её основные элементы и логику работы. Он отправил отчёт военному куратору Голдстайну, и тот был впечатлён глубиной идей и ясностью изложения основных концепций. Наплевав на секретность, он перепечатал и разослал отчёт европейским и американским учёным без ведома Эккерта и Мокли, а на титульном листе в качестве автора указал только фон Неймана.
Отчёт произвёл эффект разорвавшейся бомбы. А так как фон Неймана знали в научном мире, никто не сомневался, что он и был единственным автором документа. Так описанную в отчёте структуру ЭВМ назвали архитектурой фон Неймана.
Эккерт и Мокли были возмущены действиями Голдстайна — сами они из-за секретности не могли публиковать материалы о своей работе. Создатели EDVAC не сомневались, что их машина будет очень полезной для всего мира, а потому опасались, что им не дадут оформить патент на изобретение.
И не зря — потому что именно так всё и вышло. Администрация Пенсильванского университета настаивала, чтобы Мокли и Эккерт отказались от прав на EDVAC. Возмущённые изобретатели отвергли это требование и в 1946 году, сразу после запуска компьютера ENIAC, покинули университет. Через несколько месяцев из проекта ушли фон Нейман и Голдстайн, а работа над EDVAC затянулась ещё на несколько лет.
Первый американский компьютер с новой архитектурой
В итоге EDVAC завершили только в 1949 году, а «выкатили в прод» в 1951-м, после устранения всех багов. Он весил около восьми тонн и занимал 45 квадратных метров.
![](/upload/setka_images/11072110032022_5fb44dd4521e31102024b8eba1eb4faa605e1abb.jpg)
Фото: Wikimedia Commons
Компьютер использовал двоичную систему счисления — это позволило сократить количество электровакуумных ламп до 3600 штук (в ENIAC их было 18 000) — и умел проводить операции сложения, вычитания и деления. Объём памяти составлял 1024 слова — то есть около 5,5 килобайт. Причём в памяти хранились уже не только данные, но и сама программа.
EDVAC установили в Лаборатории баллистических исследований армии США — его работа была строго засекречена. Машина проработала до 1961 года, пока её не заменили на более современную.
Как английские конкуренты опередили американцев
После публикации отчёта фон Неймана в других странах тоже стали строить компьютеры с подобной архитектурой. Первый создали в Англии, давнем конкуренте Америки в компьютерной гонке — причём за два года до запуска EDVAC.
В 1946 году профессору Кембриджа Морису Уилксу попалась копия доклада фон Неймана — знакомый из США дал почитать на одну ночь. Уилкс оценил идеи и решил, что в будущем развитие ЭВМ пойдёт именно по такому пути.
Он пересёк океан, прибыл в Пенсильванский университет и прослушал лекции по EDVAC, а на обратном пути разработал логическую схему своего будущего компьютера, в дальнейшем названного EDSAC. Уилксу удалось добиться финансирования постройки ЭВМ Министерством обороны Великобритании, а сама машина заработала уже в 1949 году.
![](/upload/setka_images/11070310032022_b629b7dc02fe6f5723da7d5f3dd63eb28fb5f3e4.jpg)
Фото: Wikimedia Commons
EDSAC почти полностью копировал архитектуру EDVAC, но при этом был компактнее: занимал площадь в 20 квадратных метров, состоял из 3000 электровакуумных ламп и использовал 32 ртутные линии задержки, дающие 1024 ячейки памяти.
Вычисления производились в двоичной системе, скорость расчётов составляла от десяти до пятнадцати тысяч операций в секунду, программа вводилась в память с помощью бумажной перфоленты, а выходные данные передавались на телетайп.
Первая программа для EDSAC рассчитывала квадраты положительных чисел от 0 до 99.
Первоначально все программы представляли собой длинные последовательности нулей и единиц: 1 — лампа горит, 0 — не горит. Профессор Уилкс нашёл более удобные способы записи команд — с помощью букв и коротких английских слов, например:
- S — «вычитание»;
- Т — «передать информацию в память»;
- Z — «остановка машины» и так далее.
Так именно для EDSAC впервые были разработаны мнемонические коды операций и транслятор — ассемблер.
Другим важным новшеством стала разработка библиотеки подпрограмм. Программисты уже были знакомы с этим понятием — Грейс Хоппер и её коллеги использовали подпрограммы на своей гарвардской машине. Правда, они записывали их в блокноты, чтобы каждый раз не составлять заново.
В EDSAC появилась возможность хранить подпрограммы в памяти и при необходимости вставлять их в уже работающие программы. Для этого достаточно было вызвать их из памяти короткой командой.
Мнемонику операций и библиотеку подпрограмм Уилкс назвал «собирающей системой» (от англ. assembly system) — ведь она собирала программу на машинном языке из мнемонических кодов и подпрограмм.
Сегодня языки программирования, в которых мнемонические имена операции соответствуют отдельным машинным инструкциям, называются языками ассемблера, а Мориса Уилкса считают создателем одного из первых подобных языков.
По заказу правительства Великобритании на EDSAC проводились расчёты ядерных испытаний. Кембриджский университет использовал его для расчётов в области теоретической химии, радиоастрономии и других научных задач. Например, именно с помощью EDSAC удалось рассчитать самое большое на тот момент простое число — 79-значное. Под эту задачу написали кучу программ: для вычислений с комплексными числами и числами с плавающей запятой, для расчётов векторов, матриц, тригонометрических функций.
В 1951 году для EDSAC была написана и первая интерактивная компьютерная игра — OXO, разновидность крестиков-ноликов. Для этого к компьютеру был подсоединён небольшой дисплей на основе электронно-лучевой трубки.
![](/upload/setka_images/11070510032022_181cbb31e4238c1c11b385d01e6dcc075479973d.jpg)
Фото: Wikimedia Commons
Легендарный EDSAC выключили только в 1958 году. Его заменил более совершенный компьютер, EDSAC 2, с памятью на ферритовых сердечниках, в котором использовались ещё и магнитные ленты.