Введение

Первый электронный компьютер с сохраненной программой, 1948

The Manchester Baby, также называемый Маломасштабной экспериментальной машиной (SSEM), был первым электронным компьютером с сохраненной программой. Он был построен в Манчестерском университете Фредериком С. Уильямсом, Томом Килберном и Джеффом Тутилом и выполнил свою первую программу 21 июня 1948 года. Baby не предназначался для использования в качестве практического вычислительного устройства, а был разработан как испытательный стенд для трубки Уильямса – первой полноценной памяти с произвольным доступом. Описанный как «маленький и примитивный» спустя 50 лет после создания, он был первой рабочей машиной, содержащей все элементы, необходимые для современного электронного цифрового компьютера. У Baby была 32-битная разрядность и память объемом 32 слова (1 кибит, 1024 бита). Поскольку он был разработан как максимально простой компьютер с сохраненной программой, единственными арифметическими операциями, реализованными аппаратно, были вычитание и отрицание; другие арифметические операции выполнялись программно. Первая из трех программ, написанных для машины, вычислила наибольший собственный делитель числа 218 (262 144), последовательно проверяя каждое целое число, начиная с 218 и уменьшаясь. Выполнение этого алгоритма заняло бы много времени, что должно было продемонстрировать надежность компьютера, поскольку деление осуществлялось путем многократного вычитания делителя. Программа состояла из 17 инструкций и выполнялась около 52 минут, прежде чем был получен правильный ответ – 131 072, после того как Baby выполнил около 3,5 миллиона операций (что соответствует эффективной скорости процессора примерно 1100 инструкций в секунду). Z3 Конрада Цузе был первым в мире рабочим программируемым, полностью автоматическим компьютером с двоичной цифровой арифметической логикой, но ему не хватало условного перехода машины Тьюринга. 12 мая 1941 года Z3 был успешно представлен аудитории ученых Deutsche Versuchsanstalt für Luftfahrt («Немецкая лаборатория авиации») в Берлине. Z3 хранил свою программу на внешней ленте, но был электромеханическим, а не электронным устройством. Самыми ранними электронными вычислительными устройствами были компьютер Atanasoff–Berry (ABC), успешно протестированный в 1942 году, и Colossus 1943 года, но ни один из них не был машиной с сохраненной программой. ENIAC (1946) был первым автоматическим компьютером, который был одновременно электронным и общего назначения. Он был Тьюринг-полным, поддерживал условные переходы и мог быть запрограммирован для решения широкого круга задач, но его программа хранилась в виде состояния переключателей в соединительных шнурах, а не в памяти с возможностью машинного изменения, и перепрограммирование могло занимать несколько дней. Исследователи, такие как Тьюринг и Цузе, изучали идею использования памяти компьютера для хранения как программы, так и данных, над которыми она работала, и именно математик Джон фон Нейман написал широко распространенную статью, описывающую эту компьютерную архитектуру, которая до сих пор используется почти во всех компьютерах. Создание компьютера фон Неймана зависело от наличия подходящего устройства памяти для хранения программы. Во время Второй мировой войны исследователи, работавшие над проблемой устранения помех из радиолокационных сигналов, разработали форму памяти задержки линии, первым практическим применением которой стала ртутная линия задержки, разработанная Дж. Преспером Экертом. Радиолокационные передатчики регулярно посылают короткие импульсы радиоэнергии, отражения от которых отображаются на экране ЭЛТ. Поскольку операторов обычно интересуют только движущиеся объекты, желательно было отфильтровать любые отвлекающие отражения от неподвижных объектов. Фильтрация достигалась путем сравнения каждого принятого импульса с предыдущим импульсом и отклонения обоих, если они были идентичны, оставляя сигнал, содержащий только изображения любых движущихся объектов. Для сохранения каждого принятого импульса для последующего сравнения он проходил через линию передачи, задерживая его ровно на время между передаваемыми импульсами. Тьюринг присоединился к Национальной физической лаборатории (NPL) в октябре 1945 года, к тому времени ученые из Министерства снабжения пришли к выводу, что Великобритании нужна Национальная математическая лаборатория для координации машинных вычислений. В NPL был создан математический отдел, и 19 февраля 1946 года Алан Тьюринг представил доклад, в котором изложил свой проект электронного компьютера с сохраненной программой, известного как Automatic Computing Engine (ACE). Это был один из нескольких проектов, запущенных в годы, последовавшие за Второй мировой войной, с целью создания компьютера с сохраненной программой. Примерно в то же время EDVAC разрабатывался в Школе электротехники и машиностроения Университета Пенсильвании, а Математическая лаборатория Кембриджского университета работала над EDSAC. NPL не обладала опытом для создания такой машины, как ACE, поэтому они обратились к Томми Флауэрсу в Исследовательской лаборатории общего почтового ведомства (GPO) в Доллис-Хилл. Флауэрс, разработчик Colossus, первого в мире программируемого электронного компьютера, был занят другими делами и не смог принять участие в проекте, хотя его команда построила несколько ртутных линий задержки для ACE. За помощью также обратились в Исследовательское управление телекоммуникаций (TRE), а также к Морису Уилксу в Математической лаборатории Кембриджского университета. Правительственный департамент, ответственный за NPL, решил, что из всех работ, выполняемых TRE по его поручению, ACE должен быть поставлен в наивысший приоритет. Решение NPL привело к визиту начальника физического отдела TRE 22 ноября 1946 года в сопровождении Фредерика С. Уильямса и А. М. Уттли, также из TRE. Уильямс возглавлял исследовательскую группу TRE, работавшую над запоминающими устройствами на ЭЛТ для радиолокационных приложений, в качестве альтернативы линиям задержки. Уильямс не мог работать над ACE, поскольку он уже принял предложение занять должность профессора в Манчестерском университете, и большинство его технических специалистов переводились в Департамент атомной энергии. TRE согласился направить небольшое количество техников для работы под руководством Уильямса в университете и поддержать другую небольшую группу, работавшую с Уттли в TRE.

