Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Архитектура компьютера - Таненбаум Э

..pdf
Скачиваний:
485
Добавлен:
24.05.2014
Размер:
5.67 Mб
Скачать

Многоуровневая компьютерная организация

23

Второй уровень мы будем называть уровнем архитектуры системы команд. Каждый производитель публикует руководство для компьютеров, которые он продает, под названием «Руководство по машинному языку» или «Принципы работы компьютера Western Wombat Model 100X» и т. п. Такие руководства содержат информацию именно об этом уровне. Когда они описывают набор машинных команд, они в действительности описывают команды, которые выполняются микро- программой-интерпретатором или аппаратным обеспечением. Если производитель поставляет два интерпретаторадля одной машины, он должен издать два руководства по машинному языку, отдельно для каждого интерпретатора.

Следующий уровень обычно гибридный. Большинство команд в его языке есть также и на уровне архитектуры системы команд (команды, имеющиеся на одном из уровней, вполне могут находиться на других уровнях). У этого уровня есть некоторые дополнительные особенности: набор новых команд, другая организация памяти, способность выполнять две и более программ одновременно и некоторые другие. При построении третьего уровня возможно больше вариантов, чем при построении первого и второго.

Новые средства, появившиеся на третьем уровне, выполняются интерпретатором, который работает на втором уровне. Этот интерпретатор был когда-то назван операционной системой. Команды третьего уровня, идентичные командам второго уровня, выполняются микропрограммой или аппаратным обеспечением, но не операционной системой. Иными словами, одна часть команд третьего уровня интерпретируется операционной системой, а другая часть — микропрограммой. Вот почему этот уровень считается гибридным. Мы будем называть этот уровень уров-

нем операционной системы.

Между третьим и четвертым уровнями есть существенная разница. Нижние три уровня конструируются не для того, чтобы с ними работал обычный программист. Они изначально предназначены для работы интерпретаторов и трансляторов, поддерживающих более высокие уровни. Эти трансляторы и интерпретаторы составляются так называемыми системными программистами, которые специализируются на разработке и построении новых виртуальных машин. Уровни с четвертого и выше предназначены для прикладных программистов, решающих конкретные задачи.

Еще одно изменение, появившееся на уровне 4, — способ, которым поддерживаются более высокие уровни. Уровни 2 и 3 обычно интерпретируются, а уровни 4, 5 и выше обычно, хотя и не всегда, поддерживаются транслятором.

Другое различие между уровнями 1,2,3 и уровнями 4,5 и выше — особенность языка. Машинныеязыки уровней 1,2 и3 — цифровые. Программы, написанные на этих языках, состоят из длинных рядов цифр, которые удобны для компьютеров, но совершенно неудобны для людей. Начиная с четвертого уровня, языки содержат слова и сокращения, понятные человеку.

Четвертый уровень представляет собой символическую форму одного из языков более низкого уровня. На этом уровне можно писать программы в приемлемой для человека форме. Эти программы сначала транслируются на язык уровня 1, 2 или 3, а затем интерпретируются соответствующей виртуальной или фактически существующей машиной. Программа, которая выполняет трансляцию, называется ассемблером.

24 Глава 1. Предисловие

Пятый уровень обычно состоит из языков, разработанныхдля прикладных программистов. Такие языки называются языками высокого уровня. Существуют сотни языков высокого уровня. Наиболее известные среди них — BASIC, С, C++, Java, LISP и Prolog. Программы, написанные на этих языках, обычно транслируются на уровень 3 или 4. Трансляторы, которые обрабатывают эти программы, называются компиляторами. Отметим, что иногда также используется метод интерпретации. Например, программы на языке Java обычно интерпретируются.

В некоторых случаях пятый уровень состоит из интерпретатора для такой сферы приложения, как символическая математика. Он обеспечиваетданные и операции для решения задач в этой сфере в терминах, понятных людям, сведущим в символической математике.

Вывод: компьютер проектируется как иерархическая структура уровней, каждый из которых надстраивается над предыдущим. Каждый уровень представляет собой определенную абстракцию с различными объектами и операциями. Рассматривая компьютер подобным образом, мы можем не принимать во внимание ненужные нам детали и свести сложный предмет к более простому для понимания.

