По мысли Бэббиджа, аналитическая машина должна была включать четыре основных блока.
Первое устройство, которое Бэббидж назвал «мельница», было предназначено для выполнения четырех основных арифметических действий. Второе устройство — «склад» — предназначалось для хранения чисел (исходных, промежуточных и окончательных результатов). Исходные числа направлялись в арифметическое устройство, а промежуточные и конечные результаты получались из него. Основным элементом двух этих блоков были регистры из десятичных счетных колес. Каждое из них могло устанавливаться в одном из десяти положений и таким образом «запоминать» один десятичный знак. Память машины должна была включать в себя 1000 регистров по 50 числовых колес в каждом, то есть в ней можно было хранить 1000 пятидесятизначных чисел. Скорость выполняемых вычислений напрямую зависела от скорости вращения цифровых колес. Бэббидж предполагал, что сложение двух 50-разрядных чисел будет занимать 1 секунду. Для переноса чисел из памяти в арифметическое устройство и обратно предполагалось использовать зубчатые рейки, которые должны были зацепляться с зубцами на колесах. Каждая рейка передвигалась до тех пор, пока колесо не занимало нулевое положение. Движение передавалось стержнями и связями в арифметическое устройство, где посредством другой рейки использовалось для перемещения в нужное положение одного из колес регистра. Базовой операцией аналитической машины, как и разностной, являлось сложение, а остальные сводились к ней. Для того чтобы вращать множество шестеренок, требовалось значительное внешнее усилие, которое Бэббидж рассчитывал получить за счет использования парового двигателя.
Третье устройство, управлявшее последовательностью операций, передачей чисел, над которыми производились операции, и выводом результатов, конструктивно представляло из себя два жаккаровых перфокарточных механизма. Перфокарты Бэббиджа отличались от перфокарт Жаккара, которыми управлялась только одна операция — подъем нити для получения нужного узора в процессе изготовления ткани. Управление работой аналитической машины включало различные виды операций, для каждой из которых требовался специальный вид перфокарт. Бэббидж выделил три основных вида перфокарт: операционные (или карты операций), переменные (или карты переменных) и числовые. Операционные перфокарты осуществляли управление машиной. Согласно выбитым на них командам происходило сложение, вычитание, умножение и деление чисел, находившихся в арифметическом устройстве.
Одной из наиболее дальновидных идей Бэббиджа было введение в совокупность команд, задаваемых последовательностью операционных перфокарт, команды условного перехода. Самого по себе программного управления (без использования условного перехода) было бы недостаточно для эффективной реализации сложной вычислительной работы. Линейная последовательность операций строго определена во всех пунктах. Это дорога известна во всех деталях до самого конца. Понятие «условный переход» означает переход вычислительной машины к другому участку программы, если предварительно выполняется некоторое условие. Имея возможность использовать команду условного перехода, составитель машинной программы был не обязан знать, по какой ступени расчета изменится признак, который оказывает влияние на выбор хода расчета. Применение условного перехода позволяло у каждой развилки дороги анализировать сложившуюся ситуацию и на основе этого выбирать тот или иной путь. Условные команды могли иметь самый различный вид: сравнение чисел, выборка требуемых численных значений, определение знака числа и т.п. Машина производила арифметические операции, сравнивала между собой полученные числа и сообразно с этим проводила дальнейшие операции. Таким образом, машина могла перейти к другой части программы, пропустить часть команд или вновь вернуться к выполнению какого-либо участка программы, то есть организовать цикл. Введение команды условного перехода знаменовало собой начало использования в машине логических, а не только вычислительных операций.
С помощью второго вида перфокарт — переменных (или, по терминологии Бэббиджа, «карт переменных») осуществлялась передача чисел между памятью и арифметическим устройством. На этих картах указывались не сами числа, а лишь номера регистров памяти, то есть ячеек для хранения одного числа. Регистры памяти Бэббидж называл «переменными», указывая этим, что содержание регистра меняется в зависимости от хранящегося в нем числа. Аналитическая машина Бэббиджа использовала три вида карт переменных: для передачи числа в арифметическое устройство с сохранением его далее в памяти, для аналогичной операции, но без сохранения в памяти, и для ввода числа в память. Они получили названия: 1) «нулевая карта» (число вызывается из регистра памяти, после чего в регистре устанавливается нулевое значение); 2) «сохраняющая карта» (число вызывается из памяти без изменения содержания регистра); 3) «получающая карта» (число передается из арифметического устройства в память и записывается в один из регистров). При работе машины на одну операционную перфокарту приходилось в среднем три карты переменных. Они указывали номера ячеек памяти (адреса, по современной терминологии), в которых хранились два исходных числа, и номер ячейки, куда записывать результат.
Числовые перфокарты представляли основной вид перфокарт аналитической машины. С их помощью осуществлялся ввод исходных чисел для решения некоторой задачи и новых данных, которые могли потребоваться по ходу вычислений.
После выполнения предложенных вычислений машина выбивала ответ на отдельную перфокарту. Эти перфокарты оператор складывал по порядку их номеров и в дальнейшем использовал в работе (они являлись как бы ее внешней памятью). Например, когда в ходе вычислений машине требовалось значение логарифма 2303, она показывала его в особом окошечке и давала звонок. Оператор находил нужную перфокарту со значением этого логарифма и вводил в машину. «Все карты, — писал Бэббидж, — однажды использованные и изготовленные для одной задачи, могут быль использованы для решения тех же задач с другими данными, поэтому нет необходимости готовить их во второй раз — они могут тщательно сохраняться для будущего использования; со временем машина будет иметь собственную библиотеку».
Четвертый блок был предназначен для приема исходных чисел и выдачи конечных результатов и представлял из себя несколько устройств, обеспечивающих операции ввода-вывода. Исходные числа вводились в машину оператором и поступали в ее запоминающее устройство, из которого извлекались и поступали на выход конечные результаты. Машина могла выводить ответ на перфокарте или печатать на бумаге.
В заключение следует отметить, что если разработка аппаратной части аналитической машины связана исключительно с именем Бэббиджа, то программирование решения задач на этой машине — с именем его хорошего друга — леди Адой Лавлейс, родной дочери великого английского поэта Байрона, которая горячо увлекалась математикой и великолепно разбиралась в сложных научных и технических проблемах. В 1842 году в Италии была напечатана статья молодого математика Менабреа с описанием аналитической машины Бэббиджа. В 1843 году леди Лавлейс перевела эту статью на английский язык, снабдив ее обширным и глубоким комментарием. Чтобы проиллюстрировать работу машины, леди Лавлейс приложила к статье составленную ею программу для вычисления чисел Бернулли. Ее комментарий по существу является первой в истории работой по программированию.
Аналитическая машина оказалась очень дорогим и сложным устройством. Английское правительство, поначалу финансировавшее работы Бэббиджа, вскоре отказало ему в помощи, поэтому он так и не смог завершить свой труд. Была ли оправдана сложность этой машины? Не во всем. Многие операции (особенно ввод-вывод чисел и передача их от одного устройства к другому) значительно упростились бы, если бы Бэббидж использовал электрические сигналы. Однако его машина была задумана как чисто механическое устройство без каких бы то ни было электрических элементов, что ставило ее изобретателя часто в очень трудное положение. Между тем электромеханическое реле, ставшее позже основным элементом вычислительных машин, в это время уже было изобретено: его придумали в 1831 году одновременно Генри и Сальваторе даль Негро.
Применение электромеханических реле в вычислительной технике ведет свою историю с изобретения американца Германа Голлерита, создавшего комплекс устройств, предназначенных для обработки большого объема данных (например, результатов переписи). Потребность в такой машине была очень велика. Например, результаты переписи 1880 года обрабатывались в США 7, 5 лет. Такой значительный срок объяснялся тем, что необходимо было отсортировать громадное количество карточек (по одной на каждого из 50 миллионов жителей) с очень большим — 210 рубрик — набором вариантов ответов на задаваемые в карточке вопросы. Об этих проблемах Голлерит знал не понаслышке — он сам был сотрудником Бюро цензов США — статистического учреждения, ведавшего проведением переписей населения и обработкой их результатов.
Много работая над сортировкой карточек, Голлерит пришел к мысли механизировать этот процесс. Сперва он заменил карточки перфокартами, то есть вместо карандашной пометки варианта ответа придумал пробивать отверстие. С этой целью он разработал специальную 80-колонную перфокарту, на которую в форме пробивок наносились все сведения об одном человеке, регистрируемые в ходе переписи. (Форма этой перфокарты не претерпела с тех пор существенных изменений.) Обычно для ответа на один вопрос использовалась одна полоска перфокарты, что позволяло фиксировать десять вариантов ответа (например, на вопрос о вероисповедании). В некоторых случаях (например, на вопрос о возрасте) можно было использовать две колонки, что давало сто вариантов ответа.
Вторая идея Голлерита была следствием первой — он создал первый в мире счетно-перфорационный комплекс, включавший в себя входной перфоратор (для пробивки отверстий) и табулятор с устройством для сортировки перфокарт. Перфорация осуществлялась вручную на пробойнике, состоявшем из чугунного корпуса с приемником для карты и собственно пробойника. Над приемником помещалась пластина с несколькими рядами отверстий; при нажиме рукояти пробойника над одним из них карта под пластинкой пробивалась нужным образом. Сложный пробойник пробивал на группе карт общие данные одним нажатием руки. Сортировочная машина представляла собой несколько ящиков с крышками. Карты продвигались вручную между набором пружинных штырей и резервуарами, наполненными ртутью. Когда штырь попадал в отверстие, он касался ртути и замыкал электрическую цепь. При этом приподнималась крышка определенного ящика, и оператор клал туда карту. Табулятор (или суммирующая машина) прощупывал отверстия на перфокартах, воспринимая их как соответствующие числа и подсчитывая их. Принцип его действия был аналогичен сортировочной машине и базировался на использовании электромеханического реле (в качестве них также применялись пружинные штыри и чашечки с ртутью). Когда стержни при движении перфокарт попадали через отверстия в чашечки с ртутью, электрическая цепь замыкалась, и электрический сигнал передавался на счетчик, добавлявший к имеющемуся в нем числу новую единицу. Каждый счетчик имел циферблат со стрелкой, которая перемещалась на единицу шкалы при обнаружении отверстия. Если в табуляторе было 80 счетчиков, он мог одновременно подсчитывать результаты по 8 вопросам (с десятью вариантами ответов на каждый из них). Для подсчета результатов по следующим 8 вопросам та же перфокарта вновь пропускалась через табулятор другим своим участком. За один прогон сортировалось до 1000 карточек в час.
Первый патент (на идею) Голлерит получил в 1884 году. В 1887 году его машина была испытана в Балтиморе при составлении таблиц смертности населения. В 1889 году состоялось решающее испытание системы — проводилась пробная перепись в четырех районах города Сан-Луи. Машина Голлерита намного опередила две конкурирующие с ней ручные системы (она работала в 10 раз быстрее). После этого правительство США заключило с Голлеритом договор о поставке оборудования к переписи 1890 года. Результаты этой переписи благодаря табулятору были обработаны всего за два года. Вследствие этого машина очень быстро получила международное признание и употреблялась во многих странах при обработке данных переписи населения.
В 1902 году Голлерит создал автоматический табулятор, в котором карты подавались не вручную, а автоматически, и модернизировал свою сортировочную машину. В 1908 году он создал принципиально новую модель суммирующей машины. Вместо чашек с ртутью здесь применялись контактные щетки, с помощью которых замыкались электрические цепи электромагнитов. Последние обеспечивали соединение и разъединение непрерывно вращающегося вала с цифровыми колесами счетчика сумматора. Цифровые колеса поворачивались через зубчатые зацепления от непрерывно вращающегося вала, который нес на себе скользящие кулачковые муфты, управляемые электромагнитами. Когда под контактной щеткой оказывалось отверстие, замыкалась электрическая цепь соответствующего электромагнита, и он включал муфту, которая подсоединяла цифровое колесо к вращающемуся валу, после чего содержимое счетчика в данном разряде увеличивалось на число, пропорциональное одному повороту колеса. Передача десятков осуществлялась примерно так же, как в разностной машине Бэббиджа.
Дело, начатое Голлеритом, имеет продолжение и в наше время. Еще в 1896 году он основал фирму «Табьюлейтинг Машин Компани», специализирующуюся на выпуске счетно-перфорационных машин и перфокарт. В 1911 году, после того как Голлерит оставил предпринимательскую деятельность, его фирма слилась с тремя другими и была преобразована в широко известную сейчас во всем мире корпорацию IBM — крупнейшего разработчика в области вычислительной техники.
В табуляторе Голлерита впервые были использованы электромеханические элементы. Дальнейшее развитие вычислительной техники было связано с широким и многогранным применением электричества. В 1938 году немецкий инженер Конрад Цузе создал первую в истории релейную электронно-вычислительную машину Z1 на телефонных реле (записывающее устройство в ней оставалось механическим). В 1939 году появилась более совершенная модель Z2, а в 1941 году Цузе собрал первую в мире действующую вычислительную машину с программным управлением, в которой использовалась двоичная система. Все эти машины погибли во время войны и поэтому не оказали большого влияния на дальнейшую историю вычислительной техники.
Независимо от Цузе постройкой релейных вычислительных машин занимался в США Говард Айкен. Будучи аспирантом Гарвардского университета, Айкен при работе над своей диссертацией был вынужден делать много сложных вычислений. Чтобы сократить время на вычислительную работу, он стал придумывать несложные машины для автоматического решения частных задач. В конце концов он пришел к идее автоматической универсальной вычислительной машины, способной решать широкий круг научных задач. В 1937 году его проектом заинтересовалась фирма IBM. В помощь Айкену была выделена бригада инженеров. Вскоре началась работа над постройкой машины «Марк-1». Реле, счетчики, контактные и печатающие устройства ввода и вывода перфокарт были стандартными частями табуляторов, выпускаемых IBM. В 1944 году машина была собрана и передана Гарвардскому университету.
«Марк-1» оставался машиной переходного типа. В ней широко использовались механические элементы для представления чисел и электромеханические для управления работой машины. Как и в аналитической машине Бэббиджа, числа хранились в регистрах, состоящих из десятизубых счетных колес. Всего в «Марке-1» было 72 регистра и, кроме того, дополнительная память из 60 регистров, образованных механическими переключателями. В эту дополнительную память вручную вводились константы — числа, которые не изменялись в процессе вычисления. Каждый регистр содержал 24 колеса, причем 23 из них использовались для представления самого числа, а одно — для представления его знака. Регистры имели механизм для передачи десятков и поэтому использовались не только для хранения чисел, но и для выполнения операций над ними: число, находящееся в одном регистре, могло быть передано в другой и добавлено к находящемуся там числу (или вычтено из него). Эти операции выполнялись следующим образом. Через счетные колеса, образующие регистр, проходил непрерывно вращающийся вал, причем любое колесо с помощью электромеханических переключателей могло быть присоединено к этому валу на время, составляющее некоторую часть его оборота. К каждому числу присоединялась щетка (считывающий контакт), которая при вращении колеса пробегала по неподвижному десятисегментному контакту. Это позволяло получить электрический эквивалент цифры, хранящейся в данном разряде регистра. Для выполнения операции суммирования устанавливались такие соединения между щетками первого регистра и механизмом переключения второго регистра, что колеса последнего связывались с валом на часть периода оборота, пропорционального цифрам, находившимся в соответствующих разрядах первого регистра. Все переключатели автоматически выключались в конце фазы сложения, занимавшей не более половины периода оборота. Сам механизм суммирования по существу не отличался от сумматора голлеритовских табуляторов.
Умножение и деление производились в отдельном устройстве. Кроме того, в машине имелись встроенные блоки для вычисления функций sin x, log x и некоторых других. Скорость выполнения арифметических операций в среднем составляла: сложение и вычитание — 0, 3 секунды, умножение — 5, 7 секунды, деление — 15, 3 секунды. То есть «Марк-1» был эквивалентен примерно 20 операторам, работающим с ручными счетными машинами.
Работой «Марк-1» управляли команды, вводимые с помощью перфорированной ленты. Каждая команда кодировалась посредством пробивки отверстий в 24 колонках, идущих вдоль ленты, и считывалась с помощью контактных щеток. Пробивка на перфокартах преобразовывалась в набор импульсов. Совокупность электрических сигналов, полученных в результате «прощупывания» позиций данного ряда, определяла действия машины на данном шаге вычислений. Устройство управления на основании этих команд обеспечивало автоматическое выполнение всех вычислений в данной программе: осуществляло выборку чисел из ячеек памяти, давало команду требуемой арифметической операции, отправляло результаты вычислений в запоминающее устройство и т.д. В качестве устройства вывода Айкен использовал пишущие машины и перфораторы.
Вслед за пуском «Марк-1» Айкен и его сотрудники начали работу над «Марком-2», закончившуюся в 1947 году. В этой машине уже не было механических цифровых колес, а для запоминания чисел, выполнения арифметических операций и операций управления использовались электрические реле — всего их было 13 тысяч. Числа в «Марк-2» представлялись в двоичном виде.
Двоичная система исчисления была предложена еще Лейбницем, который считал ее самой удобной для использования в вычислительных машинах. (Трактат на эту тему был написан в 1703 году.) Им же была разработана арифметика двоичных чисел. В двоичной системе, точно так же как в привычной нам десятичной, значение каждой цифры определяется ее позицией, но вместо обычного набора из десяти цифр используются только две: 0 и 1. Для того чтобы понять двоичную запись числа, посмотрим сначала, какой смысл имеет хорошо всем известная десятичная запись. Например, число 2901 можно представить в следующем виде:
2901 = 2 • 103 + 9 • 102 + 0 • 101 + 1 • 100
То есть, цифры: 2, 9, 0, 1 указывают на то, сколько единиц находится в каждом из десятичных разрядов числа. Если же вместо десятичной системы берется двоичная, каждая цифра будет указывать на то, сколько единиц содержится в каждом из двоичных разрядов. Например, число 13 записывается в двоичной системе так:
13 = 8 + 4 + 1 = 1 • 23 + 1 • 22 + 0 • 21 + 1 • 20 = 1101
Двоичная система достаточно громоздка (скажем, число 9000 будет в ней 14-значным), но она очень удобна при выполнении арифметических операций. Вся таблица умножения в ней сводится к единственному равенству 1•1=1, а сложение имеет только три правила: 1) 0+0 дает 0; 2) 0+1 дает 1; 3) 1+1 дает 0 и перенос 1 в старший разряд.
Например:
01010
+01011
10101
Утверждение двоичной системы в вычислительной технике было обусловлено существованием простых технических аналогов двоичной цифры — электрических реле, которые могли находиться в одном из двух устойчивых состояний, первое из которых ставили в соответствие с 0, другое — с 1. Передача двоичного числа электрическими импульсами из одного машинного устройства в другое тоже очень удобна. Для этого достаточно всего двух различных по форме импульсов (или даже одного, если отсутствие сигнала считать за нуль).
Следует отметить, что релейные машины, созданные на заре истории ЭВМ, недолго использовались в вычислительной технике, поскольку были сравнительно медленнодействующими. Так же как в механической машине скорость вычислений определялась скоростью поворота цифровых колес, время работы схемы, составленной из реле, равнялось времени срабатывания и отпускания реле. Между тем даже самые быстрые реле не могли делать больше 50 срабатываний в секунду. Например, в «Марк-2» операции сложения и вычитания занимали в среднем 0, 125 секунды, а умножение требовало 0, 25 секунды. Гораздо большим быстродействием обладали электронные аналоги электромеханических реле — вакуумные лампы-триггеры. Они и стали базовыми элементами в ЭВМ первого поколения.
Триггер был изобретен еще в 1919 году русским инженером Бонч-Бруевичем и независимо от него американцами Икклзом и Джорданом. Этот электронный элемент содержал две лампы, и в каждый момент мог находиться в одном из двух устойчивых состояний. Он представлял собой электронное реле, то есть при наличии сигнала управляющего импульса включал нужную линию или цепь электрического тока. Подобно электромеханическому реле он мог использоваться для обозначения одной двоичной цифры.
Рассмотрим принцип работы электронного реле, состоящего из двух электронных ламп-триодов Л1 и Л2, которые могут находиться в одном баллоне. Напряжение с анода Л1 через сопротивление R1 подается на сетку Л2, а напряжение с анода Л2 подается на сетку Л1 через сопротивление R2. В зависимости от положения, в котором находится триггер, он дает низкий или высокий уровень напряжения на выходе. Допустим вначале, что лампа Л1 открыта, а Л2 — закрыта. Тогда напряжение на аноде открытой лампы мало по сравнению с напряжением на аноде закрытой лампы. Действительно, так как открытая лампа Л1 проводит ток, то большая часть анодного напряжения падает (по закону Ома u=i•R) на высоком анодном сопротивлении Ra, а на самой лампе (включенной с ним последовательно) падает лишь незначительная часть напряжения. Наоборот, в закрытой лампе анодный ток равен нулю, и все напряжение источника анодного напряжения падает на лампе. Поэтому с анода открытой лампы Л1 на сетку закрытой лампы падает значительно меньшее напряжение, чем с анода закрытой лампы Л2 на сетку Л1. Отрицательное напряжение Ec, поданное на сетки обеих ламп, выбирается таким, чтобы вначале лампа Л2 была закрыта, несмотря на наличие небольшого положительного напряжения, поданного с анода открытой лампы Л1 на сетку Л2. Лампа же Л1 вначале открыта, так как положительное напряжение, поданное на сетку с анода Л2, значительно больше, чем Ec. Таким образом, благодаря связи между лампами через сопротивления R1 и R2 начальное состояние является устойчивым и будет сохраняться сколько угодно долго.
Рассмотрим теперь, что произойдет в схеме, если на сетку открытой лампы Л1 подать извне отрицательное напряжение в виде короткого импульса тока такой величины, чтобы закрыть ее. При уменьшении анодного тока i1 напряжение на аноде лампы Л1 резко увеличится и, следовательно, увеличится положительное напряжение на сетке Л2. Это вызовет появление анодного тока i2 через лампу Л2, благодаря чему уменьшится анодное напряжение на лампе Л2. Понижение положительного напряжения на сетке Л1 приведет к еще большему уменьшению тока в Л1 и т.д. В результате такого лавинообразного нарастающего процесса уменьшения тока в Л1 и увеличения тока в Л2 лампа Л1 закроется, а лампа Л2 будет открыта. Таким образом, схема перейдет в новое устойчивое положение равновесия, которое будет сохраняться сколько угодно долго: «запоминается» поданный на вход 1 импульс. Возвращение электронного реле обратно в исходное состояние можно осуществить подачей импульса отрицательного напряжения на вход. Триггер имеет, следовательно, два устойчивых положения равновесия: начальное, при котором Л1 открыта, а Л2 закрыта, и так называемое «возбужденное» состояние, при котором Л1 закрыта, а Л2 открыта. Время переброса триггера из одного состояния в другое очень мало. Конденсаторы C1 и C2 служат для убыстрения срабатывания лампы.
Идея вычислительной машины, в которой в качестве запоминающего устройства использовались бы электронные лампы, принадлежит американскому ученому Джону Моучли. Еще в 30-е годы он сделал несколько несложных вычислительных устройств на триггерах. Однако впервые электронные лампы при создании вычислительной машины применил другой американский математик Джон Атанасов. Его машина была уже практически завершена в 1942 году. Но из-за войны финансирование работы было прекращено. В следующем 1943 году, работая в Муровской электротехнической школе Пенсильванского университета, Моучли вместе с Преспером Эккертом разработал свой проект электронной вычислительной машины. Артиллерийское управление США заинтересовалось этой работой и заказало Пенсильванскому университету постройку машины. Руководителем работ был назначен Моучли. В помощь ему было дано еще 11 инженеров (включая Эккерта), 200 техников и большое число рабочих. В течение двух с половиной лет, до 1946 года, этот коллектив трудился над созданием «электронно-цифрового интегратора и вычислителя» — ЭНИАК. Это было огромное сооружение, занимавшее площадь 135 квадратных метров, имевшее массу 30 тонн и энергопотребление 150 киловатт. Машина состояла из сорока панелей, содержащих 18000 электронных ламп и 1500 реле. Однако использование электронных ламп вместо механических и электромеханических элементов позволило резко увеличить скорость. На умножение ЭНИАК тратил всего 0, 0028 секунды, а на сложение — 0, 0002 секунды, то есть работал в тысячу раз быстрее самых совершенных релейных машин.
Устройство ЭНИАК в общих чертах было следующим. Каждые десять триггеров соединялись в нем в кольцо, образуя десятичный счетчик, который выполнял роль счетного колеса механической машины. Десять таких колец плюс два триггера для представления знака числа образовывали запоминающий регистр. Всего в ЭНИАК было двадцать таких регистров. Каждый регистр был снабжен схемой для передачи десятков и мог использоваться для выполнения операции суммирования и вычитания. Другие арифметические операции выполнялись в специальных блоках. Числа передавались из одной части машины в другую посредством групп из 11 проводников — по одному для каждого десятичного разряда и знака числа. Значение передаваемой цифры равнялось числу импульсов, протекавших по данному проводнику. Работой отдельных блоков машины управлял задающий генератор, вырабатывавший последовательность определенных сигналов, которые «открывали» и «закрывали» соответствующие блоки электронной машины.
Ввод чисел в машину производился при помощи перфокарт. Программное же управление осуществлялось посредством штекеров и наборных полей (коммутационной доски) — таким образом отдельные блоки машины соединялись между собой. Это было одним из существенных недостатков описываемой конструкции. На подготовку машины к работе — соединение блоков на коммутационной доске — уходило до нескольких дней, тогда как задача порой решалась всего за несколько минут. В целом ЭНИАК была еще достаточно ненадежной и несовершенной вычислительной машиной. Она часто выходила из строя, причем поиск неисправности затягивался порой на несколько суток. Кроме того, эта машина не могла хранить информацию.
Для устранения последнего недостатка Эккерт в 1944 году выдвинул идею хранимой в памяти программы. Это была одна из важнейших технических находок в истории вычислительной техники. Суть ее заключалась в том, что команды программы должны были представляться в виде числового кода, то есть кодироваться в двоичной системе (как и числа) и вводиться в машину, где бы они хранились вместе с исходными числами. Для запоминания этих команд и операций с ними предполагалось использовать те же устройства — триггеры, что и для действия с числами. Из памяти отдельные команды должны были извлекаться в устройство управления, где их содержание расшифровывалось и использовалось для передачи чисел из памяти в арифметическое устройство для выполнения операций над ними и отсылки результатов обратно в память.
Между тем по окончании Второй мировой войны одна за другой стали появляться новые электронные вычислительные машины. В 1948 году англичане Килбурн и Вильямс из Манчестерского университета создали машину «МАРК-1», в которой впервые была реализована идея хранимой программы. В 1947 году Эккерт и Моучли основали свою фирму, а в 1951 году наладили серийный выпуск своих машин UNIVAC-1. В 1951 году появилась первая советская ЭВМ МЭСМ академика Лебедева. Наконец, в 1952 году свой первый промышленный компьютер IBM 701 выпустила фирма IBM. Все эти машины имели в своей конструкции много общего. Об этих общих принципах работы всех ЭВМ первого поколения мы теперь и поговорим.
Электронные вычислительные машины, как известно, совершили настоящий переворот в области применения математики для решения важнейших проблем физики, механики, астрономии, химии и других точных наук. Те процессы, которые прежде совершенно не поддавались просчитыванию, стали вполне успешно моделироваться на вычислительных машинах. Решение любой задачи сводилось при этом к следующим последовательным шагам: 1) исходя из значения физической, химической и прочей сущности какого-либо исследуемого процесса формулировалась задача в виде алгебраических формул, дифференциальных или интегральных уравнений или других математических соотношений; 2) с помощью численных методов задача сводилась к последовательности простых арифметических операций; 3) составлялась программа, которая определяла строгий порядок выполнения действий в установленной последовательности. (ЭВМ осуществляла в принципе тот же порядок действий, что и человек, работающий на арифмометре, но в тысячи или десятки тысяч раз быстрее.) Команды составленной программы записывались с помощью специального кода. Каждая из этих команд определяла какое-либо определенное действие со стороны машины.