Трубка Уильямс-Килберн

Хотя некоторые ранние компьютеры, такие как EDSAC, вдохновленные конструкцией EDVAC, впоследствии успешно использовали ртутные линии задержки, эта технология имела ряд недостатков: она была тяжелой, дорогой и не обеспечивала произвольный доступ к данным. Кроме того, поскольку данные хранились в виде последовательности акустических волн, распространяющихся в ртутном столбе, температуру устройства необходимо было очень тщательно контролировать, так как скорость звука в среде меняется в зависимости от температуры. Уильямс стал свидетелем эксперимента в Bell Labs, демонстрировавшего эффективность электронно-лучевых трубок (ЭЛТ) как альтернативы линиям задержки для подавления наземных отражений от радиолокационных сигналов. Работая в TRE, незадолго до перехода в Манчестерский университет в декабре 1946 года, он и Том Килберн разработали форму электронной памяти, известную как трубка Уильямса или трубка Уильямса — Килберна, основанную на стандартной ЭЛТ: первое электронное устройство цифрового хранения с произвольным доступом. Компьютер Baby был разработан, чтобы продемонстрировать практичность этого устройства хранения, показав, что данные, хранящиеся в нем, могут быть надежно прочитаны и записаны со скоростью, подходящей для использования в компьютере. Для использования в двоичном цифровом компьютере трубка должна была хранить одно из двух состояний в каждой ячейке памяти, соответствующее двоичным цифрам (битам) 0 и 1. В основе работы лежала положительная или отрицательная электрическая заряженность, возникающая при отображении на экране ЭЛТ тире или точки, явление, известное как вторичная эмиссия. Тире создавало положительный заряд, а точка — отрицательный, каждый из которых мог быть зафиксирован детектирующей пластиной перед экраном; отрицательный заряд представлял 0, а положительный — 1. Заряд рассеивался примерно за 0,2 секунды, но мог автоматически восстанавливаться на основе данных, полученных детектором. Трубка Уильямса, использованная в Baby, была основана на CV1131, коммерчески доступной ЭЛТ определенного диаметра, а в Mark I использовалась трубка меньшего размера — CV1097.

Начало проекта

После разработки компьютера Colossus для дешифровки кодов в Блетчли-парке во время Второй мировой войны, Макс Ньюман посвятил себя созданию компьютера, объединяющего математические концепции Алана Тьюринга и концепцию хранимой программы, описанную Джоном фон Нейманом. В 1945 году он был назначен на должность профессора кафедры Фильдена по чистой математике в Манчестерском университете; он перевез в Манчестер своих коллег по проекту Colossus, Джека Гуда и Дэвида Риса, и там они пригласили Ф. С. Уильямса в качестве разработчика схем для нового компьютерного проекта, для которого ему удалось получить финансирование от Королевского общества. "Обеспечив поддержку университета, получив финансирование от Королевского общества и собрав первоклассную команду математиков и инженеров, Ньюман теперь располагал всеми необходимыми компонентами для реализации своего плана по созданию компьютера. Применив подход, который он так успешно использовал в Блетчли-парке, Ньюман поручил своим сотрудникам детальную работу, а сам сосредоточился на координации проекта." Гуд не предусмотрел инструкцию "остановки", а его предложенная инструкция условного перехода была сложнее, чем та, что была реализована в компьютере "Baby".

