пятница, 25 апреля 2014 г.

Как построить компьютер

первые ЭВМ

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

Счетные устройства имеются у человечества с незапамятных времен. Одно из самых сложных античных устройств такого рода — так называемый Антикитерский механизм (Antikythera Mechanism, по названию острова Антикитера между Грецией и Критом), найденный в 1900 году среди обломков кораблекрушения, случившегося в I веке до н. э. Это устройство буквально нашпиговано зубчатыми колесами и шестеренками. Одни полагают, что его использовали для предсказания положения солнца, луны и планет, другие — что на самом деле это древнейший компьютер. Впрочем, когда мы сегодня говорим о компьютерах, то имеем в виду тот их многоцелевой тип, что был разработан в течение XX века. Такие машины умеют производить логические операции над строками цифр, следуя набору инструкций, который называется программой.


Пожалуй, самый ранний предок компьютера — механическая машина для сложения, изобретенная в 1642 году французским математиком Блезом Паскалем, так называемая «Суммирующая машина Паскаля». Это устройство имело несколько внутренних осей, которые вращали круги с цифрами и тем самым осуществляли сложение. Поколение спустя немецкий математик Готфрид Лейбниц создал более сложную машину— «Калькулятор Лейбница» (англ. Stepped Reckoner — «ступенчатый счетчик»), который умел не только складывать и вычитать числа длиной до 16 десятичных знаков, но даже умножать и делить числа длиной до 8 десятичных знаков.

Эти устройства стали предками механических калькуляторов, которые использовались повсеместно еще в середине XX столетия. Правда, умели эти калькуляторы очень немногое. Идея сделать эти устройства более многофункциональными («программируемыми») возникла, как ни странно, в индустрии, прямо с арифметикой не связанной.

В конце XVIII века во Франции жил ткач и изобретатель-любитель по имени Жозеф Мари Жаккар (Joseph Marie Jacquard). В 1801 году на индустриальной выставке в Париже он представил новую модель ткацкого станка, умеющего автоматически ткать нужный узор, «прочитывая» инструкции с набора карточек, в которых были сделаны дырки. Изобретение Жаккара произвело настоящую революцию в ткацком деле — не прошло и десяти лет, как не менее 11 тыс. таких станков работали во всех уголках Франции. А еще куда важнее был успех самой идеи — создание машины, конфигурацию которой можно менять в зависимости от того, какие действия она должна исполнять.

ТКАНЫЕ ЧУДЕСА

В 1822 году в Королевском астрономическом обществе в Англии состоялась лекция математика и эрудита Чарлза Бэббиджа (Charles Babbage). В ней он рассказал об устройстве изобретенной им «Разностной машины», которая умела осуществлять сложные вычисления и делала это куда быстрее и точнее, чем человек. Бэббидж предлагал использовать ее для создания таблиц положений планет, каковые были крайне необходимы в то время морским штурманам. Предложение Бэббиджа вызвало интерес правительства, и в следующем году началось строительство машины. Однако проект оказался сложнее, чем ожидалось. В 1830-е годы он застопорился. А в 1842-м году правительство окончательно прекратило финансирование проекта, но Бэббидж уже давно работал над другим, куда более амбициозным — «Аналитической машиной» (Anafytical Engine). Она замела производить целый ряд операций, не связанных с простой арифметикой, например исполнять определенное действие из нескольких в зависимости от того, выполнено ли условие. Она также умела обрабатывать данные, представленные в виде одного набора перфокарт, по командам, выданным ей в виде другого набора перфокарт, и выдавать результат на рисовальную машину. Она имела модульную внутреннюю архитектуру, где имелись модули, осуществлявшие вычисления, и модули памяти, хранящие данные, откуда их можно было извлечь. Типовой алгоритм, который мог бы быть выполнен на такой машине, для Бэббиджа создала Ада Кинг, графиня Лавлейс, дочь Байрона. Она сама была талантливым математиком и считается первым в истории программистом.

Бэббидж умер в 1871 году и к этому моменту успел создать лишь несколько частей своей машины. Сын Бэббиджа Генри не сумел найти денег для продолжения проекта. Идеям Бэббиджа угрожало забвение.

Однако в 1889 году идея использовать перфокарты для хранения данных пришла в голову американскому изобретателю и статистику Герману Холлериту (Herman Hollerith). Такие карты можно было подавать на высокой скорости внутрь электромеханического «табулятора», который реагировал на изменения электрического поля, когда через дырки в перфокартах проходил ток. Изобретение Холлерита произвело революцию в хранении и обработке данных. Уже в 1890 году машины Холлерита обрабатывали данные переписи населения США, опережая график на несколько месяцев. Основанная Холлеритом компания впоследствии стала центральной частью IBM, гиганта компьютерной индустрии.

В основе табуляторов Холлерита лежала идея системы с двумя состояниями — «включено» и «выключено», чему соответствуют числа 1 и 0. Впервые двоичные системы счисления исследовал еще Лейбниц в XVII веке и заключил, что их использование упрощает ряд вычислений.

ДВОИЧНАЯ ЭРА

