История вычислительной техники за рубежом

“ПРОДОЛЖЕНИЕ СЛЕДУЕТ…”

— У нас, — сказала Алиса, с трудом переведя дух, — когда долго бежишь со всех ног, непременно попадешь в другое место.

— Какая медлительная страна! — сказала Королева. — Ну а здесь, знаешь ли, приходиться бежать со всех ног, только чтобы остаться на том же месте! Если же хочешь попасть в другое место, тогда нужно бежать по меньшей мере вдвое быстрее!

Л. Кэррол. Алиса в Стране Чудес

Джон фон Нейман и Герман Голдстайн покинули Муровскую группу с твердым намерением создать в принстонском Институте перспективных исследований (IAS) универсальную быстродействующую вычислительную машину для научных исследований. Они, однако, столкнулись со скептическим отношением к этому замыслу со стороны совета директоров института и коллег. Большинство из них считало использование ЭВМ уделом математиков-прикладников, к которым научная элита относилась, мягко говоря, сдержанно. Появление в “храме чистой науки” инженеров, техников и рабочих, приобретение оборудования, необходимого для разработки машины, высоким теоретикам представлялось отступлением от принципов, положенных в основу деятельности IAS. Кроме того, институт не имел средств на создание и эксплуатацию “фон-неймановской прихоти” (как многим казалось). Но великому ученому удалось преодолеть неожиданно возникшие трудности. Заручившись поддержкой некоторых авторитетных коллег, фон Нейман убедил совет директоров принять его предложение при условии, что он найдет средства для финансирования “Проекта электронной вычислительной машины” (Electronic Computer Project, ECP). Огромный авторитет, которым ученый пользовался у военных, сделал эту задачу сравнительно несложной, и весной 1946 г. институтом и Артиллерийским управлением МО США был подписан соответствующий контракт. В финансировании ECP принимали участие государственные оборонные организации — Комиссия по атомной энергии (Atomic Energy Commission, AEC), Управление военно-морских исследований (Office of Naval Research, ONR) и некоторые другие. Фон Нейман договорился также о творческом сотрудничестве с Иллинойским университетом и Radio Corporation of America (RCA), одна из лабораторий которой находилась в Принстоне.

Ян Александр Райхман — “мистер Память”

Там работал Ян Александр Райхман (Jan Alexander Rajchman, 1911—1989), позднее не без основания прозванный в журналистских кругах “мистером Память”.

В предвоенное время Райхман создал одно из первых постоянных запоминающих устройств (ПЗУ) на резистивных матрицах, а с 1946 г. начал разрабатывать оперативную память на основе специальной “многоячеечной” вакуумной трубки, которую назвали Selectron (Selective Electrostatic Storage Tube). Она-то и привлекла внимание фон Неймана, поскольку в случае удачного завершения разработки конструкторы получали запоминающее устройство совершенно нового вида — с так называемой произвольной выборкой хранимой информации. Это, в свою очередь, позволяло строить вычислительные машины с гораздо более высоким быстродействием (по сравнению с ЭВМ, использовавшими РУЛЗ). Идея Райхмана состояла в том, чтобы с внутренней стороны трубки, перед экраном, поместить две решетки из симметрично расположенных под прямым углом друг к другу узких металлических полосок (bars), образующих ряд “окон”. Окно, к которому прилагалось напряжение, “открывалось” для прохождения электронного луча к покрытому фосфором экрану, где записывалась или откуда считывалась информация.

Фон Нейман уверовал в безусловный успех трубки Райхмана и решил построить вокруг нее будущую машину1. Описанию ее архитектуры и выбору основных технических характеристик Артур У. Бёркс, Герман Г. Голдстайн и Джон фон Нейман посвятили большую статью “Предварительное обсуждение логического конструирования электронного вычислительного устройства” (Preliminary discussion of the logical design of the electronic computing instrument), изданную IAS в конце июня 1946 г. Она представляла собой первую часть отчета о теоретических исследованиях, предусмотренных контрактом с Артиллерийским управлением (во второй части отчета, написанного Голдстайном и фон Нейманом и изданного в 1947 г., рассматриваются вопросы программирования). “Предварительное обсуждение…”, изначально предназначенное для публикации, распространялось совершенно свободно и послужило бесценным пособием для компьютерщиков многих стран, а описанная в нем архитектура машины получила название принстонской. По существу это была все та же “фон-неймановская архитектура”, описанная в “Первом варианте…” (см. статью Ю. Полунова "Автора!!!"), но только применительно к новому типу “внутренней” (оперативной) памяти. В упомянутой работе фон Неймана со товарищи, помимо обоснования некоторых технических характеристик планируемого “электронного вычислительного устройства”, были развиты некоторые важные теоретические вопросы, о которых в “Первом варианте…” уже говорилось, но, может быть, недостаточно подробно (или вообще не говорилось). Уделим внимание некоторым из них.

