ДОМАШНИЙ КОМПЬЮТЕР - БУМАЖНЫЙ ДОМАШНИЙ КОМПЬЮТЕР -  2002 -  №8

Наследники Бэббиджа

Юрий Ревич

Разностная машина

В доступных поисковых системах Интернета нет ни малейшего упоминания о Лесли Джоне Компри (1893-1950), даже не удалось разыскать хоть какой-нибудь его портрет. Единственное развернутое описание его биографии нашлось в книге Р. С. Гутера и Ю. Л. Полунова «От абака до компьютера». А личность он интереснейшая - родился в Новой Зеландии, образование получил в Англии, стал магистром химии, добровольцем ушел на фронт, воевал на Первой мировой в составе новозеландского корпуса, потерял ногу. После войны он занялся астрономией, получил в Кембридже степень доктора, с 1925 года работал в английском департаменте морского календаря (надо ли объяснять, что для Англии, морской державы, этот департамент был одним из самых важных), а позднее и руководил им. Но для нашей истории важно, что Компри увлекся идеями Бэббиджа насчет механизации вычислений таблиц и уговорил английское правительство финансировать постройку разностной машины, продолжив, таким образом, дело жизни великого упрямца («ДК» #10, 2002). К середине 1930-х в Англии благодаря ему уже функционировало около 15 разностных машин, а в 1936 Компри даже основал собственную фирму, которая занималась выполнением сложных научных расчетов, в частности по заданиям английского правительства.

Электромеханики

Прямым развитием идей Бэббиджа стали электромеханические машины, построенные почти одновременно в нескольких странах - США, Англии, Германии. Первым (в 1938 году) Конрад Цузе (Konrad Zuse) 1910–1995такую машину построил немецкий инженер Конрад Цузе, который, судя по всему, не был знаком с работами Бэббиджа и изобрел свою конструкцию, что называется, «с нуля».

Цузе прожил долгую жизнь - родился в 1910 году в Берлине, а умер в 1995 году. Он не только построил ряд машин, которые всегда называл буквой Z (первая буква его фамилии), после которой следовал порядковый номер модели, но и основал корпорацию по производству электромеханических калькуляторов Zuse KG, которая затем была поглощена «Сименсом», где Цузе занял почетную должность. Самым, возможно, интересным его достижением было изобретение настоящего алгоритмического языка, Plankalkuel (от латинского planus calculus - «проект вычислений»), вероятно, первого в истории, если не считать достижений Ады Лавлейс, но Ада с Бэббиджем «языком» еще это дело не называли.

Первые три варианта машины (Z1, Z2 и Z3) Цузе потерял во время бомбежек Берлина союзнической авиацией в конце войны, но успел вывезти Z4 на лошадях в Геттинген и спрятать ее в конюшне, и в 1949 она была перевезена в Цюрих.

Вторая мировая война, на которую пришлось изобретение первых релейных и электромеханических машин, с одной стороны, стимулировала процесс создания всяких алгоритмических устройств для повышения быстродействия оружия, с другой - как же печально, что Говард Эйкен не был знаком с идеями Цузе по ту сторону линии фронта!

Машина Z1 конструкции Конрада Цузе (современная реконструкция).

Релейные машины

Говард Эйкен (Howard H. Aiken, 1900-1973) приступил к разработке своей машины чуть позже Цузе - в 1939 году. Эйкен был математиком, аспирантом Гарвардского университета, причем диссертацию защитил в уже довольно приличном возрасте - ему было за 40. Идею вычислительной машины с автоматическим управлением последовательностью операций он представил в IBM, и последняя предоставила ему то, что теперь называется грантом - он даже смог нанять четырех инженеров, и в августе 1944 машина, названная «Марк-I», была закончена. Только после трех лет работы над ней Эйкен натолкнулся на работы Бэббиджа и некоторое время не мог придти в себя, настолько все совпадало. «Живи Бэббидж на 75 лет позже, я бы остался безработным», - писал он в одном из интервью.

В «Марке-I», который состоял из 800 000 элементов и весил 5 тонн, для запоминания чисел применялись механические счетные регистры (24 десятичных разряда каждый, из которых один был знаковый), а для управления операциями использовались электромеханические реле. Машина содержала 142 запоминающих регистра (из них 60 - просто на механических переключателях), встроенные блоки для вычисления синусов, логарифмов и т. п. (Глядя на все это с высот нашего электронного века, трудно не оценить размах замыслов Бэббиджа - за сто лет до «Марка» в его в аналитической машине было предусмотрено 1000 регистров по 50 десятичных разрядов каждый.) Перфокарты Эйкен заменил на перфоленту с электромеханически считываемой информацией, с помощью которой вводились и команды, и данные. Время выполнения элементарной операции сложения занимало 0,3 секунды. По эффективности машина соответствовала примерно 20 человек с ручными арифмометрами. Это был первый цифровой компьютер, умевший печатать таблицы, т. е. наконец-то отвечающий замыслам Бэббиджа.

В 1947 был закончен Марк-II, построенный полностью на электромеханических реле (в количестве около 13 000) и имевший представление чисел в форме с плавающей запятой. Эйкен использовал двоично-десятичную систему, и потому для представления мантиссы десятиразрядного (десятичного) числа требовалось 40 реле, плюс 4 реле для хранения порядка и 2 реле для знаков мантиссы и порядка. Время операций сложения и вычитания составляло примерно 1/8 секунды.

С «Марком-II» связана забавная история. В 1947 году между контактами одного из реле машины застряла мошка, вызвав неисправность. Когда мошку извлекли, сотрудница Эйкена, Грейс Хоппер, позднее прославившаяся своими работами в области языков программирования, приклеила ее между страницами журнала с подписью: «Первый случай выловленного бага» 1. Таковы истоки этого термина, который в настоящее время означает ошибку в программе.

Следует также упомянуть релейные машины, изобретенные сотрудником фирмы «Белл» Джоржем Штибитцом, их было пять, от Model I до Model V. Интересно, что первые варианты «Моделей» использовали довольно заковыристую пятирично-двоичную систему счисления, а последний, пятый был десятичным и имел все признаки классической структуры ЦВМ по Бэббиджу. У Model V (1946 г.) было запоминающее устройство из 44 восьмиразрядных регистров, аппаратная поддержка вычисления тригонометрических функций и логарифмов, ввод команд и данных в нее осуществлялся с перфоленты, а вывод - на перфораторы и телетайпы (последние могли устанавливаться даже в другом городе). Возможно, это была первая по времени конструкция, где числа представлялись в форме с плавающей запятой. Операция умножения занимала 1 секунду.

Один из лучших электромеханических вычислителей построил Николай Иванович Бессонов (1906-1963) в СССР уже в 50-х годах. Законченная в 1957, РВМ-1 («Релейная Вычислительная Машина-1») проработала до 1965, и считалась одной из самых надежных конструкций того времени, когда плановое время работы Считывающий узел машины Марк-I. машин на электронных лампах составляло в среднем 16 часов в сутки. На РВМ-1 выполнялись экономические расчеты во время проведения денежной реформы 1961 года.

Начало электронного века

Но век механических, да и электромеханических вычислителей в сороковых годах практически закончился. Еще в 1907 Ли де Форрест (Lee De Forest, 1873-1961) изобрел первую электронную усилительную лампу, использовавшуюся последующие лет двадцать пять исключительно для усиления аналоговых сигналов, в основном в бурно развивавшейся тогда радиотехнике. Но уже в начале 30-х Вильямс в Англии построил первый цифровой счетчик электрических импульсов на лампах (на тиратронах). Эпохальным для истории вычислительной техники событием стало изобретение триггера (впервые, между прочим, в нашей стране, Бонч-Бруевичем в 1918 году, а также независимо год спустя в Америке, Икклзом и Джорданом). Основа конструкции триггера - два переключающих элемента (триода, тиратрона, транзистора, полевых транзистора и пр.), включенных симметрично так, что триггер может находиться в двух устойчивых состояниях - когда один из элементов пропускает через себя ток, другой находится в закрытом состоянии. При подаче очередного импульса напряжения на вход триггера элементы меняются ролями. Таким образом, один триггер может считать до двух (смотря какой из каналов пропускает ток), а каскад соединенных в цепочку таких триггеров - до скольких угодно, все определяется только их количеством.

Триггеры можно реализовать и на электромагнитных реле. Но с появлением электронных устройств удалось принципиально (на несколько порядков) повысить их быстродействие.

Но это было не все. Для построения настоящих электронных компьютеров, реализующих идеи, заложенные Бэббиджем в аналитическую машину, нужно было Одна из первых электронных ламп конструкции Ли де Фореста.ответить на один простой вопрос - а является ли счет в привычной нам десятичной системе самым удобным и простым способом производства арифметических действий?

Как мы считаем?

У человека десять пальцев на двух руках, плюс еще столько же на ногах, потому ему удобно считать в десятичной системе. Но, с другой стороны, сохранившаяся до нашего времени в нумерации глав в некоторых романах, а, главное, на циферблатах часов (взять хоть Кремлевские куранты на Спасской башне Кремля в Москве), римская система счисления является вообще не позиционной системой. Эта система устроена настолько просто, что остроумию ее изобретателей можно только позавидовать: один - палочка, два - две палочки и так далее, доходим до пяти и ставим галочку. Дойдя до десяти, ставим крестик. Для удобства и сокращения записи позднее в нее были введены элементы позиционных систем, так, обозначение IX означает, что из крестика-десятки надо вычесть единичку, а XI, наоборот, что единичку надо прибавить. Но это непринципиально - важная особенность системы состоит в том, что цифры в записанном числе, как бы они ни были обозначены, суммируются.

Складывать и вычитать в такой системе довольно просто, а вот умножать и делить - чистая каторга. Потому придумали позиционные системы, среди которых хорошо знакомая нам десятичная арабская. Правда, изобретена она была в Индии, арабы просто завезли ее в Европу в средние века, перевод соответствующего трактата аль Хорезми на латынь относится к 1120 году (между прочим, одна из версий происхождения слова «алгоритм» и идет от латинизации имени этого арабского ученого). В позиционных системах счисления вес некоего знака (в арабской системе привычные для нас цифры от 0 до 9) зависит от его позиции в написанном числе. Одна арабская цифра 3 означает именно «три», но вот две тройки подряд значат вовсе не «шесть» (как было бы в римской системе), а много больше - «тридцать три». Добавив еще одну тройку (то есть еще один разряд), вы получите уже на порядок большую величину - «триста тридцать три». К арабской системе за века существования современной цивилизации все привыкли, и даже не задумываются, что порядок записи отдельных разрядов числа перепутан: в европейской традиции правильно было бы повышать веса разрядов числа слева направо, как рука пишет, и самый старший разряд помещать в конце (у арабов и, например, израильтян, как известно, текст пишется справа налево, отсюда и порядок записи арабских чисел). Но так уж сложилось, и менять это не нам, а для арифметики-математики все равно 2.

Для нашего рассказа ключевое значение имеет тот факт, что в какой-то момент времени сразу несколько изобретателей в разных странах осознали: считать (умножать, делить, извлекать корни и брать логарифмы) в позиционных системах удобно, но совершенно необязательно при этом использовать именно десятичную систему. Древние шумеры еще 2000 лет назад использовали вполне позиционные двенадцатиричные и даже шестидесятиричные системы, что сохранилось до нашего времени в нумерации часов, минут и секунд. А у развивавшихся параллельно и независимо от Европы культур Центральной Америки - ацтеков и майя - была в ходу двадцатиричная система. Но для технических устройств самой удобной оказалась двоичная система (см. врезку).

1 (обратно к тексту) - По-английски «bug» - жук.
2 (обратно к тексту) - Только иногда голова отказывает соображать, когда программируешь на ассемблере - там запись команд и данных производится двухзнаковыми шестнадцатиричными числами, в каждом из которых разряды расположены «по-человечески», слева направо по старшинству, но сами эти числа в память компьютера записываются по мере поступления, начиная с младших ячеек, и любая программа чтения содержимого памяти выведет их на экран так, что в многоразрядных числах самый младший двухзнаковый разряд будет находиться слева, а старший - справа. Поэтому при таком программировании все время приходится в уме числа переворачивать.

Hosted by uCoz