Набор типов данных, операций и особенностей каждого уровня называется архитектурой. Архитектура связана с аспектами, которые видны программисту. Например, сведения о том, сколько памяти можно использовать при написании программы, — часть архитектуры. А аспекты разработки (например, какая технология используется при создании памяти) не являются частью архитектуры. Изучение того, как разрабатываются те части компьютерной системы, которые видны программистам, называется изучением компьютерной архитектуры. Термины «компьютерная архитектура» и «компьютерная организация» означают в сущности одно и то же.

Развитие многоуровневых машин

В этом разделе мы кратко изложим историю развития многоуровневых машин, покажем, как число и природа уровней менялись с годами. Программы, написанные на машинном языке (уровень 1), могут сразу выполняться электронными схемами компьютера (уровень 0), без применения интерпретаторов и трансляторов. Эти электронные схемы вместе с памятью и средствами ввода-вывода формируют аппаратное обеспечение. Аппаратное обеспечение состоит из осязаемых объектов — интегральных схем, печатных плат, кабелей, источников электропитания, запоминающих устройств и принтеров. Абстрактные понятия, алгоритмы и команды не относятся к аппаратному обеспечению.

Программное обеспечение, напротив, состоит из алгоритмов (подробных последовательностей команд, которые описывают, как решить задачу) и их компьютерных представлений, то есть программ. Программы могут храниться на жестком диске, гибком диске, компакт-дискеили других носителях, но в сущности программное обеспечение — это набор команд, составляющих программы, а не физические носители, на которых эти программы записаны.

В самых первых компьютерах граница между аппаратным и программным обеспечением была очевидна. Со временем, однако, произошло значительное размывание этой границы, в первую очередь благодаря тому, что в процессе развития

Многоуровневая компьютерная организация

25

компьютеров уровни добавлялись, убирались и сливались. В настоящее время очень сложно отделить их друг от друга. В действительности центральная тема этой книгиможетбытьвыраженатак:аппаратноеипрограммноеобеспечениелогически эквивалентны.

Любая операция, выполняемая программным обеспечением, может быть встроена в аппаратное обеспечение (желательно после того, как она осознана). Карен Панетта Ленц говорил; «Аппаратное обеспечение — это всего лишь окаменевшее программное обеспечение». Конечно, обратное тоже верно: любая команда, выполняемая аппаратным обеспечением, может быть смоделирована в программном обеспечении. Решение разделить функции аппаратного и программного обеспечения основано на таких факторах, как стоимость, скорость, надежность, а также частота ожидаемых изменений. Существует несколько жестких правил, сводящихся к тому, что X должен быть в аппаратном обеспечении, a Y должен программироваться. Эти решения изменяются в зависимости от тенденций в развитии компьютерных технологий.

Изобретение микропрограммирования

У первых цифровых компьютеров в 1940-х годах было только 2 уровня: уровень архитектуры набора команд, на котором осуществлялось программирование, и цифровой логический уровень, который выполнял программы. Схемы цифрового логического уровня были сложны для производства и понимания и ненадежны.

В1951 году Морис Уилкс, исследователь Кембриджскс-о университета, предложил идею разработки трехуровневого компьютера для того, чтобы упростить аппаратное обеспечение [158]. Эта машина должна была иметь встроенный неизменяемый интерпретатор (микропрограмму), функция которого заключалась

ввыполнении программ посредством интерпретации. Так как аппаратное обеспечение должно было теперь вместо программ уровня архитектуры команд выполнять только микропрограммы с ограниченным набором команд, требовалось меньшее количество электронных схем. Поскольку электронные схемы тогда делались из электронных ламп, такое упрощение должно было сократить количество ламп и, следовательно, увеличить надежность.

В50-е годы было построено несколько трехуровневых машин. В 60-х годах число таких машин значительно увеличилось. К 70-м годам идея о том, что написанная программа сначаладолжна интерпретироваться микропрограммой, а не выполняться непосредственно электроникой, стала преобладающей.

Изобретение операционной системы

Вте времена, когда компьютеры только появились, принципы работы с ними сильно отличались от современных. Одним компьютером пользовалось большое количество людей. Рядом с машиной лежал листок бумаги, и если программист хотел запустить свою программу, он записывался на какое-то определенное время, скажем, на среду с 3 часов ночи до 5 утра (многие программисты любили работать в тишине). В назначенное время программист направлялся в комнату, где стояла машина, с пачкой перфокарт, которые тогда служили средством ввода, и карандашом. Каждая перфокарта содержала 80 колонок; на ней в определенных местах

26 Глава 1 Предисловие

пробивались отверстия. Войдя в комнату, программист вежливо просил предыдущего программиста освободить место и приступал к работе.

