Леонид Черняк – История электронных компьютеров (страница 14)
Работа над ENIAC началась в августе 1942 года с внутренней служебной записки Джона Моукли «Использование высокоскоростных устройств на вакуумных лампах для вычислений». В ней он утверждал, что электронные схемы могут выполнять вычисления значительно быстрее, чем любые механические или электромеханические устройства. Моукли предлагал использовать электронные узлы для выполнения последовательности операций – сложения, вычитания, умножения и деления. Однако с архитектурной точки зрения проект оставался близок к механическим вычислителям. Поэтому записка стала концептуальным мостом между ними и электронными цифровыми машинами.
Следуя этому замыслу, сочетая старую архитектуру с электроникой, в начале 1943 года Моукли и Эккерт направили свои усилия на попытку создания цифровой версии дифференциального анализатора Буша. Иначе говоря, цель заключалась в создании «электронной версии» машины для решения дифференциальных уравнений.
Вскоре стала очевидной ограниченность такого подхода: заказчику был нужен универсальный аппарат для любых баллистических расчетов. Осознав это, Моукли и Эккерт пришли к исторически значимому выводу: не следует совершенствовать старое – требуется создавать принципиально новое. И этим новым стала возможность перепрограммирования.
ENIAC еще не был программируемым в современном смысле: в нем не было разделения на аппаратную часть и программу, а программирование сводилось к ручной перенастройке на уровне соединений и переключателей. Однако сама идея универсальности открыла новую эпоху в вычислительной технике. Согласование позиций сторон прошло быстро, и 1 июля проект получил финансирование на разработку Электронного числового интегратора (Electronic Numerical Integrator). Позже к названию добавилось «и компьютера» – так возникло сокращение ENIAC. В целях секретности проект сначала назывался «Белый слон», затем – Project PX.
Менеджером проекта стал Герман Гольдштейн. Он сыграл роль своеобразной «повивальной бабки» проекта. Впоследствии он привлек к работе над ENIAC свою жену Адель, которая сначала была одной из малозаметных программисток, а позже заняла более заметное и активное положение.
При проектировании ENIAC Моукли и Эккерт не знали ни об Аналитической машине Бэббиджа, ни машинах Айкена. Удивительно то, что ее преемник EDVAC, оказалась близок к концепции Аналитической машины и особенно к тому, интерпретировала эту машину Леди Августа Лавлейс. Об этом подробно в книге «История неэлектронных компьютеров».
ENIAC состоял из трех основных подсистем.
• Первая – вычислительная – включала автономные электронные модули сложения, вычитания, умножения и деления.
• Вторая – память для команд и данных – была частично электронной (на лампах), программы и константы задавались с помощью коммутаторных панелей и переключателей.
• Третья – система управления координировала работу вычислительной системы, она выполняла роль программатора.
Существовала также вспомогательная система ввода-вывода на перфокартах и принтеры IBM. ENIAC имел тактовый генератор с частотой около 100 кГц. Его роль отличалась от современных ЦПУ: сигналы генератора координировали микрошаги внутри операции, а переход от одной команды к другой осуществлялся через заранее сконфигурированные сигнальные цепи – так называемое «программирование потока управления через сигнальные соединения».
В июле 1943 года была собрана первая команда разработчиков из двенадцати человек.
Архитектура ENIAC
Архитектура ENIAC уникальна и соответственно программирование тоже. В отличие от позднейших фоннеймановских компьютеров, где программа – это линейная последовательность инструкций в памяти, ENIAC работал как набор специализированных модулей, которые настраивались и соединялись вручную. Программирование представляло собой трехуровневый процесс: проектирование маршрутов данных, определение временной организации вычислений и физическую конфигурацию коммутационных панелей.
ENIAC состоял из отдельных вычислительных блоков, каждый из которых выполнял строго определенные функции. Центральную роль играли двадцать аккумуляторов – десятиразрядных регистров-счетчиков, способных хранить число и выполнять сложение и вычитание. Дополняли их один умножитель, блок деления и извлечения квадратного корня, генераторы констант и устройства ввода-вывода для работы с перфокартами, индикаторами и печатью.
На этом уровне алгоритм представлялся как граф: вершины – вычислительные модули, ребра – каналы передачи данных. Программирование заключалось в «прокладывании маршрутов» чисел между модулями: какое значение хранится в аккумуляторе, куда передается и какой блок его обрабатывает.
ENIAC не исполнял программы линейно. Работа модулей синхронизировалась управляющими импульсами (control pulses), задающими моменты начала и окончания операций. Это позволяло параллельное выполнение: несколько аккумуляторов могли работать одновременно, пока другой блок ожидал результат.
Программа воспринималась как сеть зависимостей и синхронизированных действий, распределенных во времени. Такой подход концептуально близок к современным параллельным вычислениям, конвейерной обработке и распределенным системам.
Программист определял зависимости: «результат аккумулятора 1 отправить в аккумулятор 3, пока умножитель ожидает данные от аккумулятора 4». Алгоритм таким образом представлялся не как список инструкций, а как граф действий с временными ограничениями.
Физически программа фиксировалась в виде конфигурации кабелей и переключателей на панелях. Каждый модуль имел входы и выходы, соединяемые проводами, а режим работы задавался тумблерами: сложение, вычитание, направление передачи данных и т. д.
Состояние машины можно описать матрицей: строки – модули, столбцы – возможные соединения и режимы, ячейки – конкретные настройки. Алгоритм сводился к полной физической схеме, собранной вручную. Эта модель напоминает современные FPGA или телефонные станции середины XX века.
Глава 4. EDVAC
Когда Нил Армстронг ступил на поверхность Луны, он произнес: «Это всего лишь маленький шаг одного человека, но гигантский скачок всего человечества». Да, в 1969 году этот шаг рассматривался не иначе как начало новой эры. Но если оглянуться назад, то окажется, что другой, куда менее заметный «шаг», но более важный был сделан за четверть века до этого. Его не транслировали по телевидению, его не сопровождали многообещающие речи, но его последствия оказались несравнимо масштабнее. Имя этому шагу – EDVAC.
Эта аббревиатура расшифровывается как Electronic Discrete Variable Automatic Computer. Слово «компьютер» к тому времени уже существовало, но именно здесь оно впервые приобрело тот смысл, который мы вкладываем в него сегодня. До этого «компьютерами» называли либо людей-счетчиков, либо громоздкие машины, выполнявшие одну-две специфические функции.
У предшественника EDVAC – ENIAC это слово тоже значилось в названии. Но сам он, при всей своей мощи и грандиозности, не был компьютером в современном понимании. ENIAC не умел хранить программы. Чтобы настроить на новую задачу, инженерам и программисткам приходилось буквально перекраивать его устройство: переключать сотни тумблеров, перекладывать кабели, менять панели. Это походило скорее на ремонт, чем на программирование.
Тем не менее именно ENIAC впервые доказал: цифровая электроника годится для вычислений и способна значительно превзойти механические и аналоговые устройства. Но сам он стал скорее доказательством концепции, чем универсальной моделью.
А вот EDVAC – это уже не демонстрация, а настоящий прототип будущего. Он вобрал в себя все, что мы сегодня связываем со словом «компьютер». Его создателями были инженеры Преспер Эккерт и Джон Моукли. На завершающем этапе к ним в качестве внешнего обобщающего их изобретение гуру присоединился Джон фон Нейман, он сумел превратить инженерный проект в строгую теоретическую модель. Позже именно из этой модели вырастет целая новая область знаний – современная информатика.
От ENIAC к EDVAC
ENIAC был удивительной машиной – работа с ним напоминала настройку огромного музыкального органа, где для исполнения каждой новой мелодии нужно было бы вручную переставлять трубы.
Программа в ENIAC – это сплетение кабелей, комбинация переключателей и панелей. Чтобы настроить новую программу, инженеры прокладывали маршруты электрических сигналов: вот вход в умножитель, вот выход в сумматор, а вот дальше результат идет в следующий блок. Получался не набор строк, а целая «электрическая маршрутная карта».
Неудивительно: ENIAC вырос из опыта работы с дифференциальным анализатором, который решал уравнения при помощи шестеренок, валов и дисков. Эккерт и Моукли словно заменили механические шестерни на электронные лампы – но принцип остался тем же: чтобы поменять задачу, нужно было перекроить «внутренности».
Очень быстро стало ясно: это тупик. Машина может быть сколько угодно быстрой, но если на ее перепрограммирование уходит неделя, то практической пользы мало. Инженерам нужна была новая идея – способ разделить «железо» и «логику».
Хранимая программа – гениальная простота
Решение оказалось удивительно изящным. Зачем каждый раз перенастраивать машину, если можно просто хранить последовательность операций в ее памяти, машина сама будет читать инструкции одну за другой, словно кулинарную книгу рецептов.