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