Если он хотел запустить программу на языке FORTRAN, ему необходимо было пройти следующие этапы:

1.Он подходил к шкафу, где находилась библиотека программ, брал большую зеленую стопку перфокарт с надписью «Компилятор FORTRAN», помещал их в считывающее устройство и нажимал кнопку «Пуск».

2.Затем он помещал стопку карточек со своей программой, написанной наязыке FORTRAN, в считывающее устройство и нажимал кнопку «Продолжить». Программа считывалась.

3.Когда компьютер прекращал работу, программист считывал свою программу во второй раз. Некоторые компиляторы требовали только одного считывания перфокарт, но в большинстве случаев необходимо было производить эту процедуру несколько раз. Каждый раз нужно было считывать большую стопку перфокарт.

4.В конце концов трансляция завершалась. Программист часто становился очень нервным, потому что если компилятор находил ошибку в программе, ему приходилось исправлять ее и начинать процесс ввода программы заново. Если ошибок не было, компилятор выдавал программу на машинномязыке на перфокартах.

5.Тогда программист помещал эту программу на машинном языке в устройство считывания вместе с пачкой перфокарт из библиотеки подпрограмм и загружал обе эти программы.

6.Начиналось выполнение программы. В большинстве случаев она не работала или неожиданно останавливалась в середине. Обычно в этом случае программист начинал дергать переключатели на пульте и смотрел на лампочки.

Вслучае удачи он находил и исправлял ошибку, подходил к шкафу, в котором лежал большой зеленый компилятор FORTRAN, и начинал все заново.

Вслучае неудачи он делал распечатку содержания памяти, что называлось

разгрузкой оперативного запоминающего устройства, и брал эту распечатку

домой для изучения.

Это процедура была обычной на протяжении многих лет. Программистам приходилось учиться, как работать с машиной и что нужно делать, если она выходила из строя, что происходило довольно часто. Машина постоянно простаивала без работы, пока люди носили перфокарты по комнате или ломали головы над тем, почему программа не работает.

В 60-е годы человек попытался сократить количество потерянного времени, автоматизировав работу оператора. Программа под названием «операционная система» теперь содержалась в компьютере все время. Программист приносил пачку перфокарт со специальной программой, которая выполнялась операционной системой. На рисунке 1.3 показана модель пачки перфокарт для первой широко распространенной операционной системы FMS (FORTRAN Monitor System) к компьютеру IBM-709.

Многоуровневая компьютерная организация

27

'JOB, 5494, BARBARA "XEQ

•FORTRAN

Программа на FORTRAN

•DATA

Перфокарты с данными

•END

Рис. 1.3. Схема работы с операционной системой FMS

Операционная система считывала перфокарту *JOB и использовала содержащуюся на ней информацию для учета системных ресурсов (звездочка ставилась, чтобы отличать перфокарты с программой контроля от перфокарт с данными). Затем операционная система считывала перфокарту *FORTRAN, которая представляла собой команду для загрузки компилятора FORTRAN с магнитной ленты. После этого компилятор считывал и компилировал программу, написанную на языке FORTRAN. Как только компилятор заканчивал работу, операционная система считывала перфокарту *DATA — команду по выполнению транслированной программы с использованием перфокарт данных.

Операционная система была придумана для того, чтобы автоматизировать работу оператора (отсюда и название), но это не единственное ее назначение. Создание операционной системы было первым шагом в развитии новой виртуальной машины. Перфокарту *FORTRAN можно рассматривать как виртуальную команду к компилятору, а перфокарту *DATA — как виртуальную команду для выполнения программы. И хотя этот уровень состоял всего из двух команд, он был первым этапом в развитии виртуальных машин.

В последующие годы операционные системы все больше и больше усложнялись. К уровню архитектуры команд добавлялись новые команды, приспособления и особенности, и в итоге сформировался новый уровень. Некоторые команды нового уровня были идентичны командам предыдущего, но другие (в частности команды ввода-вывода) полностью отличались. Эти новые команды тогда назывались макросами операционной системы или вызовами супервизора. Сейчас обычно используется термин «системный вызов».

Первые операционные системы считывали пачки перфокарт и распечатывали результат на принтере. Такая организация вычислений называлась пакетным

28 Глава 1. Предисловие

режимом. Чтобы получить результат, обычно нужно было ждать несколько часов. При таких условиях было трудно развивать программное обеспечение.

