Наследники Бэббиджа
Юрий Ревич,
revich@computerra.ru Этот материал Вы всегда сможете
найти по его постоянному адресу: http://www.homepc.ru/offline/2002/78/22548/
Разностная
машина
В доступных поисковых системах Интернета нет ни малейшего упоминания о
Лесли Джоне Компри (1893-1950), даже не удалось разыскать хоть какой-нибудь
его портрет. Единственное развернутое описание его биографии нашлось в книге
Р. С. Гутера и Ю. Л. Полунова «От абака до компьютера». А личность он
интереснейшая - родился в Новой Зеландии, образование получил в Англии, стал
магистром химии, добровольцем ушел на фронт, воевал на Первой мировой в
составе новозеландского корпуса, потерял ногу. После войны он занялся
астрономией, получил в Кембридже степень доктора, с 1925 года работал в
английском департаменте морского календаря (надо ли объяснять, что для
Англии, морской державы, этот департамент был одним из самых важных), а
позднее и руководил им. Но для нашей истории важно, что Компри увлекся
идеями Бэббиджа насчет механизации вычислений таблиц и уговорил английское
правительство финансировать постройку разностной машины, продолжив, таким
образом, дело жизни великого упрямца («ДК» #10, 2002). К середине 1930-х в
Англии благодаря ему уже функционировало около 15 разностных машин, а в 1936
Компри даже основал собственную фирму, которая занималась выполнением
сложных научных расчетов, в частности по заданиям английского правительства.
Электромеханики
Прямым развитием идей Бэббиджа стали электромеханические машины,
построенные почти одновременно в нескольких странах - США, Англии, Германии.
Первым (в 1938 году)
такую
машину построил немецкий инженер Конрад Цузе, который, судя по всему, не был
знаком с работами Бэббиджа и изобрел свою конструкцию, что называется, «с
нуля».
Цузе прожил долгую жизнь - родился в 1910 году в Берлине, а умер в 1995
году. Он не только построил ряд машин, которые всегда называл буквой Z
(первая буква его фамилии), после которой следовал порядковый номер модели,
но и основал корпорацию по производству электромеханических калькуляторов
Zuse KG, которая затем была поглощена «Сименсом», где Цузе занял почетную
должность. Самым, возможно, интересным его достижением было изобретение
настоящего алгоритмического языка, Plankalkuel (от латинского planus
calculus - «проект вычислений»), вероятно, первого в истории, если не
считать достижений Ады Лавлейс, но Ада с Бэббиджем «языком» еще это дело не
называли.
Первые три варианта машины (Z1, Z2 и Z3) Цузе потерял во время бомбежек
Берлина союзнической авиацией в конце войны, но успел вывезти Z4 на лошадях
в Геттинген и спрятать ее в конюшне, и в 1949 она была перевезена в Цюрих.
Вторая мировая война, на которую пришлось изобретение первых релейных и
электромеханических машин, с одной стороны, стимулировала процесс создания
всяких алгоритмических устройств для повышения быстродействия оружия, с
другой - как же печально, что Говард Эйкен не был знаком с идеями Цузе по ту
сторону линии фронта!
Релейные машины
Говард Эйкен (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, и считалась одной
из самых надежных конструкций того времени, когда плановое время работы
машин
на электронных лампах составляло в среднем 16 часов в сутки. На РВМ-1
выполнялись экономические расчеты во время проведения денежной реформы 1961
года.
Начало электронного века
Но век механических, да и электромеханических вычислителей в сороковых
годах практически закончился. Еще в 1907 Ли де Форрест (Lee De Forest,
1873-1961) изобрел первую электронную усилительную лампу, использовавшуюся
последующие лет двадцать пять исключительно для усиления аналоговых
сигналов, в основном в бурно развивавшейся тогда радиотехнике. Но уже в
начале 30-х Вильямс в Англии построил первый цифровой счетчик электрических
импульсов на лампах (на тиратронах). Эпохальным для истории вычислительной
техники событием стало изобретение триггера (впервые, между прочим, в нашей
стране, Бонч-Бруевичем в 1918 году, а также независимо год спустя в Америке,
Икклзом и Джорданом). Основа конструкции триггера - два переключающих
элемента (триода, тиратрона, транзистора, полевых транзистора и пр.),
включенных симметрично так, что триггер может находиться в двух устойчивых
состояниях - когда один из элементов пропускает через себя ток, другой
находится в закрытом состоянии. При подаче очередного импульса напряжения на
вход триггера элементы меняются ролями. Таким образом, один триггер может
считать до двух (смотря какой из каналов пропускает ток), а каскад
соединенных в цепочку таких триггеров - до скольких угодно, все определяется
только их количеством.
Триггеры можно реализовать и на электромагнитных реле. Но с появлением
электронных устройств удалось принципиально (на несколько порядков) повысить
их быстродействие.
Но это было не все. Для построения настоящих электронных компьютеров,
реализующих идеи, заложенные Бэббиджем в аналитическую машину, нужно было
ответить
на один простой вопрос - а является ли счет в привычной нам десятичной
системе самым удобным и простым способом производства арифметических
действий?
Как мы считаем?
У человека десять пальцев на двух руках, плюс еще столько же на ногах,
потому ему удобно считать в десятичной системе. Но, с другой стороны,
сохранившаяся до нашего времени в нумерации глав в некоторых романах, а,
главное, на циферблатах часов (взять хоть Кремлевские куранты на Спасской
башне Кремля в Москве), римская система счисления является вообще не
позиционной системой. Эта система устроена настолько просто, что остроумию
ее изобретателей можно только позавидовать: один - палочка, два - две
палочки и так далее, доходим до пяти и ставим галочку. Дойдя до десяти,
ставим крестик. Для удобства и сокращения записи позднее в нее были введены
элементы позиционных систем, так, обозначение IX означает, что из
крестика-десятки надо вычесть единичку, а XI, наоборот, что единичку надо
прибавить. Но это непринципиально - важная особенность системы состоит в
том, что цифры в записанном числе, как бы они ни были обозначены,
суммируются.
Складывать и вычитать в такой системе довольно просто, а вот умножать и
делить - чистая каторга. Потому придумали позиционные системы, среди которых
хорошо знакомая нам десятичная арабская. Правда, изобретена она была в
Индии, арабы просто завезли ее в Европу в средние века, перевод
соответствующего трактата аль Хорезми на латынь относится к 1120 году (между
прочим, одна из версий происхождения слова «алгоритм» и идет от латинизации
имени этого арабского ученого). В позиционных системах счисления вес некоего
знака (в арабской системе привычные для нас цифры от 0 до 9) зависит от его
позиции в написанном числе. Одна арабская цифра 3 означает именно «три», но
вот две тройки подряд значат вовсе не «шесть» (как было бы в римской
системе), а много больше - «тридцать три». Добавив еще одну тройку (то есть
еще один разряд), вы получите уже на порядок большую величину - «триста
тридцать три». К арабской системе за века существования современной
цивилизации все привыкли, и даже не задумываются, что порядок записи
отдельных разрядов числа перепутан: в европейской традиции правильно было бы
повышать веса разрядов числа слева направо, как рука пишет, и самый старший
разряд помещать в конце (у арабов и, например, израильтян, как известно,
текст пишется справа налево, отсюда и порядок записи арабских чисел). Но так
уж сложилось, и менять это не нам, а для арифметики-математики все равно
2.
Для нашего рассказа ключевое значение имеет тот факт, что в какой-то
момент времени сразу несколько изобретателей в разных странах осознали:
считать (умножать, делить, извлекать корни и брать логарифмы) в позиционных
системах удобно, но совершенно необязательно при этом использовать именно
десятичную систему. Древние шумеры еще 2000 лет назад использовали вполне
позиционные двенадцатиричные и даже шестидесятиричные системы, что
сохранилось до нашего времени в нумерации часов, минут и секунд. А у
развивавшихся параллельно и независимо от Европы культур Центральной Америки
- ацтеков и майя - была в ходу двадцатиричная система. Но для технических
устройств самой удобной оказалась двоичная система (см. врезку).
(Продолжение следует)
1
(обратно
к тексту) - По-английски «bug» - жук.
2
(обратно
к тексту) - Только иногда голова отказывает соображать, когда
программируешь на ассемблере - там запись команд и данных производится
двухзнаковыми шестнадцатиричными числами, в каждом из которых разряды
расположены «по-человечески», слева направо по старшинству, но сами эти
числа в память компьютера записываются по мере поступления, начиная с
младших ячеек, и любая программа чтения содержимого памяти выведет их на
экран так, что в многоразрядных числах самый младший двухзнаковый разряд
будет находиться слева, а старший - справа. Поэтому при таком
программировании все время приходится в уме числа переворачивать.
Вавилонские глиняные таблички с записью чисел. Вверху перевод некоторых
из них в десятичную систему.
При разработке первых компьютеров перед конструкторами встал вопрос об
экономичности систем исчисления с различными основаниями. Основанием системы
называется количество цифр в ней, то есть отдельных символов для написания
чисел. (Например, в десятичной системе их 10, от 0 до 9, в двоичной - всего
две цифры, 0 и 1.) А под экономичностью системы понимается тот запас чисел,
который можно записать с помощью данного количества знаков. Чтобы записать
1000 чисел (от 0 до 999) в десятичной системе, нужно 30 знаков (по десять в
каждом разряде), а в двоичной системе с помощью 30 знаков можно записать
215=32768 чисел, что гораздо больше 1000. То есть двоичная система явно
экономичнее десятичной. В общем случае, если взять n знаков в системе с
основанием x, то количество чисел, которые при этом можно записать, будет
равно xn/x. Легко найти максимум такой функции, который будет равен
иррациональному числу е=2,718282… Но поскольку система с основанием е может
существовать только в воображении математиков, то самой экономичной
считается система исчисления с основанием 3, ближайшим к числу е. В
компьютере, работающем по такой системе, число элементов, необходимых для
представления числа определенной разрядности, минимально. Троичные
компьютеры были созданы (в 1959 году под руководством Н. П. Брусенцова из
МГУ закончена разработка машин «Сетунь», и в 1961 под эгидой МинВуза СССР
даже начат их выпуск на Казанском заводе математических машин
Минрадиопрома), но все же остались историческим курьезом. И хотя время от
времени возникают предложения теоретиков использовать троичную систему в
вычислительной технике, двоичные триггеры, несмотря на развитие электроники,
оказались куда проще в реализации. Но главное даже не это. Во-первых,
передача данных от одного устройства к другому в условиях помех намного
надежнее, если производится всего двумя устойчивыми состояниями - высоким
уровнем напряжения и низким; кроме того, действия двоичных переключателей
совпадают с операциями математической логики, что было установлено Клодом
Шенноном в процессе его работы над магистерской диссертацией в 1938 году. И,
наконец, свою роль сыграла теория информации, в которой именно двоичная
величина, бит, была принята за наименьшее количество информации. Поэтому
практически все электронные вычислительные машины, включая и персоналки,
основаны на двоичной системе.
Считается, первым автором идеи использования двоичной системы исчисления
в вычислительных машинах был немецкий инженер Р. Вальта (высказавший ее
в1931 году). Но интересно, что использовать именно двоичную систему в
механических вычислениях рекомендовал еще изобретатель логарифмов Джон Непер
(1550-1617). В Rhabdologia (1617) он дал систематическое описание счетной
доски и методики, с помощью которых осуществлялись основные арифметические
действия в двоичной системе, которую он назвал Arithmeticae Localis -
«местная арифметика». Известна была двоичная система и Паскалю, и Лейбницу -
последнего даже принимали за ее изобретателя.
В «Марке-I» использовалась промежуточная BCD-система
(двоично-десятичная), где каждая десятичная цифра представлена четырьмя
двоичными разрядами. Легко подсчитать, что с помощью четырех двоичных цифр,
в принципе, можно представить шестнадцать разных чисел (от 0000 до 1111),
так что двоично-десятичная система является менее экономичной, чем чисто
двоичная. Но она очень удобна, т. к. требуется намного меньше промежуточных
технических устройств (или программных действий) для преобразования
результатов в привычную для восприятия человеком десятичную форму, что в те
времена, когда экономили каждую ячейку памяти, было существенно. Сейчас
BCD-система используется в электронных устройствах для промежуточного
преобразования из двоичного представления при необходимости вывода
результатов, например, на десятичные цифровые индикаторы.
|