ИСТОРИЯ ВТ
Юрий Полунов
Лучше синица в руке, чем журавль в небе. Житейская мудрость |
Истории было угодно распорядиться, чтобы среди тех, кто заложил основы вычислительной техники (иногда даже не подозревая об этом), было много англичан (вспомним Гэрриота*1, Бэббиджа, леди Лавлейс, Буля, Тьюринга!). Да и первый широкомасштабный опыт практического применения электроники в вычислительно-логических машинах был получен на берегах Туманного Альбиона (в дешифровочной машине COLOSSUS). Продолжателями этой традиции в сороковые - пятидесятые годы прошлого столетия стали английские ученые и инженеры, которые разработали ряд вычислительных машин (ВМ), по своей архитектуре и характеристикам не только не уступавших машинам заокеанских коллег, но и во многом опережавших их. Об этих машинах и некоторых их "промышленных продолжениях" и пойдет речь в настоящей и нескольких следующих статьях.
_____
*1 Томас Гэрриот (Tomas Herriot, 1560-1621) - выдающийся ученый, истинный homo universalis английского Возрождения, в рукописях которого историки обнаружили сведения о первом использовании двоичной системы для выполнения арифметических операций.
Как ни парадоксально, но один из самых титулованных людей компьютерного мира, обладатель множества научных наград (в том числе премии им. Тьюринга), член академий наук и почетный доктор университетов многих стран сэр Морис Винсент Уилкс (Maurice Vincent Wilkes, р. 1913) в молодые свои годы не помышлял о карьере компьютерщика. Радиофизик по образованию, он защитил в кембриджском колледже св. Иоанна докторскую диссертацию о распространении сверхдлинных радиоволн в ионосфере, в военные годы занимался исследованиями в области радиолокации, а в сентябре 1945-го возглавил Математическую лабораторию (позднее переименованную в Лабораторию вычислительной техники) в своей альма-матер. Рачительный руководитель, Уилкс стремился насытить лабораторию как можно большим количеством средств вычислительной техники (ВТ), на которых университетские ученые могли бы решать свои задачи. Но он мог предоставить своим коллегам либо стандартные счетные машины, либо аналоговые устройства - машину для решения систем линейных алгебраических уравнений и дифференциальные анализаторы различных конструкций. В мае следующего года уже знакомый нам Лесли Дж. Комри (см. PC Week/RE, N11/2006, с. 38) привез из США бесценные сто страниц мимеографической копии "Первого варианта отчета об EDVAC" фон Неймана и передал их (на одну ночь) Уилксу. Сэр Морис вспоминал: "Я сразу понял, что это (машина с хранимой программой. - Ю. П.) - стоящая вещь, и с тех пор у меня никогда не возникало серьезных сомнений относительно путей развития ВТ".
Еще через два месяца Уилкс отправляется за океан, в Пенсильванский университет. "Самое важное событие в моей жизни произошло в 1946 г., - писал он много лет спустя.- Мне удалось прослушать учебный курс по вычислительным машинам, и он произвел на меня сильнейшее впечатление. Ничего подобного раньше не было, а о достижениях ученых из школы Мура и других пионеров ВТ тогда было известно немногим. Последующие события убедительно подтвердили принципы, которым Эккерт и Моучли обучили тех, кому посчастливилось прослушать этот курс... Я возвращался с убежденностью, что знаю все [о вычислительных машинах], все, что следует знать... и начал набрасывать эскиз будущей машины на борту "Куин Мэри" по пути домой. Мне хотелось, чтобы она была простой и удобной для пользователей; это должна была быть машина последовательного действия, скромная по размерам и в основе своей повторяющая EDVAC...".
Морис Винсент Уилкс (справа) и Уильям Ренвик
Итак, цель Уилкса заключалась в том, чтобы, "не изобретая колеса", создать в возможно короткие сроки машину, в которой были бы использованы, может быть, и не самые передовые, но апробированные технические решения. Он прекрасно понимал, что основным блоком машины является ее память, и это нашло отражение в названии планируемой ЭВМ: "Электронный автоматический вычислитель с памятью на [линиях] задержки" (Electronic Delay Storage Automatic Calculator, EDSAC).
Поначалу Уилкс был не только главным архитектором машины, но и схемотехником и программистом. Но постепенно его "команда" пополнилась талантливыми исполнителями. Механической конструкцией машины занялся П. Дж. Фармер (P. J. Farmer). Кембриджский физик Томас Голд (Tomas Gold), участник разработки радаров для ВМФ, в начале 1947 г. приступил к созданию памяти на РУЛЗ (ртутных ультразвуковых линиях задержки). Он познакомил Уилкса с талантливым электронщиком Уильямом Ренвиком (William Renwick), который в марте того же года по существу стал главным инженером проекта: по словам Уилкса, "...Билл построил машину и сделал ее работоспособной. Постепенно я начал уделять все меньше времени конструированию и тестированию, возложив всю ответственность на Ренвика". Среди других разработчиков следует упомянуть инженеров С. Бэртона (S. Barton), Р. Пиггота (R. Piggott) и Г. Стевенса (G. Stevens), математика Дэвида Джона Уиллера (David John Wheeler,1927-2004), ставшего впоследствии выдающимся программистом, и его коллег Стенли Гилла (Stanly Gill, 1926-1975) и Дж. Беннета (J. Bennett).
Работа над EDSAC длилась два с половиной года. Один из ее участников вспоминал: "Для изготовления машины было выделено помещение бывшей препараторской анатомической школы Кембриджского университета, расположенной на верхнем этаже здания. Это имело свое преимущество и свой недостаток. Преимущество заключалось в наличии очень хорошего большого лифта, сконструированного так, чтобы зараз можно было перевезти два трупа. Недостаток проявлялся летом, когда под действием тепла начинал испаряться формалин, использовавшийся для сохранения трупов и за многие годы пропитавший доски пола. Запах формалина ощущался очень сильно".
Весной 1949 г. кембриджская машина была изготовлена и отлажена, а 6 мая выполнила первую программу, вычислив таблицу квадратов чисел от 0 до 99. "За 2 минуты и 35 секунд свершилось историческое событие [history was made]", - писал журналист. И с этим трудно не согласиться: EDSAC стала первой в мире действующей и практически используемой ЭВМ с хранимой программой!*1
_____
*1 С этим не согласен Джон У. Моучли, который в статье, опубликованной в октябрьском за 1979 г. номере журнала Datamation, утверждал, что построенная им и Дж. Преспером Эккертом ЭВМ с хранимой программой BINAC (о ней речь пойдет впереди) была введена в действие (в лабораторных условиях. - Ю. П.) в начале 1949-го и в апреле того же года непрерывно проработала без сбоев 44 часа.
Она оперировала с числами в форме с фиксированной запятой и имела следующие характеристики: оперативная память, работавшая на тактовой частоте примерно в 0,5 МГц, состояла из 32 РУЛЗ длиной 1,5 м и емкостью 512 тридцатишестиразрядных машинных слов (была предусмотрена возможность работы с числами половинной разрядности, что в ряде случаев удовлетворяло необходимой точности вычислений); в качестве быстродействующих регистров арифметического устройства (АУ) использовались "короткие" РУЛЗ (емкостью в одно слово); операция умножения выполнялась в отдельном множительном устройстве; командный набор состоял из 18 одноадресных команд (в машинном слове помещались две команды); выполнение операций сложения, умножения и деления занимало в среднем 1,4; 5,4 и 200 мс соответственно; ввод данных и программ осуществлялся с 5-канальной бумажной перфоленты, результаты вычислений печатались принтером телетайпа. Машина содержала около 3000 ламп, потребляла примерно 12 кВт и занимала комнату площадью 20 кв. м.
Если в архитектуре и схемотехнике EDSAC никаких новинок не было, то в области программирования кембриджская группа совершила настоящий прорыв. "Мы вскоре пришли к выводу, что создание машины является лишь первой стадией проекта, - много позднее вспоминал Уилкс. - Нам надо было научиться очень многому: как писать программы, как использовать машину для численного анализа, расчетов и всего остального... Как только мы начали заниматься программированием, то к своему удивлению обнаружили, что написать программу, которая удовлетворяла бы нас, значительно труднее, чем это нам представлялось... В один прекрасный момент, который я отчетливо помню, я понял, что теперь большую часть моей жизни буду тратить на поиск ошибок в моих собственных программах".
Здесь необходимо заметить, что первые программы, написанные для машин с хранимой программой, представляли собой совокупность последовательно расположенных строчек; каждая из них содержала записанные, например, в двоичной системе код команды, адреса ячеек памяти, хранивших числа (операнды), и адрес ячейки, в которую помещался результат операции. В процессе работы машины двоичные цифры преобразовывались в электрические сигналы высокого или низкого уровня, инициируя либо прекращая работу узлов и схем ЭВМ, участвовавших в выполнении той или иной команды. Таким образом, программирование осуществлялось на так называемом машинно-ориентированном языке или машинном коде, который был вполне очевиден, но абсолютно противоестественен для человека. Рост сложности задач привел к тому, что написанные в машинном коде программы начали представляться совокупностью тысяч или даже миллионов нулей и единиц, а ошибка хотя бы в одной двоичной цифре могла сделать программу неработоспособной (не говоря уже о том, что она плохо читалась, и даже математику, разработавшему алгоритм решения, понять ее было трудно). "Вылавливание блох" (поиск ошибок) и отладка длинной программы зачастую занимали гораздо больше времени, чем ее выполнение, что делало бессмысленным повышение быстродействия ЭВМ.
ЭВМ EDSAC
Уже первые программисты, пытаясь хоть как-нибудь облегчить свой труд, перешли к сокращенной записи комбинаций двоичных цифр, в том числе с помощью восьмеричной системы, каждая цифра которой (от 0 до 7) служила для представления одной из восьми возможных комбинаций битов (000, 001, 010, 011, 100, 101, 110, 111). Использовались и другие способы сокращенной записи программ. Например, программисты из группы Уилкса применяли не числовую, а буквенную мнемонику, заимствованную из букв латинского алфавита: скажем, команда "вычесть" обозначалась буквой S (subtract), команда "передать в память" - буквой T (transfer) и т. д., причем каждая буква имела свой двоичный эквивалент. Программа писалась с помощью этих мнемонических обозначений, набивалась на перфоленте, вводилась в машину и автоматически преобразовывалась в код команды. Язык программирования, основанный на использовании мнемонических обозначений, позднее получил название Ассемблера (от assembler - сборщик), а преобразующая программа - программой ассемблера, или, кратко, ассемблером. Впрочем, этимология этого термина была связана не с мнемоникой, а с другой головной болью программистов, излечить от которой и взялась команда Уилкса.
Речь идет о создании и автоматизации использования библиотеки стандартных подпрограмм - эту идею выдвинул еще Бэббидж. Главная сложность здесь заключалась в том, что адреса команд и переменных подпрограммы менялись в зависимости от ее размещения в памяти. Поэтому, например, при "ручном" переносе подпрограммы в другую программу к каждому адресу обычно приходилось добавлять некоторую константу, а, как говорила выдающийся программист Грейс Мюррей Хоппер (Grace Murray Hopper, 1906-1992), "программисты суммируют числа ужасно плохо". Уиллер сумел автоматизировать этот процесс: достаточно было ввести особую команду-идентификатор, и машина сама проделывала работу по настройке и размещению подпрограммы внутри основной программы*1. Происхождение термина "программа ассемблера" как раз и связано с тем, что она как бы "собирала" последовательности подпрограмм. Языки ассемблера широко используются и в настоящее время, поскольку позволяют "сжать" программу до минимального размера и выполнить ее максимально быстро и эффективно. Они, однако, имеют крупный недостаток, так как тесно связаны с набором машинных команд конкретной ЭВМ, и поэтому программу, написанную на ассемблере для одной машины, не может "понять" другая машина (по этой причине машинно-ориентированные языки и языки ассемблера называют языками программирования низшего уровня).
_____
*1 Переход к подпрограмме и возврат к основной программе получил в литературе название "прыжка Уиллера" (Wheeler Jump).
К 1951 г. кембриджские программисты разработали библиотеку из 87 подпрограмм, хранившихся на бумажных перфолентах, для работы с числами в форме с плавающей запятой, вычисления логарифмических и тригонометрических функций, решения дифференциальных уравнений и т. д*1.
_____
*1 Интересно, что в 1952 г. А. С. Дуглас (A. S. Douglas) разработал для EDSAC программу OXO, версию игры в "крестики-нолики", с графическим выводом на ЭЛТ. Это была, вероятно, одна из первых в мире компьютерных видеоигр.
Результаты этой работы Уилкс, Уиллер и Гилл обобщили в первом в мире учебнике по программированию "Подготовка программ для электронных цифровых вычислительных машин" (1951), переведенном на многие языки (в том числе и на русский). Нельзя не сказать и о другой сфере деятельности Уилкса: начиная с 1950 г. он проводил в своей лаборатории ежегодные "Летние школы по программированию", в которых принимали участие многие известные впоследствии специалисты, например выдающийся нидерландский программист Эдсгер Вайб Дейкстра (Edsger Wabe Dijkstra, 1930-2002).
В дальнейшем машина подверглась ряду усовершенствований (в частности, была дополнена накопителем на магнитной ленте) и эксплуатировалась по июль 1958 г. включительно*1.
_____
*1 В 1967 г. Уилкс был удостоен премии им. Тьюринга (аналог Нобелевской премии в области компьютерных наук) за "руководство разработкой первой практически эксплуатировавшейся ЭВМ с хранимой в памяти программой (EDSAC), развитие идеи и разработку библиотек подпрограмм".
За пять лет до этого под руководством Уилкса и Ренвика в Лаборатории вычислительной техники началась работа над новой ламповой ЭВМ - EDSAC-2. Эта одноадресная машина была куда богаче на новинки, чем ее предшественница. Вместо громоздкой и ненадежной памяти на РУЛЗ использовалось магнитное оперативное запоминающее устройство (МОЗУ) емкостью в 1024 слова, основанное на ферритовых сердечниках. Новшеством было включение в состав оборудования постоянного запоминающего устройства (ПЗУ) емкостью примерно в 800 слов, также построенного на ферритовых кольцах и существенно уменьшавшего время загрузки подпрограмм (в том числе ввода-вывода). В машине имелось два 11-разрядных индексных регистра*1, значительно облегчавших жизнь программиста; АУ параллельного действия оперировало с 40-разрядными числами как с фиксированной, так и с плавающей запятой: в первом случае операции сложения и умножения выполнялись соответственно за 20 и 200 мкс, во втором - за 75 и 275 мкс. Следует также упомянуть, что в EDSAC-2 использовался bit-slice principal - метод конструирования процессора (АУ+УУ; УУ - устройство управления) из так называемых процессорных секций, которые представляли собой независимые процессоры, обрабатывающие один, два, четыре или восемь разрядов данных.
_____
*1 Об индексных регистрах будет подробно рассказано в одной из следующих статей.
Но, конечно, важнейшей особенностью машины было первое использование принципа микропрограммного управления, предложенного М. Уилксом еще в середине 1951 г.
Напомню, что сущность этого принципа заключается в том, чтобы не фиксировать жестко набор машинных операций, осуществляемых в АУ и УУ, а предоставить программисту возможность самостоятельно составлять по крайней мере некоторые из них путем комбинации микроопераций (таких, например, как "сдвиг операнда", "передача операнда из одного регистра в другой"). Последовательность микроопераций, необходимых для выполнения машинной операции, получила название микропрограммы. Набор микропрограмм хранится в постоянной памяти (в EDSAC-2 в качестве таковой использовалась диодная, а затем ферритовая матрица), а адрес ее ячейки, с которой начинается микропрограмма той или иной операции, служит кодом операции в составе команды. Таким образом, ВМ как бы сама "программировала" внутренние информационные потоки. Принцип микропрограммного управления позволял существенно упростить схемотехнику машин и поэтому использовался во многих ВМ.
EDSAC-2 была введена в действие в 1957 г. и проработала до 1965-го. Последняя машина была построена в Кембридже в 60-е годы под руководством профессора Рождера Нидхэма (Roger Needham) и называлась Titan. В ней были повторены архитектура и программные решения знаменитого компьютера Atlas, разработанного Манчестерским университетом (мы еще встретимся с ним в одной из следующих статей).
Что же касается родоначальника кембриджской школы ВТ сэра Мориса Уилкса, то он в 1980 г. ушел из университета, затем работал консультантом в ряде американских компаний, писал статьи, мемуары, выступал на конференциях...
(Окончание следует)