Электронный автоматический вычислитель с задержкой хранения ( EDSAC ) был одним из первых британских компьютеров. [1] Вдохновленная основополагающим Первым черновиком отчета Джона фон Неймана об EDVAC , машина была создана Морисом Уилксом и его командой в Математической лаборатории Кембриджского университета в Англии. EDSAC был вторым электронным цифровым компьютером с хранимой программой после Manchester Mark 1 , который поступил в постоянную эксплуатацию. [2]
Позже проект поддержала компания J. Lyons & Co. Ltd. , намеревавшаяся разработать коммерчески применимый компьютер, что привело к разработке Лайонсом LEO I на основе конструкции EDSAC. Работа над EDSAC началась в 1947 году, [3] и первые программы были запущены 6 мая 1949 года, когда она вычислила таблицу квадратных чисел [4] и список простых чисел . [5] [6] EDSAC был окончательно закрыт 11 июля 1958 года, будучи замененным EDSAC 2 , который оставался в использовании до 1965 года. [7]
Как только EDSAC был введен в эксплуатацию, он начал обслуживать исследовательские нужды университета. Он использовал ртутные линии задержки для памяти и вакуумные лампы с пониженными характеристиками для логики. Потребляемая мощность составляла 11 кВт электроэнергии. [8] [9] Время цикла составляло 1,5 мс для всех обычных инструкций, 6 мс для умножения. Ввод осуществлялся через перфоленту с пятью отверстиями , а вывод — через телетайп .
Первоначально регистры были ограничены аккумулятором и регистром умножителя. В 1953 году Дэвид Уилер , вернувшись из Иллинойсского университета , разработал индексный регистр как расширение оригинального оборудования EDSAC.
В 1952 году был добавлен магнитный ленточный накопитель, но он так и не заработал достаточно хорошо, чтобы быть по-настоящему полезным. [9]
До 1952 года доступная основная память (инструкции и данные) составляла всего 512 18-битных слов, и не было резервного хранилища. [10] Линии задержки (или «резервуары») были организованы в две батареи, обеспечивающие 512 слов каждая. Вторая батарея вступила в строй в 1952 году. [9]
Полная память на 1024 слова с линией задержки появилась только в 1955 или в начале 1956 года [11] , что ограничивало программы примерно 800 словами.
Джон Линдли (дипломант 1958–1959 гг.) упомянул «невероятные трудности, с которыми мы когда-либо сталкивались при изготовлении хотя бы одного правильного куска бумажной ленты с помощью грубых и ненадежных самодельных устройств для перфорации, печати и проверки, доступных в конце 50-х годов» [12] .
Основная память EDSAC состояла из 1024 ячеек, хотя изначально было установлено только 512 ячеек. Каждая содержала 18 бит, но самый верхний бит всегда был недоступен из-за проблем с синхронизацией, поэтому использовались только 17 бит. Инструкция состояла из пятибитного кода инструкции, одного запасного бита, 10-битного операнда (обычно адреса памяти) и одного бита длины для управления тем, использовала ли инструкция 17-битный или 35-битный операнд (два последовательных слова, little-endian ). Все коды инструкций были спроектированы представленными одной мнемонической буквой, так что инструкция Add , например, использовала код символа EDSAC для буквы A.
Внутри EDSAC использовал двоичные числа с дополнением до двух . Числа были длиной либо 17 бит (одно слово), либо 35 бит (два слова). Необычно то, что множитель был разработан для обработки чисел как дробей с фиксированной точкой в диапазоне −1 ≤ x < 1, т. е. двоичная точка находилась сразу справа от знака. Аккумулятор мог хранить 71 бит, включая знак, что позволяло умножать два длинных (35-битных) числа без потери точности.
Имелись следующие инструкции:
Не было инструкции деления (но были предоставлены различные подпрограммы деления) и не было способа напрямую загрузить число в аккумулятор (для этого требовалась инструкция «Сохранить и обнулить аккумулятор», за которой следовала инструкция «Сложить»). Не было инструкции безусловного перехода, не было и инструкции вызова процедуры — она еще не была изобретена.
Морис Уилкс обсуждал относительные режимы адресации для EDSAC в статье, опубликованной в 1953 году. Он вносил предложения по упрощению использования подпрограмм . [13]
Первоначальные заказы были жестко зашиты в набор униселекторных переключателей и загружены в нижние слова памяти при запуске. К маю 1949 года первоначальные заказы предоставили примитивный перемещающийся ассемблер , использующий описанную выше мнемоническую конструкцию, всего в 31 слове. Это был первый в мире ассемблер и, возможно, начало глобальной индустрии программного обеспечения. Доступна симуляция EDSAC и полное описание первоначальных заказов и первых программ. [14]
Первым вычислением, выполненным EDSAC, была программа, запущенная 6 мая 1949 года для вычисления квадратных чисел . [15] Программа была написана Беатрис Уорсли , которая приехала из Канады, чтобы изучить машину. [16] [15]
Эту машину использовали и другие сотрудники университета для решения реальных задач, и на ее основе были разработаны многие ранние методы, которые теперь включены в операционные системы.
Пользователи готовили свои программы, набирая их (на ассемблере) на бумажную ленту. Вскоре они научились держать бумажную ленту на свету и считывать коды. Когда программа была готова, ее вешали на отрезок линии, натянутый около считывателя бумажной ленты. Операторы машин, которые присутствовали в течение дня, выбирали следующую ленту из линии и загружали ее в EDSAC. Конечно, сегодня это хорошо известно как очереди заданий. Если программа что-то печатала, то лента и распечатка возвращались пользователю, в противном случае ему сообщалось, в какой ячейке памяти она остановилась. Отладчики были некоторое время вдали, но экран электронно-лучевой трубки можно было настроить на отображение содержимого определенной части памяти. Это использовалось, например, для того, чтобы увидеть, сходится ли число. Громкоговоритель подключался к знаковому биту аккумулятора; опытные пользователи знали полезные и нездоровые звуки программ, особенно программ, «зависших» в цикле.
После окончания рабочего дня определенным «авторизированным пользователям» разрешалось управлять машиной самостоятельно, что продолжалось до поздней ночи, пока не лопался клапан — что обычно случалось, по словам одного из таких пользователей. [17] На это намекает Фред Хойл в своем романе «Черное облако» .
Ранним программистам приходилось использовать методы, которые сегодня не одобряются, в частности, использование самомодифицирующегося кода . Поскольку индексный регистр появился гораздо позже, единственным способом доступа к массиву было изменение ячейки памяти, на которую ссылалась конкретная инструкция.
Дэвид Уилер , который получил первую в мире степень доктора компьютерных наук, работая над проектом, считается изобретателем концепции подпрограммы. Пользователи писали программы, которые вызывали подпрограмму, переходя к началу подпрограммы с адресом возврата (т. е. местоположением плюс один самого перехода) в аккумуляторе ( переход Уиллера ). По соглашению подпрограмма ожидала этого, и первое, что она делала, — изменяла свою заключительную инструкцию перехода на этот адрес возврата. Можно было вызывать множественные и вложенные подпрограммы, пока пользователь знал длину каждой из них, чтобы вычислить местоположение для перехода; рекурсивные вызовы были запрещены. Затем пользователь копировал код для подпрограммы с мастер-ленты на свою собственную ленту после окончания своей собственной программы. (Однако Алан Тьюринг обсуждал подпрограммы в статье 1945 года о предложениях по проектированию NPL ACE , зайдя так далеко, что изобрел концепцию стека обратного адреса, который допускал рекурсию. [19] )
Отсутствие индексного регистра также создавало проблему для автора подпрограммы, поскольку они не могли заранее знать, куда в памяти будет загружена подпрограмма, и, следовательно, они не могли знать, как обращаться к любым областям кода, которые использовались для хранения данных (так называемые «псевдозаказы»). Это было решено с помощью начальной входной процедуры, которая отвечала за загрузку подпрограмм с перфоленты в память. При загрузке подпрограммы она отмечала начальное местоположение и увеличивала внутренние ссылки памяти по мере необходимости. Таким образом, как писал Уилкс, «код, используемый для представления заказов вне машины, отличается от того, который используется внутри, причем различия диктуются различными требованиями программиста, с одной стороны, и цепей управления машины, с другой». [20]
Программисты EDSAC использовали специальные методы, чтобы наилучшим образом использовать ограниченную доступную память. Например, в момент загрузки подпрограммы с перфоленты в память могло случиться так, что нужно было бы вычислить определенную константу, константу, которая впоследствии не нуждалась бы в пересчете. В этой ситуации константа вычислялась бы в «интерлюдии». Код, необходимый для вычисления константы, предоставлялся бы вместе с полной подпрограммой. После того, как начальная входная подпрограмма загрузила бы код вычисления, она передала бы управление этому коду. После того, как константа была бы вычислена и записана в память, управление возвращалось бы начальной входной подпрограмме, которая продолжала бы записывать остаток подпрограммы в память, но сначала корректировала бы свою начальную точку так, чтобы перезаписать код, который вычислил константу. Это позволяло вносить довольно сложные корректировки в универсальную подпрограмму, не делая ее окончательный след в памяти больше, чем если бы она была адаптирована к определенным обстоятельствам. [21]
Концепция подпрограмм привела к появлению существенной библиотеки подпрограмм. К 1951 году для общего пользования было доступно 87 подпрограмм в следующих категориях: арифметика с плавающей точкой ; арифметические операции над комплексными числами ; проверка; деление; возведение в степень ; процедуры, связанные с функциями; дифференциальные уравнения ; специальные функции; степенные ряды ; логарифмы ; разное; печать и макет; квадратура ; чтение (ввод); корень n-й степени; тригонометрические функции ; операции подсчета (симуляция циклов repeat until , while и for ); векторы ; и матрицы .
Первый язык ассемблера появился для EDSAC и вдохновил на создание нескольких других языков ассемблера:
EDSAC был разработан специально для того, чтобы стать частью службы поддержки вычислений Математической лаборатории. [22] Первая научная работа, опубликованная с использованием компьютера для вычислений, была написана Рональдом Фишером . [ требуется ссылка ] Уилкс и Уиллер использовали EDSAC для решения дифференциального уравнения, касающегося частот генов. [23] В 1951 году Миллер и Уиллер использовали машину для открытия 79-значного простого числа [24] — самого большого известного на тот момент.
Лауреаты трех Нобелевских премий – Джон Кендрю и Макс Перуц (химия, 1962), Эндрю Хаксли (медицина, 1963) и Мартин Райл (физика, 1974) – воспользовались революционной вычислительной мощностью EDSAC. В своих речах на вручении наград каждый из них признал роль, которую EDSAC сыграл в их исследованиях.
В начале 1960-х годов Питер Суиннертон-Дайер использовал компьютер EDSAC для вычисления количества точек по модулю p (обозначаемого как N p ) для большого количества простых чисел p на эллиптических кривых, ранг которых был известен. Основываясь на этих численных результатах, Бирч и Суиннертон-Дайер (1965) предположили, что N p для кривой E с рангом r подчиняется асимптотическому закону, гипотезе Бирча и Суиннертона-Дайера , считающейся одной из главных нерешенных проблем в математике по состоянию на 2024 год.
"Мозг" [компьютер] может однажды спуститься до нашего уровня [простых людей] и помочь нам с нашими расчетами подоходного налога и бухгалтерского учета. Но это лишь домыслы, и пока никаких признаков этого нет.
— Британская газета The Star в статье за июнь 1949 года о компьютере EDSAC, задолго до эры персональных компьютеров. [25]
В 1952 году Сэнди Дуглас разработал OXO , версию крестиков-ноликов (крестики-нолики) для EDSAC, с графическим выводом на 6-дюймовую электронно-лучевую трубку VCR97 . Это вполне могла быть первая в мире видеоигра . [26] [27]
Другая видеоигра была создана Стэнли Гиллом и включала в себя точку (названную овцой), приближающуюся к линии, в которой можно было открыть одни из двух ворот. [28] Игра Стэнли Гилла управлялась с помощью светового луча считывателя бумажной ленты EDSAC. [28] Прерывание его (например, когда игрок помещал в него руку) открывало верхние ворота. [28] Если оставить луч непрерванным, открывались нижние ворота. [28]
Преемник EDSAC, EDSAC 2 , был введен в эксплуатацию в 1958 году.
В 1961 году Дэвид Хартли разработал версию Autocode для EDSAC 2 — языка программирования высокого уровня для ученых и инженеров, похожего на ALGOL .
В середине 1960-х годов планировалось создание преемника EDSAC 2, но вместо этого был сделан шаг в сторону Titan , прототипа Atlas 2, разработанного на основе компьютера Atlas Манчестерского университета , Ферранти и Плесси .
13 января 2011 года Общество сохранения компьютеров объявило, что планирует построить рабочую копию EDSAC в Национальном музее вычислительной техники (TNMoC) в Блетчли-парке под руководством Эндрю Герберта , который учился у Мориса Уилкса. [29] Первые части копии были включены в ноябре 2014 года. [30] [31] Логические схемы EDSAC были тщательно реконструированы с помощью разработки симулятора и повторного изучения некоторых заново открытых оригинальных схем. Эта документация была выпущена по лицензии Creative Commons. [32] Текущий проект открыт для посетителей музея. В 2016 году два оригинальных оператора EDSAC, Маргарет Маррс и Джойс Уилер, посетили музей, чтобы помочь проекту. [33] По состоянию на ноябрь 2016 года ввод в эксплуатацию полностью завершенной и работоспособной копии предполагался осенью 2017 года. [34] Однако непредвиденные задержки проекта привели к тому, что дата завершения и полной работоспособности машины неизвестна.
{{cite journal}}
: CS1 maint: others (link){{cite web}}
: CS1 maint: archived copy as title (link)