В начале 60-х годов исследователи Массачусетского технологического института (МТИ) разработали операционную систему, которая давала возможность работать с компьютером сразу нескольким программистам. В этой системе к центральному компьютеру через телефонные линии подсоединялись отдаленные терминалы. Таким образом, центральный процессор разделялся между большим количеством пользователей. Программист мог напечатать свою программу и получить результаты почти сразу прямо в офисе, гараже или где бы то ни было еще (там, где находился терминал). Эти системы назывались (и сейчас называются) системами с

разделением времени.

Хотя нас интересуют только те части операционной системы, которые интерпретируют команды третьего уровня, необходимо понимать, что это не единственная функция операционных систем.

Перемещение функциональности системы на уровень микрокода

С 1970 года, когда микропрограммирование стало обычным, у производителей появилась возможность вводить новые машинные команды путем расширения микропрограммы, то есть с помощью программирования. Это открытие привело к виртуальному взрыву в производстве программ машинных команд, поскольку производители начали конкурировать друг с другом, стараясь выпустить лучшие программы. Эти команды не представляли особой ценности, поскольку те же задачи можно было легко решить, используя уже существующие программы, но обычно они работали немного быстрее. Например, во многих компьютерах использовалась команда INC (INCrement), которая прибавляла к числу единицу. Тогда уже существовала общая команда сложения ADD, и не было необходимости вводить новую команду, прибавляющую к числу единицу. Тем не менее команда INC работала немного быстрее, чем команда ADD, поэтому ее также включили в набор команд.

Многие программы были добавлены в микропрограмму по той же причине. Среди них можно назвать:

1.Команды для умножения и деления целых чисел.

2.Команды для арифметических действий над числами с плавающей точкой.

3.Команды для вызова и прекращения действия процедур.

4.Команды для ускорения циклов.

5.Команды для работы со строкой символов.

Как только производители поняли, что добавлять новые команды очень легко, они начали думать, какие дополнительные технические характеристики можно добавить к микропрограмме. Приведем несколько примеров:

1.Ускорение работы с массивами (индексная и косвенная адресация).

2.Перемещение программы из одного раздела памяти в другой после запуска программы (настройка).

Развитие компьютерной архитектуры

29

3.Системы прерывания, которые дают сигнал процессору, как только закончена операция ввода или вывода

4.Способность приостановить одну программу и начать другую, используя небольшое число команд (переключение процесса).

В дальнейшем дополнительные команды и технические характеристики вводились также для ускорения работы компьютеров.

Устранение микропрограммирования

В 60-х-70-х годах количество микропрограмм сильно увеличилось. Однако они работали все медленнее и медленнее, поскольку требовали большого объема памяти. В конце концов исследователи осознали, что с устранением микропрограммы резко сократится количество команд и компьютеры станут работать быстрее. Таким образом, компьютеры вернулись к тому состоянию, в котором они находились до изобретения микропрограммирования.

Мы рассмотрели развитие компьютеров, чтобы показать, что граница между аппаратным и программным обеспечением постоянно перемещается. Сегодняшнее программное обеспечение может быть завтрашним аппаратным обеспечением и наоборот. Так же обстоит дело и с уровнями — между ними нет четких границ. Для программиста не важно, как на самом деле выполняется команда (за исключением, может быть, скорости выполнения). Программист, работающий на уровне архитектуры системы, может использовать команду умножения, как будто это команда аппаратного обеспечения, и даже не задумываться об этом. То, что для одного человека — программное обеспечение, для другого — аппаратное. Мы еще вернемся к этим вопросам ниже.

Развитие компьютерной архитектуры

В период развития компьютерных технологий были разработаны сотни разных компьютеров. Многие из них давно забыты, но некоторые сильно повлияли на современные идеи. В этом разделе мы дадим краткий обзор некоторых ключевых исторических моментов, чтобы лучше понять, каким образом разработчики дошли до создания современных компьютеров. Мы рассмотрим только основные моменты развития, оставив многие подробности за скобками.

Компьютеры, которые мы будем рассматривать, представлены в табл. 1.1.

Нулевое поколение — механические компьютеры (1642-1945)

Первым человеком, создавшим счетную машину, был французский ученый Блез Паскаль (1623-1662), в честь которого назван один из языков программирования. Паскаль сконструировал эту машину в 1642 году, когда ему было всего 19 лет, для своего отца, сборщика налогов. Она была механическая: с шестеренками и ручным приводом. Счетная машина Паскаля могла выполнять только операции сложения и вычитания.