В 1854 году английский математик Джордж Буль (George Boole) придумал систему логики, ныне известной под названием булевой алгебры. В ней входные и выходные данные логических операций могли иметь только два значения — истина или ложь (1 и 0). Отсюда следовало, что двоичные системы реле (электрических переключателей, управляемых током) можно использовать для осуществления булевых операций. Считается, что первым это понял американский математик и инженер Клод Шеннон (Claude Shannon). Работа Шеннона на эту тему, опубликованная в 1937 году, оказала большое влияние на развитие индустрии вычислений.

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

В том же 1937 году исследователь Джордж Штибиц (George Stibitz) из компании Bell Telephone Laboratories собрал у себя дома систему из Jfb реле и электроламп, которая умела осуществлять простые логические операции. На следующий год начальство Bell Labs предложило ему разработать на основе этой системы настоящую электромеханическую счетную машину. В результате в январе 1940 года на свет появился «Калькулятор для комплексных чисел» (Complex Number Calculator). Эта машина работала вплоть до 1949 года, однако не являлась настоящим компьютером, так как ее нельзя было программировать.

А на другой стороне Атлантики над аналогичной машиной работал инженер и энтузиаст-кибернетик Конрад Цузе (Konrad Zuse). В 1938 году он создал двоичную машину, которую назвал Z1. Бюджет был минимальный, располагалась машина в гостиной родителей изобретателя и была целиком механической. Но она умела выполнять простые программы. В последующие годы Цузе получил финансирование от немецкой армии, благодаря чему в 1940 году построил машину Z2, а в 1941-м — Z3. Модель Z3 использовала электромеханические реле и была куда надежнее предыдущих.

БРИТАНИЯ НЕ ОТСТАЕТ

Тем временем в Британии нашлись несколько ясных умов, которые поняли: работающая вычислительная машина может оказать решающее влияние на ход войны. Еще в 1939 году британские и польские специалисты совместными усилиями раскрыли секрет работы немецких шифровальных машин «Энигма» (Enigma), шифры которых были очень сложны. После падения Польши британцы умножили усилия, сосредоточив команду специалистов в местечке Блетчли-Парк (Bletchley Park) в графстве Бэкингем. Там работали самые выдающиеся ученые Англии, среди них и кембриджский математик Алан Тьюринг (Alan Turing).

Группа в Блетчли-Парке использовала для дешифровки немецких шифров все доступные средства, от логики и интуиции до мощи вычислительных машин. Шифры машины Enigma и иные немецкие шифры в теории не поддавались дешифровке, однако процедуры шифрования сообщений, использовавшиеся немцами на практике, лишали шифр этого теоретического преимущества — ив результате число вариантов, которые нужно было перебрать для расшифровки сообщения, оказывалось приемлемым. Одним из первых проектов Тьюринга в Блетчли-Парке стала так называемая «Бомба», электромеханическая вычислительная машина, автоматически перебиравшая варианты расшифровок на большой скорости.

Однако возможностей «Бомбы» хватало лишь на расшифровку обычных сообщений системы Enigma. Самые же секретные сообщения немецкого командования шифровались более сложной шифровальной машиной «Лоренц». На расшифровку одного сообщения, зашифрованного этой машиной, у «Бомбы» ушли бы несколько недель. Решением стала машина «Колосс» (Colossus). Она анализировала зашифрованные сообщения, которые вводились в нее через перфокарты, и проверяла различные варианты дешифровок на верность, используя встроенную электронную модель исходной шифровальной машины.

В США в это время над созданием компьютеров работали сразу несколько групп. Параллельные разработки нескольких команд завершились в 1943 году созданием общей машины, «Электронного числового интегратора и вычислителя», по-английски ENIAC (Electronic Numerical Integrator and Calculator). Весил ENIAC 30 т и представлял собой полностью электронную машину. 18 тыс. его электронных ламп умели осуществлять 5 тыс. операций в секунду, в тысячу раз быстрее любой другой машины в то время.

Кроме того, ENIAC был многоцелевым компьютером, его можно было конфигурировать под широкий круг задач. Сначала это предполагало физическое изменение контактов между элементами, но затем по предложению американского ученого венгерского происхождения Джона фон Неймана (John von Neumann) разработчики внедрили систему так называемых хранимых программ, когда инструкции по конфигурации машины хранились в виде так называемой функциональной таблицы. Эта система заработала в сентябре 1948 года, то есть на целый год раньше, чем был запущен наследник ENIAC — EDVAC, изначально разрабатывавшийся с системой хранения программ.

Хранимые программы стали большим шагом вперед, и в 1952 году программист Грейс Хоппер (Grace Hopper) написала первый в мире компилятор — программу, умеющую превращать команды, написанные на «языке программирования», в двоичный код, который способна понимать и реализовывать машина. Это сильно облегчило задачу программирования, а еще стало стало возможным создавать программы, которые без изменений могли исполняться на вычислительных машинах различных конструкций.

В 1950-х годах компьютеры стали применяться на практике, в частности с коммерческими целями. На смену массивным, горячим и ненадежным лампам пришли электронные транзисторы, и первый компьютер на них заработал в Манчестерском университете в 1953 году. До наших времен, эры смартфонов и планшетов, нужно было пройти еще долгий путь, и для этого требовался последний решающий прорыв. Им стало создание в конце 1950-х годов Джеком Килби (Jack Kilby) первой интегральной микросхемы. В этот момент вычислительная техника окончательно вышла на основной путь своего развития — наращивания вычислительной мощности и радикальной миниатюризации.