Хранение программ во внутренней памяти. В “Первом варианте…”, описывая структуру машины, фон Нейман дает определение ее основных блоков в следующем порядке: арифметическое устройство (АУ) — устройство управления (УУ) — ОЗУ — внешнее ЗУ — устройство ввода-вывода. Весьма симптоматично, что в “Предварительном обсуждении…” этот порядок изменен и рассмотрение начинается с описания органа памяти2: “Очевидно, что машина должна быть способна некоторым образом запоминать не только цифровую информацию, необходимую для данного вычисления, такую, как граничные значения, функциональные таблицы и промежуточные результаты… но и команды, управляющие фактическим порядком (actual routine), в котором должны выполняться вычисления над цифровыми данными. Концептуально мы можем говорить о двух видах памяти: памяти чисел и памяти приказов (orders). Если, однако, приказы к машине свести к числовому коду и если она получит возможность отличить числа от приказов, то орган памяти можно использовать для хранения как чисел, так и приказов”. И — повторюсь — при этом появляется возможность модификации программы (точнее — ее адресной части3) и даже генерирования новой, а это свойство в дальнейшем позволило реализовывать такие программные средства, как ассемблеры, компиляторы, операционные системы.

Ветвление программ. Хотя в командный набор ЭДВАКа “по фон Нейману” входили не поименованные автором команды безусловной и условной передачи управления, в “Первом варианте…” проблеме ветвления программ уделено незначительное внимание — о ней сказано, по существу, мимоходом. Напротив, в “Предварительном обсуждении…” ей посвящен целый раздел, а команды получили названия, сохранившиеся до нашего времени (соответственно unconditional transfer order и conditional transfer order). При этом подчеркивалось, что за исключением этих команд машина должна иметь последовательное (естественное) управление.

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

Селектрон способен запомнить до 4096 разрядов

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

Тип машины. Внутренняя (оперативная) память машины, как уже говорилось, должна была строиться на трубках Райхмана, каждая из которых предназначалась для хранения одного и того же разряда всех машинных слов (первое использование термина в англоязычной компьютерной литературе). Если трубки соединить параллельно и использовать соответствующую систему записи и считывания информации, то можно записать или извлечь из памяти все разряды слова одновременно5. Это позволяет создать параллельную машину (parallel machine), или, пользуясь современной терминологией, компьютер с АУ параллельного действия (с разрядно-параллельной арифметикой), выполняющего операции над всеми разрядами одновременно (в отличие от ЭДВАКа, где применение РУЛЗ диктовало поразрядную обработку). Отмечу, что в наше время термин “параллельная машина” трактуется иначе, чем в “Предварительном рассмотрении…”.

Иерархия памяти. Авторы выстроили эту иерархию следующим образом: внутренняя память (internal memory), вторичная память (secondary memory), интегрированная в машину (т. е. считывание и запись осуществляются по команде с УУ), и автономная, “мертвая память” (dead memory), которая является своеобразным продолжением предыдущей, но в машину не интегрируется (ее содержимым могут быть, например, библиотеки программ).

Последний раздел “Предварительного обсуждения…” посвящен способам контроля работы ЭВМ, построению и описанию работы УУ и связей между отдельными органами, а также обоснованию одноадресного формата команд6. В машинном слове предполагалось разместить две такие команды: сначала машина должна была выполнить “левую” команду, затем автоматически перейти к выполнению “правой”, что сокращало число обращений к оперативной памяти. Адрес второго операнда не задавался, так как он, как правило, уже находится в регистре-аккумуляторе.

В этом же разделе рассматривался цикл работы машины, о котором известный программист Алан Перлис (Alan Perils, 1922—1990) впоследствии говорил: “Иногда я думаю, что единственным универсальным понятием в компьютерной области является цикл “извлечь — выполнить” (fetch-execute cycle)”.

Для организации цикла в аппаратное обеспечение машины помимо регистра-аккумулятора были включены:
буферный регистр памяти (Memory Buffer Register, MBR) — содержал слово, которое должно быть записано в память или извлечено из нее;
регистр адреса (Memory Address Register, MAR) — определял адрес, по которому слово записывалось в память или извлекалось из нее и помещалось в MBR;
командный регистр (Instruction Register, IR) — содержал код операции, подлежащей выполнению;
буферный регистр команды (Instruction Buffer Register, IBR) — кратковременно хранил “правую” команду;
программный счетчик (Program Counter, PC) — содержал адрес следующей команды.

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

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

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