30 Глава 1. Предисловие

Тридцать лет спустя великий немецкий математик Готфрид Вильгельм Лейбниц (1646-1716) построил другую механическую машину, которая кроме сложения и вычитания могла выполнять операции умножения и деления. В сущности, Лейбниц три века назад создал подобие карманного калькулятора с четырьмя функциями.

Еще через 150 лет профессор математики Кембриджского университета Чарльз Бэббидж (1792-1871), изобретатель спидометра, разработал и сконструировал разностную машину. Эта механическая машина, которая, как и машина Паскаля, могла только складывать и вычитать, подсчитывала таблицы чисел для морской навигации. В машину был заложен только один алгоритм — метод конечных разностей с использованием полиномов. У этой машины был довольно интересный способ вывода информации: результаты выдавливались стальным штампом на медной дощечке, что предвосхитило более поздние средства ввода-вывода — перфокарты и компакт-диски.

Хотя это устройство работало довольно неплохо, Бэббиджу вскоре наскучила машина, выполнявшая только один алгоритм. Он потратил очень много времени, большую часть своего семейного состояния и еще 17000 фунтов, выделенных правительством, на разработку аналитической машины. У аналитической машины было 4 компонента: запоминающее устройство (память), вычислительное устройство, устройство ввода (для считывания перфокарт), устройство вывода (перфоратор и печатающее устройство). Память состояла из 1000 слов по 50 десятичных разрядов, каждое из которых содержало переменные и результаты. Вычислительное устройство принимало операнды из памяти, затем выполняло операции сложения, вычитания, умножения или деления и возвращало полученный результат обратно в память. Как и разностная машина, это устройство было механическим.

Преимущество аналитической машины заключалось в том, что она могла выполнять разные задачи. Она считывала команды с перфокарт и выполняла их. Некоторые команды приказывали машине взять 2 числа из памяти, перенести их

ввычислительное устройство, произвести над ними операцию (например, сложить)

иотправить результат обратно в запоминающее устройство. Другие команды проверяли число, а иногда совершали операцию перехода в зависимости от того, положительное оно или отрицательное. Если в считывающее устройство вводились перфокарты с другой программой, то машина выполняла другой набор операций. А разностная машина могла осуществлять только один алгоритм.

Поскольку эта аналитическая машина программировалась на ассемблере, ей было необходимо программное обеспечение. Чтобы создать это программное обеспечение, Бэббидж нанял молодую женщину — Аду Августу ЛовлеЙс, дочь знаменитого британского поэта Байрона. Ада Ловлейс была первым в мире программистом. В ее честь назван современный язык программирования Ada.

К несчастью, Бэббидж никогда не отлаживал компьютер. Ему нужны были тысячи и тысячи шестеренок, сделанных с такой точностью, которая была невозможна в XIX веке. Но идеи Бэббиджа опередили его эпоху, и даже сегодня большинство современных компьютеров по строению сходны с аналитической машиной. Поэтому справедливо будет сказать, что Бэббидж был дедушкой современного цифрового компьютера.

 

 

 

Развитие компьютерной архитектуры

31

Таблица 1.1. Основные этапы развития компьютеров

 

Год

Название

Создатель

Примечания

 

выпуска

компьютера

 

 

 

1834

Аналитическая

Бэббидж

Первая попытка построить цифровой компьютер

 

машина

 

 

 

1936

Z1

Зус

Первая релейная вычислительная машина

 

1943

COLOSSUS

Британское

Первый электронный компьютер

 

 

 

правительство

 

 

1944

Mark!

Айкен

Первый американский многоцелевой компьютер

1946

ENIAC I

Экерт/

Отсюда начинается история современных

 

 

 

Моушли

компьютеров

 

1949

EDSAC

Уилкс

Первый компьютер с программами, хранящимися

 

 

 

в памяти

 

1951

Whirlwind I

МТИ

Первый компьютер реального времени

 

1952

IAS

Фон Нейман

Этот проект используется в большинстве

 

 

 

 

современных компьютеров

 

1960

PDP-1

DEC

Первый мини-компьютер (продано 50 экземпляров)

1961

1401

IBM

Очень популярный маленький компьютер

 

1962

7094

IBM

Очень популярная небольшая вычислительная

 

 

 

 

машина

 

1963

B5000

Burroughs

Первая машина, разработанная для языка

 

 

 

 