Разработка и проектирование

Хотя Ньюман не принимал непосредственного участия в разработке Baby или каких-либо последующих компьютеров Манчестера, он всецело поддерживал проект и с энтузиазмом отнесся к нему, организовав приобретение излишков военных материалов для строительства, включая металлические стойки GPO и "материал двух полных Colossi" из Блетчли. К июню 1948 года Baby был построен и функционировал. Его длина составляла 5 метров, высота – 2 метра, а вес – почти 700 фунтов. Машина содержала 550 вакуумных ламп – 300 диодов и 250 пентод – и потребляла 3500 ватт мощности. Арифметическое устройство было построено на основе пентодных ламп EF50, которые широко использовались во время войны. Baby использовал одну трубку Уильямса для обеспечения памяти объемом 32 x 32 бита (RAM), вторую – для хранения 32-битного аккумулятора, в котором можно было временно сохранять промежуточные результаты вычислений, и третью – для хранения текущей инструкции программы вместе с ее адресом в памяти. Четвертая ЭЛТ, лишенная схемы хранения данных, как у остальных трех, использовалась в качестве устройства вывода, способного отображать битовую структуру любой выбранной трубки памяти. Каждое 32-битное слово оперативной памяти могло содержать либо инструкцию программы, либо данные. В инструкции программы биты 0–12 представляли адрес памяти операнда, а биты 13–15 определяли операцию, которую необходимо выполнить, например, сохранение числа в памяти; остальные 16 бит оставались неиспользованными. Однооперандная архитектура Baby означала, что второй операнд любой операции был подразумеваемым: аккумулятор или счетчик программы (адрес инструкции); инструкции программы указывали только адрес данных в памяти. Чтение, запись или обновление слова в памяти компьютера занимало 360 микросекунд. Выполнение инструкции занимало в четыре раза больше времени, чем доступ к слову из памяти, что обеспечивало скорость выполнения инструкций около 700 в секунду. Основная память постоянно обновлялась, процесс, занимавший 20 миллисекунд, поскольку каждое из 32 слов Baby необходимо было прочитать и затем последовательно обновить. Baby представлял отрицательные числа, используя дополнительный код, как это делают большинство современных компьютеров. В этом представлении значение старшего бита определяет знак числа: положительные числа имеют в этой позиции ноль, а отрицательные – единицу. Таким образом, диапазон чисел, которые можно было хранить в каждом 32-битном слове, составлял от -231 до +231 – 1 (в десятичной системе: от -2,147,483,648 до +2,147,483,647).

Первые программы

Для компьютера были написаны три программы. Первая, состоящая из 17 инструкций, была написана Килберном и, насколько известно, впервые запущена 21 июня 1948 года. Она была разработана для нахождения наибольшего собственного делителя числа 218 (262 144) путем последовательной проверки всех целых чисел, начиная с 218 − 1 и уменьшаясь. Деление выполнялось путем многократного вычитания делителя. Компьютеру "Baby" потребовалось 3,5 миллиона операций и 52 минуты для получения ответа (131 072). Программа использовала восемь слов оперативной памяти, помимо 17 слов, занимаемых инструкциями, что в сумме составляло 25 слов. Джефф Тутилл написал модифицированную версию программы в следующем месяце, а в середине июля Алан Тьюринг, который в сентябре 1948 года был назначен лектором в математическом отделе Манчестерского университета, представил третью программу для выполнения длинного деления. К тому времени Тьюринг был назначен на номинальную должность заместителя директора Лаборатории вычислительной техники университета, хотя физическое воплощение лаборатории произошло только в 1951 году.

Позднее развитие

Уильямс и Килберн доложили о "Малыше" в письме, опубликованном в журнале Nature в сентябре 1948 года. Успешная демонстрация машины быстро привела к созданию более практичного компьютера Manchester Mark 1, работы над которым начались в августе 1948 года. Первая версия была введена в эксплуатацию к апрелю 1949 года, и она, в свою очередь, напрямую способствовала разработке Ferranti Mark 1 – первого в мире коммерчески доступного компьютера общего назначения. В 2008 году оригинальная панорамная фотография всей машины была обнаружена в Университете Манчестера. Фотография, сделанная 15 декабря 1948 года студентом-исследователем Алеком Робинсоном, была опубликована в The Illustrated London News в июне 1949 года.