Дело в том, что компьютерщики всегда стремились добиться как можно большей производительности машин, а для этого было необходимо (при прочих равных условиях), чтобы АУ не простаивало. Но обмен данными между АУ и ОЗУ шел пословно, и подобный “простой” был вынужденным, изначально присущим фон-неймановской архитектуре (иначе говоря, канал связи между упомянутыми устройствами имел невысокую пропускную способность, неизмеримо меньшую, чем быстродействие АУ). В 1977 г. в лекции, которую Бэкус прочёл по поводу награждения его премией имени Алана Тьюринга, говорилось: “Что такое компьютер по фон Нейману? Когда 30 лет назад Джон фон Нейман и другие предложили свою оригинальную архитектуру, идея показалась элегантной, практичной и позволяющей упростить решение целого ряда инженерных и программистских задач. И хотя за прошедшее время условия, существовавшие на момент ее публикации, радикально изменились, мы отождествляем наши представления о компьютерах с этой старой концепций. В простейшем изложении фон-неймановский компьютер состоит из трех частей: это центральный процессор (СPU)7, память и соединяющий их канал, который служит для обмена данными между CPU и памятью, причем маленькими порциями (лишь по одному слову). Я предлагаю назвать этот канал “бутылочным горлом фон Неймана” (von Neumann bottleneck). Наверняка должно быть менее примитивное решение, чем перекачивание огромного количества данных через “бутылочное горло”. Такой канал не только создает проблему для трафика, но еще и является “интеллектуальным бутылочным горлом”, которое навязывает программистам “пословное” мышление, не позволяя рассуждать в более высоких концептуальных категориях”.

Но, как проницательно заметил Л. Черняк, которому принадлежит цитированный выше перевод отрывка из лекции Бэкуса, последний “…разработал “самый фон-неймановский язык” изо всех языков высокого уровня… и основной пафос его критики был обращен прежде всего к несовершенным методам программирования... С момента произнесения Бэкусом его речи в программировании произошли заметные сдвиги, появились функциональные и объектно-ориентированные технологии, и с их помощью удалось преодолеть (на мой взгляд, частично. — Ю. П.) то, что Бэкус назвал “интеллектуальным фон-неймановским бутылочным горлом”. Однако архитектурная первопричина данного явления, врожденная болезнь канала между памятью и процессором… не исчезла, несмотря на прогресс в области технологии за прошедшие с тех пор 30 лет. С годами эта проблема постоянно усугубляется, поскольку скорость работы памяти растет гораздо медленнее, чем производительность процессоров, и разрыв между ними становится все больше”. Добавлю, что появились и аппаратные методы улучшения исходной архитектуры (индексные регистры, ввод-вывод данных параллельно с вычислениями, виртуальная память, мультипроцессирование и т. д.), предложены новые компьютерные архитектуры, реализованные в основном в дорогостоящих машинах, но и в них в той или иной мере присутствует (можно возвышенно сказать — бессмертная) фон-неймановская, или принстонская архитектура.

Для преодоления этого недостатка предлагались и предлагаются архитектуры процессоров, которые называются параллельными. Фон-неймановская архитектура компьютера не является единственно возможной, и о других архитектурах мы еще поговорим в свое время.

Примечания

1. Продолжая работать в области ЗУ, Райхман впоследствии создал ЗУ на магнитных сердечниках (независимо от Д. Форрестера), на трасфлюксере (многодырочном магнитном элементе), а также голографическую и сверхпроводящую память.

2. Свидетельством внимания, которое фон Нейман уделял устройствам хранения информации, является тот факт, что им посвящены два из шести разделов “Предварительного обсуждения…”.

3. Напомню, что в то время еще не были предложены индексные регистры, косвенная адресация и пр.

4. В России — с плавающей запятой.

5. Предполагалось, что в машине будет использовано 40 трубок Райхмана, что позволило бы создать память емкостью в 4096 машинных слов по 40 двоичных разрядов в каждом.

6. Поскольку машинное слово должно было содержать 40 разрядов, фон Нейман обосновал целесообразность упаковки в одном слове двух 20-разрядных команд. Эта идея была использована затем в английской ЭВМ Manchester Mark I, американских UNIVAC I, IBM 701 и некоторых других машинах.

7. В современных машинах в центральном процессоре объединены АУ и УУ.

Из Цикла статей Ю. Полунова "Исторические машины".
Статья опубликована в PCWeek/RE № 23 2006 г.

Статья помещена в музей 15.07.2006 года