высокого уровня

 

1964

360

IBM

Первое семейство компьютеров

 

1964

6600

CDC

Первый суперкомпьютер для научных расчетов

 

1965

PDP-8

DEC

Первый мини-компьютер массового потребления

 

 

 

(продано 50 000 экземпляров)

 

1970

PDP-11

DEC

Эти мини-компьютеры доминировали

 

 

 

 

на компьютерном рынке в 70-е годы.

 

1974

8080

Intel

Первый универсальный 8-битный компьютер

 

 

 

 

на микросхеме

 

1974

CRAY-1

Cray

Первый векторный супер-компьютер

 

1978

VAX

DEC

Первый 32-битный суперминикомпьютер

 

1981

IBM PC

IBM

Началась эра современных персональных

 

 

 

 

компьютеров

 

1985

MIPS

MIPS

Первый компьютер RISC

 

1987

SPARC

Sun

Первая рабочая станция RISC на основе

 

 

 

 

процессора SPARC

 

1990

RS6000

IBM

Первый суперскалярный компьютер

 

В конце 30-х годов XX века немец Конрад Зус сконструировал несколько автоматических счетных машин с использованием электромагнитных реле. Ему не удалось получить денежные средства от правительства на свои разработки, потому что началась война. Зус ничего не знал о работе Бэббиджа, и его машины были уничтожены во время бомбежки Берлина в 1944 году, поэтому его работа никак не повлияла на будущее развитие компьютерной техники. Однако он был одним из пионеров в этой области.

32 Глава 1. Предисловие

Немного позже счетные машины были сконструированы в Америке. Машина Атанасова была чрезвычайно развитой для того времени. В ней использовалась бинарная арифметика и информационные емкости, которые периодически обновлялись, чтобы избежать уничтожения данных. Современная динамическая память (ОЗУ) работает точно по такому же принципу. К несчастью, эта машина так и не стала действующей. В каком-то смысле Атанасов был похож на Бэббиджа: мечтатель, которого не устраивали технологии своего времени.

Компьютер Стибитса действительно работал, хотя и был примитивнее, чем машина Атанасова. Стибитс продемонстрировал работу своей машины на конференции в Дартмутском колледже в 1940 году. На этой конференции присутствовал Джон Моушли, ничем не знаменитый профессор физики из университета Пенсильвании. Позднее он стал очень известным в области компьютерных разработок.

Пока Зус, Стибитс и Атанасов разрабатывали автоматические счетные машины, молодой Говард Айкен с трудом проектировал ручные счетные машины как часть своего философского исследования в Гарварде. После окончания исследования Айкен осознал важность автоматических вычислений. Он пошел в библиотеку, узнал о работе Бэббиджа и решил создать из реле такой же компьютер, который Бэббиджу не удалось создать из зубчатых колес.

Работа над первым компьютером Айкена «Mark I» была закончена в 1944 году. Компьютер содержал 72 слова по 23 десятичных разряда каждое и мог выполнить любую команду за 6 секунд. На устройствах ввода-вывода использовалась перфолента. К тому времени, как Айкен закончил работу над компьютером «Mark II», релейные компьютеры уже устарели. Началась эра электроники.

Первое поколение — электронные лампы (1945-1955)

Стимулом к созданию электронного компьютера стала Вторая мировая война. В начале войны германские подводные лодки разрушали британские корабли. Германские адмиралы посылали на подводные лодки по радио команды, а англичане могли перехватывать эти команды. Проблема заключалась в том, что эти радиопослания были закодированы с помощью прибора под названием ENIGMA, предшественник которого был спроектирован изобретателем-дилетантом и бывшим президентом США Томасом Джефферсоном.

Вначале войны англичанам удалось приобрести ENIGMA у поляков, которые,

всвою очередь, украли его у немцев. Однако чтобы расшифровать закодированное послание, требовалось огромное количество вычислений, и их нужно было произвести сразу после того, как радиопослание было перехвачено. Поэтому британское правительство основало секретную лабораторию для создания электронного компьютера под названием COLOSSUS. В создании этой машины принимал участиезнаменитый британский математик Алан Тьюринг. COLOSSUS работал уже

в1943 году, но так как британское правительство полностью контролировало этот проект и рассматривало его как военную тайну на протяжении 30 лет, COLOSSUS не мог служить основой дальнейшего развития компьютеров. Мы упомянули его только потому, что это был первый в мире электронный цифровой компьютер.