Архитектура фон неймана как историческая случайность
Ахиллесовой пятой современных вычислительных систем и компьютерной науки является архитектура фон Неймана. Каково же ее происхождение?
Современная жизнь столь прочно переплетена с компьютерами, что вряд ли у непосвященного может возникнуть сомнение в прочности «компьютерного здания», выстроенного за 60 лет. Между тем, нынешнее состояние компьютерной науки и компьютерных технологий можно сравнить с пирамидой, стоящей основанием вверх; небольшую опорную площадку образуют несколько базисных положений, возраст которых превышает пенсионный порог. Согласно законам механики, такая конструкция чрезвычайно неустойчива.
Одной из опор гигантского здания компьютерных технологий являются построения, связанные с именем Джона фон Неймана. Случилось так, что в середине 40-х годов он высказал несколько теоретических положений, не самых существенных в его научной биографии, но именно они обеспечили его имени широкую известность. Но не стоит забывать, что высказаны они были одним человеком, пусть и гениальным, и приняты были в условиях колоссальной неопределенности. В середине 40-х годов не было никакого предшествующего опыта, и, как следствие, в идеях фон Неймана присутствовал заметный элемент случайности и субъективности, что, однако, не помешало последователям со временем канонизировать его теоретические взгляды, придать им статус непогрешимых догм.
«Случайная» архитектура
Элемент случайности в любом историческом процессе неизбежен (только классики марксизма-ленинизма могли позволить себе утверждать обратное; мы знаем, к чему это привело). В реальной жизни случается, что однажды кто-то в силу каких-то обстоятельств оказался в нужном месте в нужное время, имел возможность или вынужден был сделать определенный выбор, а потомкам-исследователям не остается ничего другого, как анализировать его решения. Компьютерная история не исключение, она чрезвычайно субъективна. Как бы заинтересованные лица ни старались придать ей вид объективности, в какие бы научные одежды они ее ни обряжали, рано или поздно наступает момент истины, расставляя все по своим местам. Достаточно вспомнить историю искусственного интеллекта; кто в 60-е — 70-е годы мог противопоставить свое мнение тому, что говорили именитые ученые, какой ворох теорий они наворотили, и как же бесславно все это завершилось…
В середине 40-х годов имелось несколько возможных путей для создания электронных компьютеров. Нельзя сбрасывать со счетов гарвардскую архитектуру; она сложнее в реализации, чем фон-неймановская, но может обеспечить существенно более высокую производительность, поэтому она сохранилась во встраиваемых процессорах, где скорость обработки сигналов наиболее критична. Но судьба распорядилась так, что в широком масштабе была однозначно и безоговорочно принята архитектура фон Неймана. В ней постулировались три основных принципа.
Программное управление. Программа состоит из последовательности машинных команд, выбираемых из памяти с помощью счетчика команд. Счетчик — это обычный регистр, он либо автоматически увеличивается на единицу по завершении текущей команды, либо его состояние меняется принудительно при выполнении команд условного или безусловного переходов.
Однородность памяти. И программы, и данные хранятся в общей памяти; над кодами команд можно выполнять такие же действия, что и над кодами данных. Следовательно, программу можно модифицировать в процессе выполнения, например можно управлять выполнением циклов и подпрограмм; программа может быть результатом действия другой программы, на этом основаны методы компиляции.
Адресация. Память состоит из перенумерованных ячеек, и процессору в любой момент времени доступна любая ячейка.
У этих положений есть чрезвычайно важное следствие: аппаратура является неизменной частью вычислительной машины, а программы — переменной.
Современное и программное, и аппаратное обеспечение за самым малым исключением являются производными от этого выбора. Но фон-неймановская архитектура, как и все в этом мире, не вечна; незаметно для большинства происходит ее моральное старение. Критику этой архитектуры и неизбежный со временем отказ от нее не следует рассматривать как критику в адрес самого фон Неймана — скорее, справедливая критика может быть направлена в адрес тех, кто десятилетиями догматизировал его взгляды. Нет такого учебника, где бы безоглядно не объявляли архитектуру фон Неймана классической, вечной и неизменной, а потому у студентов может сложиться впечатление, что она столь же объективна, как и природные законы. Между тем, к ее появлению привела причудливая цепочка, казалось бы, никак не связанных между собой событий. Попробуем проследить их.
От машины Тьюринга к артиллерийским таблицам
Начнем со странного имени автора, состоящего из трех плохо сочетаемых частей. Как могло случиться, что он, обладатель обычной для определенной части выходцев из Восточной Европы фамилии Нейман, стал не только немецким «фоном», но и американским Джоном? Урожденный Янош Лайош Нейман происходил из состоятельной еврейско-венгерской семьи. В кругу, к которому она принадлежала, было престижно покупать дворянские звания и обзаводиться приставкой «фон». В этом отношении фон Нейман не одинок. Одновременно с ним в Америке работал физик Теодор фон Карман, можно привести еще несколько схожих примеров. Родители обеспечили Джонни, как его звали дома, возможность получить образование в лучших университетах Швейцарии и Германии; там он стал Йоханом и к тому же католиком. Старт научной карьеры был блестящим, к 23 годам фон Нейман — самый молодой в истории Берлинского университета приват-доцент, а к 25 — автор десятка научных работ. В 1930-м его пригласили в Принстонский университет, а потом неизбежная для многих его соотечественников эмиграция объединила его судьбу с такими выдающимися учеными-выходцами из Венгрии, как Лео Сцилард и Эдвард Теллер, с Энрико Ферми и другими. Впоследствии все они так или иначе оказались связанными с Манхэттенским проектом. Но деятельность фон Неймана, ставшего в Америке Джоном, не ограничивалась участием в работе над бомбой. Его интересы поистине необъятны, кроме квантовой физики его увлекает и теория автоматов, и теория игр, и алгебра. Впрочем, не стоит строить образ академического ученого, «не от мира сего». Несмотря на генеалогические корни, уходящие на территорию России, он был, как тогда говорили, «ярым антисоветчиком», призывавшим к атомной бомбардировке СССР. Сегодня это вызывает улыбку, а в начале 50-х подобные заявления были более чем опасными.
Несмотря на приглашение, карьера за океаном начиналась непросто. Америка тех лет сохраняла давние пережитки, этническое происхождение фон Неймана заметно мешало его работе в Принстоне. Поэтому вскоре после приезда, как только появилась такая возможность, в том же 1930 году он перешел в ставший знаменитым Институт перспективных исследований (Institute for Advanced Study, IAS), созданный в основном как прибежище для ученых-переселенцев. Позже он работал там вместе с Альбертом Эйнштейном, Куртом Геделем, Робертом Оппенгеймером и другими беженцами из Европы. Работа над бомбой потребовала произвести огромное количество расчетов, поэтому в поле внимания фон Неймана попали все существовавшие на тот момент счетные машины, он был знаком с работами и лично с Ванневаром Бушем, Джорджем Стиблицем и Говардом Айкеном. Однако возможности созданных ими механических устройств, являвших собой в конечном счете развитие машины Бэббиджа, его не удовлетворяли, но самое главное заключалось в том, что он имел основания предполагать существование иных, более производительных машин. Информацию о теоретической возможности альтернативного подхода к автоматизации расчетов он получил благодаря еще одной случайности. Фон Нейману сказочно повезло, без всяких на то усилий он получил шанс познакомиться и подружиться с самим Аланом Тьюрингом и его гипотетической машиной.
В 1937-38 годах Тьюринг жил в Америке и готовил под руководством Алонсо Черча, одного из самых видных американских математиков того времени, диссертацию в том же самом Принстоне, где начинал фон Нейман. Формальные отношения между двумя научными центрами были непростыми (с одной стороны — колыбель американского консерватизма, а с другой — прибежище для всякого рода космополитов), но это обстоятельство не мешало личному общению ученых. Фон Нейман ознакомился с идеями Тьюринга и, когда представилась возможность, смог перенести «в железо» основные элементы его машины, а именно последовательное выполнение команд и программирование в терминах команд. Если быть точным, то надо сказать, что архитектурой фон Неймана называют машину Тьюринга, адаптированную к реальным условиям*. Итак, основной вклад фон Неймана состоит в переводе абстрактной схемы Тьюринга в конкретное железо; если предельно упростить то, что сделал фон Нейман, можно сказать, что он перенес бесконечную ленту машины Тьюринга в память.
Странно, что при всей своей гениальной прозорливости фон Нейман остановился на сделанном. В области вычислительных машин он — автор одной работы. Выполнив ее, он не стремился к чему-то иному, более того, считал дальнейшее развитие ненужным. К примеру, он активно возражал против попыток как-то упростить или автоматизировать программирование. Он умер в феврале 1957 года, успев дожить до времени, когда уже были созданы языки Ассемблера и вот-вот должны были появиться Кобол и Фортран. Тогда проблема языков программирования активно обсуждалась, однако он считал это занятие бессмысленным, будучи уверенным в том, что ни к чему тратить дорогостоящее машинное время на работу с текстами программ.
Впрочем, материализация машины Тьюринга могла бы и не состояться, а компьютерная история могла пойти совершенно иным путем, не будь еще одной случайности, а именно — встречи фон Неймана с лейтенантом Германом Гольдштейном. Великий ученый и никому не известный лейтенант поздним вечером ждали прибытия поезда на железнодорожной платформе крошечного городка Абердин, известного лишь тем, что неподалеку находился артиллерийский полигон. Сейчас там артиллерийский музей Army Ordnance Museum, один из крупнейших военно-технических музеев мира с богатейшей коллекцией. Среди его экспонатов — старейший экземпляр нашего танка Т-34, выпущенный в 1941 году. Но там нет мемориала, посвященного встрече фон Неймана с Гольдштейном, хотя, может быть, именно она принесла человечеству больше блага, чем все оружие, представленное в этом музее.
Несколько слов о Гольдштейне. Этот отнюдь не типичный армейский офицер, профессор математики из Мичиганского университета, после призыва на воинскую службу получил чин лейтенанта и руководил расчетом артиллерийских таблиц в баллистической лаборатории при полигоне. Работу выполняли сотни женщин, использовавших механические арифмометры, в те времена именно женщин-расчетчиц и называли компьютерами. Объем необходимых вычислений был чудовищным: только для расчета одной траектории полета снаряда требовалось выполнить 750 операций, а для передачи военным орудие необходимо было снабдить как минимум расчетами 3 тыс. траекторий, общая трудоемкость такой процедуры превышала четыре человеко-года.
Военным требовались новые пушки, но без таблиц для стрельбы они были бесполезны. Препятствием оказалась низкая скорость расчетов. Гольдштейн, отвечавший за эту работу, активно искал пути решения проблемы ускорения счета, и однажды ему сильно повезло, снова случай. Один из коллег показал ему статью «Использование высокоскоростных электронных ламп для вычислительных устройств» (The Use of High Speed Vacuum Tube Devices for Calculating). Ее написал в 1942 году сотрудник Муровской школы Джон Мочли (сегодня Moore School of Electrical Engineering входит в состав университета штата Пенсильвания). Со временем статью Мочли стали рассматривать как один из самых важных основополагающих трудов; впрочем, ее оригинальность оспаривается. Некоторые считают, что идея ламповых регистров была заимствована у Джона Атанасова**. На практике Мочли и его напарник Джон Преспер Эккерт работали самостоятельно, намереваясь использовать проектируемую ими машину для метеорологических целей. Действовали они кулуарно, никто кроме Гольдштейна на статью не прореагировал, однако тот, оценив прочитанное, немедленно поехал в Муровскую школу и сделал все возможное, прежде всего обеспечив финансирование проекта, который поначалу назывался Project PX, а затем стал именоваться ENIAC (Electronic Numerical Integrator And Computer).
История построения ENIAC хорошо описана, но часто, говоря об этой машине, упускают из виду, что ее внедрение шло с колоссальным трудом. Монстр, состоявший из 18 тыс. ламп и весивший 30 тонн, нужно было программировать, однако ничего иного, кроме коммутационных панелей, для этой цели не было. И вот еще один случай (который по счету?). Программированием для ENIAC руководила бывшая учительница математики Адель Кац, сменившая фамилию на Гольдштейн, выйдя замуж за своего непосредственного руководителя. Адель Гольдштейн была первой программисткой в современном понимании, она же написала руководство по эксплуатации ENIAC и подготовила первую группу программисток из шести человек (тогда считалось, что программирование — занятие женское).
От своей жены Гольдштейн знал, как сложно программировать ENIAC, а потому программирование стало очередной проблемой, которая его глубоко волновала. И вот, когда он узнал в попутчике на платформе фон Неймана, чьи лекции о машине Тьюринга ему приходилось слышать, Гольдштейн решился обратиться к нему со своими проблемами. Это был выстрел в десятку, встретились проблема и человек, способный с ней справиться.
Чтобы быть точным, надо сказать, что отдельные попытки упрощения процесса программирования предпринимались и до обращения к фон Нейману. Был проект использования программ, записанных на перфоленту, есть сообщения и о том, что в качестве носителя предполагали использовать и какие-то иные устройства. Но надо честно признать, что до той степени обобщения, на которую оказался способен Джон фон Нейман, никто из создателей этих устройств дойти бы не смог.
Побывав несколько раз в Муровской школе и ознакомившись с положением дел, он сумел понять причины сложности программирования ENIAC и нащупал способы их преодоления. Фон Нейман осознал, что необходимо воспользоваться идеей машины Тьюринга, для чего уравнять в правах программы и данные и перенести гипотетическую тьюринговскую бесконечную ленту с записанными на ней командами в оперативную память компьютера. В таком случае программирование сводится к записи последовательности команд в память. Эта процедура заметно проще ручной коммутации сотен или тысяч проводов; кроме того, в текст программ можно вставлять команды управления, а значит, выполнять переходы и циклы. Созданием машины с хранимой в памяти программой было положено начало тому, что мы сегодня называем программированием. Свое открытие фон Нейман изложил в одном из самых неоднозначных во всей истории компьютерной науки документов, The First Draft of a Report on the EDVAC. Напомним, что проект Electronic Discrete Variable Automatic Computer был начат в 1944 году по инициативе Джона Мочли и Преспера Эккерта задолго до окончания работ над ENIAC, несовершенство которого видели и сами ученые, а потому искали пути его развития. Некоторые утверждают, что они самостоятельно подошли к решению проблем программирования, но каких-либо свидетельств их приоритета не существует. А на стороне фон Неймана — документ, сокращенную версию которого он написал от руки в поезде, а затем передал Гольдштейну. Тот довел документ до готовности и распространил. С моральной точки зрения этот шаг есть не что иное, как узурпация чужого труда: несмотря на гениальную догадку фон Неймана, фундамент для нее был построен Мочли, Эккертом и их коллегами. Игнорирование достижений других людей не украшает ни фон Неймана, ни Гольдштейна. К тому же придание гласности этого документа нарушало не только этические принципы, но и патентные, и даже военные требования, однако научный авторитет и статус одного из создателей атомной бомбы освобождали фон Неймана от необходимости им следовать. Своей публикацией он к тому же фактически «хоронил» ENIAC и открывал дорогу машинам, построенным по предлагаемой им архитектуре. Но тем не менее ENIAC выжил, его модернизацией занимался инженер Герман Луков, после перевоза из Муровской школы на полигон компьютер проработал много лет, полностью оправдав свое существование.
Распространение First Draft отрыло возможность для разработки компьютеров в других странах, прежде всего в этом преуспела Британия; безусловно, документ стал известен в СССР и способствовал началу отечественных работ по созданию ЭВМ. А вот в стане разработчиков произошел раскол. Мочли и Эккерт пошли по пути коммерциализации и в конечном итоге создали первый успешный продаваемый компьютер UNIVAC. А фон Нейман и его ученики получили поддержку со стороны военных, в результате чего сначала был построен программируемый компьютер EDVAC, в котором полноценно реализовывалась архитектура фон Неймана, а затем на его основе — первая серия компьютеров ORDVAC (ORDnance Variable Automatic Computer). Логика разрабатывалась в IAS, а аппаратные решения — в различных университетах и лабораториях, наибольшую известность получили ILLIAC, Oracle, AVIDAC, MANIAC, JOHNNIAC, MISTIC и Cyclone.
К созданию архитектуры, которую мы называем фон-неймановской, свои руки и талант приложило множество людей. Так или иначе каждый из них что-то заимствовал у своих предшественников, но в конечном итоге их совместная деятельность, объединенная в цепочку случайных событий, привела к результату, ассоциируемому с одним именем. История создания архитектуры компьютеров с фон Неймана сегодня рассматривается как яркий пример закономерности распределения славы. Эта закономерность, получившая название «Эффект Матфея», была сформулирована в 1988 году Робертом Мертоном. Ее суть в том, что научное сообщество склонно приписывать все заслуги людям, которые уже знамениты, оно готово преувеличивать достижения тех, кто составил себе имя, а достижения ученых, еще не получивших известности, как правило, преуменьшают или вообще не признают. Как сказано в Евангелии от Матфея: «Ибо каждому имеющему будет дано, и у него будет изобилие, а у неимеющего будет взято и то, что он имеет».
Что могло бы быть, если бы?
Первые полезные результаты работы компьютера ENIAC были получены в 1949 году. Английское электромеханическое устройство Colossus, предназначенное для расшифровки радиограмм, закодированных германской машиной Lorenz, заработало на пять лет раньше, весной 1944-го. Благодаря своей специализации на соответствующих задачах Colossus показывал производительность, сравнимую с первыми экземплярами Pentium. Часто утверждают, что после войны все материалы по Colossus были засекречены, а несколько построенных экземпляров машины были уничтожены; тайное стало явным только в 90-е годы усилиями доживших до этого времени разработчиков. На самом деле машину держали в секрете, но не более, чем любую иную систему вооружения, никто ее не уничтожал, а последний экземпляр проработал вплоть до 1961 года. Более того, у Colossus были преемники. Первый из них, Robinson, представлявший конструктивно улучшенную версию предшественника, был построен в начале 50-х годов и находился в эксплуатации почти десять лет. В следующей модели высокоскоростные считыватели с перфолент заменил магнитный барабан.
Затем были машины Johnson и Oedipus. Электронный «Эдип», предназначавшийся для автоматизации расшифровки текстов, имел свой словарь, в регистры заносили искомые слова и фразы, а машина выполняла функции распознавания. Как и Colossus, эта машина использовалась для расшифровки перехваченных сообщений, но в период холодной войны источник этих сообщений был другим. Oedipus был построен в 1954 году, то есть в том же году, что и первый серийный компьютер IBM 704, а потому естественно сравнить их. По количеству оборудования IBM 704 во много раз больше, решение аналогичной криптографической задачи занимает, как минимум, на порядок больше времени, чем на Oedipus, но подготовка задачи и данных на универсальном компьютере существенно проще. В данном случае возникала та же самая проблема, как на ENIAC до прихода Джона фон Неймана. Компания Ferranti, построившая Oedipus, параллельно строила универсальные компьютеры (Mark 1, Atlas и др.) и со временем отдала предпочтение им. Возможно, это произошло еще и потому, что элементная база в начале 60-х была еще очень слаба, и создать реконфигурируемый и удобно программируемый компьютер было сложно. Но если бы эта трудность была преодолена, то в истории компьютеров многое могло бы сложиться иначе.
* Попутно следует заметить, что Тьюринга часто ошибочно называют автором машины Colossus, использованной английской контрразведкой для расшифровки немецких радиограмм. В том, что Тьюринг имел к этой машине лишь косвенное отношение, убеждает факт, что она сделана-то была не по его схеме. Архитектура Colossus ближе к гарвардской; отсюда его фантастическая производительность. — Прим. автора.
** Вопрос приоритета решался в суде, решение было принято в пользу Атанасова, как и почему — тема для отдельного обсуждения. — Прим. автора.
Джон фон нейман. биография
Янош Лайош Нейман родился старшим из трёх сыновей в состоятельной еврейской семье в Будапеште, бывшем в те времена городом Австро-Венгерской империи. Его отец, Макс Нейман (венг. Neumann Miksa, 1870—1929), переселился в Будапешт из провинциального городка Печ в конце 1880-х годов, получил степень доктора от юриспруденции и работал адвокатом в банке.
Мать, Маргарет Канн (венг. Kann Margit, 1880—1956), была домохозяйкой и старшей дочерью (во втором браке) преуспевающего коммерсанта Якоба Канна — партнёра в фирме «Kann—Heller», специализирующейся на торговле мельничными жерновами и другим сельскохозяйственным оборудованием.
Янош, или просто Янси, был необыкновенно одарённым ребёнком. Уже в 6 лет он мог разделить в уме два восьмизначных числа и беседовать с отцом на древнегреческом. Янош всегда интересовался математикой, природой чисел и логикой окружающего мира. В восемь лет он уже хорошо разбирался в математическом анализе.
В 1911 году он поступил в Лютеранскую Гимназию. В 1913 году его отец получил дворянский титул, и Янош вместе с австрийским и венгерским символами знатности — приставкой фон (von) к австрийской фамилии и титулом Маргиттаи (Margittai) в венгерском именовании — стал называться Янош фон Нейман или Нейман Маргиттаи Янош Лайош.
Во время преподавания в Берлине и Гамбурге его называли Иоганн фон Нейман. Позже, после переселения в 1930-х годах в США, его имя на английский манер изменилось на Джон. Любопытно, что его братья после переезда в США получили совсем другие фамилии: Vonneumann и Newman.
Фон Нейман получил степень доктора философии по математике (с элементами экспериментальной физики и химии) в университете Будапешта в 23 года. Одновременно он изучал химическую инженерию в швейцарском Цюрихе (Макс
фон Нейман полагал профессию математика недостаточной для того, чтобы обеспечить надёжное будущее сына). С 1926 по 1930 год Джон фон Нейман был приват-доцентом в Берлине.
История возникновения термина
Основы учения об архитектуре вычислительных машин заложил фон Нейман в 1944 году, когда подключился к созданию первого в мире лампового компьютера ЭНИАК. В процессе работы над ЭНИАКом в Институте Мура в Пенсильванском Университете во время многочисленных дискуссий фон Неймана с его коллегами Джоном Уильямом Мокли, Джоном Эккертом, Германом Голдстайном и Артуром Бёрксом возникла идея более совершенной машины под названием EDVAC. Исследовательская работа над EDVAC продолжалась параллельно с конструированием ЭНИАКа.
В марте 1945 года принципы логической архитектуры были оформлены в документе, который назывался «Первый проект отчёта о EDVAC» — отчёт для Баллистической лаборатории Армии США, на чьи деньги осуществлялась постройка ЭНИАКа и разработка EDVACа.
Отчёт, поскольку он являлся всего лишь наброском, не предназначался для публикации, а только для распространения внутри группы, однако Герман Голдстайн — куратор проекта со стороны Армии США — размножил эту научную работу и разослал её широкому кругу учёных для ознакомления.
Так как на первой странице документа стояло только имя фон Неймана[1], у читавших документ сложилось ложное впечатление, что автором всех идей, изложенных в работе, является именно он.
После завершения Второй мировой войны и окончания работ над ЭНИАКом в феврале 1946 года команда инженеров и учёных распалась, Джон Мокли, Джон Экерт решили обратиться в бизнес и создавать компьютеры на коммерческой основе.
Фон Нейман, Голдстайн и Бёркс перешли в Институт перспективных исследований, где решили создать свой компьютер «IAS-машина», подобный EDVACу, и использовать его для научно-исследовательской работы. В июне 1946 года они[2][3] изложили свои принципы построения вычислительных машин в ставшей классической статье «Предварительное рассмотрение логической конструкции электронно-вычислительного устройства»[4][5][6].
С тех пор прошло более полувека, но выдвинутые в ней положения сохраняют свою актуальность и сегодня. В статье убедительно обосновывается использование двоичной системы для представления чисел, а ведь ранее все вычислительные машины хранили обрабатываемые числа в десятичном виде.
Авторы продемонстрировали преимущества двоичной системы для технической реализации, удобство и простоту выполнения в ней арифметических и логических операций. В дальнейшем ЭВМ стали обрабатывать и нечисловые виды информации — текстовую, графическую, звуковую и другие, но двоичное кодирование данных по-прежнему составляет информационную основу любого современного компьютера.
Ещё одной революционной идеей, значение которой трудно переоценить, является принцип «хранимой программы». Первоначально программа задавалась путём установки перемычек на специальной коммутационной панели. Это было весьма трудоёмким занятием: например, для изменения программы машины ЭНИАК требовалось несколько дней, в то время как собственно расчёт не мог продолжаться более нескольких минут — выходили из строя лампы, которых было огромное количество.
Однако программа может также храниться в виде набора нулей и единиц, причём в той же самой памяти, что и обрабатываемые ею числа. Отсутствие принципиальной разницы между программой и данными дало возможность ЭВМ самой формировать для себя программу в соответствии с результатами вычислений.
Наличие заданного набора исполняемых команд и программ было характерной чертой первых компьютерных систем. Сегодня подобный дизайн применяют с целью упрощения конструкции вычислительного устройства. Так, настольные калькуляторы, в принципе, являются устройствами с фиксированным набором выполняемых программ.
Их можно использовать для математических расчётов, но почти невозможно применить для обработки текста и компьютерных игр, для просмотра графических изображений или видео. Изменение встроенной программы для такого рода устройств требует практически полной их переделки, и в большинстве случаев невозможно.
Всё изменила идея хранения компьютерных программ в общей памяти. Ко времени её появления использование архитектур, основанных на наборах исполняемых инструкций, и представление вычислительного процесса как процесса выполнения инструкций, записанных в программе, чрезвычайно увеличило гибкость вычислительных систем в плане обработки данных. Один и тот же подход к рассмотрению данных и инструкций сделал простой задачу изменения самих программ.
Новая идея
С предложением компьютера, хранящего программы в памяти, все изменилось. Хранимые в памяти, они являются конструкцией с набором инструкций. А значит, машина может сразу получить набор команд, чтобы произвести вычисления.
Конструкция таких программ относится к самомодифицирующимся кодам. Одной из первых установок для такого объекта была необходимость в алгоритме для увеличения или иным образом изменения адресной части команд. Он делался вручную в ранних конструкциях. Это стало менее важным, когда индексные регистры и косвенная адресация стали обычными характеристиками, которыми обладает архитектура ЭВМ Джона фон Неймана машины.
Другое использование – вставлять часто используемые данные в потоке команды с помощью немедленного решения. Но самомодифицирующийся код в значительной степени подвергся критике, поскольку его, как правило, трудно понять и отладить. Кроме того, он оказался также неэффективным в плане воспроизведения и кэширования схем современных процессоров.
По большому счету, способность относиться к инструкции как к данным – это то, что делает ассемблеры, компиляторы, сборщики, погрузчики и другие инструменты с возможными объектами автоматизированного программирования. Так сказать, писать программы, которые пишут программы.
В меньшем масштабе повторяющиеся интенсивные операции ввода и вывода, такие как BitBlt-манипуляции с изображением примитивных или пиксельных и вершинных шейдеров в современной 3D-графике, были признаны неэффективными для работы без пользовательского оборудования.
Примечания
- ↑John von Neumann.First Draft of a Report on the EDVAC (неопр.). University of Pennsylvania (30 июня 1945).
- ↑Юрий Полунов.Автора!!! // PC Week/Russian Edition. — 2006. — № 20 (530).
- ↑Cragon, H. G.Computer Architecture and Implementation. — Cambridge University Press, 2000. — P. 2. — 238 p. — ISBN 978-0-521-65168-4.
- ↑Goldstine, 1980, p. 255.
- ↑Burks A. W., Goldstine H. H., Neumann J. Preliminary Discussion of the Logical Design of an Electronic Computing Instrument. — Institute for Advanced Study, Princeton, N. J., July 1946.
- ↑Смирнов А. Д. Архитектура вычислительных систем : Учебное пособие для вузов. — М.: Наука, 1990. — С. 104. — 320 с. — ISBN 5-02-013997-1.
- ↑Backus, John W. Can Programming Be Liberated from the von Neumann Style? A Functional Style and Its Algebra of Programs (англ.) : journal. — doi:10.1145/359576.359579.
- ↑Dijkstra, Edsger W.E. W. Dijkstra Archive: A review of the 1977 Turing Award Lecture (неопр.). Дата обращения: 11 июля 2008.
- ↑Создан прототип компьютера с отличной от фон-неймановской архитектурой. / Lenta.ru, 2021-07-07
- ↑Scientists Build A Computer That Works More Like The Human Brain : SCIENCE : Tech Times
- ↑Memcomputing NP-complete problems in polynomial time using polynomial resources and collective states / Science Advances 03 Jul 2021: Vol. 1, no. 6, e1500031 DOI:10.1126/sciadv.1500031 (англ.)
Принципы создания
Один из самых современных цифровых компьютеров, воплощавших разработки и усовершенствования в технике автоматического электронного вычисления, был продемонстрирован в Национальной физической лаборатории в Теддингтоне, где он был спроектирован и построен небольшой группой математиков, электронщиков и инженеров-исследователей, при содействии ряда производственных инженеров из английской Electric Company Ltd.
Оборудование до сих пор находится в лаборатории, но только как опытный образец гораздо большей установки, которая известна как Automatic Computing Engine. Но, несмотря на сравнительно небольшую массу и содержание только 800 термоионных клапанов, он является чрезвычайно быстрой и универсальной счетной машиной.
Основные понятия и абстрактные принципы расчета с помощью машины были сформулированы доктором Тьюрингом на базе все того же Лондонского математического общества еще в 1936 году, но работа над такими машинами в Великобритании была задержана войной. В 1945 году рассмотрение проблем создания таких устройств продолжилось в Национальной физической лаборатории доктором Вормсли, суперинтендантом лаборатории Отделения математики.
Принципы фон неймана
- Принцип однородности памяти
Команды и данные хранятся в одной и той же памяти и внешне в памяти неразличимы. Распознать их можно только по способу использования; то есть одно и то же значение в ячейке памяти может использоваться и как данные, и как команда, и как адрес в зависимости лишь от способа обращения к нему.
Это позволяет производить над командами те же операции, что и над числами, и, соответственно, открывает ряд возможностей. Так, циклически изменяя адресную часть команды, можно обеспечить обращение к последовательным элементам массива данных. Такой приём носит название модификации команд и с позиций современного программирования не приветствуется.
Более полезным является другое следствие принципа однородности, когда команды одной программы могут быть получены как результат исполнения другой программы. Эта возможность лежит в основе трансляции — перевода текста программы с языка высокого уровня на язык конкретной вычислительной машины.
- Принцип адресности
Структурно основная память состоит из пронумерованных ячеек, причём процессору в произвольный момент доступна любая ячейка. Двоичные коды команд и данных разделяются на единицы информации, называемые словами, и хранятся в ячейках памяти, а для доступа к ним используются номера соответствующих ячеек — адреса.
- Принцип программного управления
Все вычисления, предусмотренные алгоритмом решения задачи, должны быть представлены в виде программы, состоящей из последовательности управляющих слов — команд. Каждая команда предписывает некоторую операцию из набора операций, реализуемых вычислительной машиной.
Команды программы хранятся в последовательных ячейках памяти вычислительной машины и выполняются в естественной последовательности, то есть в порядке их положения в программе. При необходимости, с помощью специальных команд, эта последовательность может быть изменена.
По плану, первым компьютером, построенным по архитектуре фон Неймана, должен был стать EDVAC (Electronic Discrete Variable Automatic Computer) — одна из первых электронных вычислительных машин. В отличие от своего предшественника ЭНИАКа, это был компьютер на двоичной, а не десятичной основе.
Как и ЭНИАК, EDVAC был разработан в Институте МураПенсильванского университета для Лаборатории баллистических исследований (англ.) Армии США командой инженеров и учёных во главе с Джоном Преспером Экертом и Джоном Уильямом Мокли при активной помощи математика, однако до 1951 года EDVAC не был запущен из-за технических трудностей в создании надёжной компьютерной памяти и разногласий в группе разработчиков.
- прототип — Манчестерская малая экспериментальная машина — Манчестерский университет, Великобритания, 21 июня 1948 года;
- EDSAC — Кембриджский университет, Великобритания, 6 мая 1949 года;
- Манчестерский Марк I — Манчестерский университет, Великобритания, 1949 год;
- BINAC — США, апрель или август 1949 года;
- CSIR Mk 1 — Австралия, ноябрь 1949 года;
- EDVAC — США, август 1949 года — фактически запущен в 1952 году;
- CSIRAC — Австралия, ноябрь 1949 года;
- SEAC — США, 9 мая 1950 года;
- ORDVAC — США, ноябрь 1951 года;
- IAS-машина — США, 10 июня 1952 года;
- MANIAC I — США, март 1952 года;
- AVIDAC — США, 28 января 1953 года;
- ORACLE — США, конец 1953 года;
- WEIZAC — Израиль, 1955 год;
- SILLIAC — Австралия, 4 июля 1956 года.
В СССР первой полностью электронной вычислительной машиной, близкой к принципам фон Неймана, стала МЭСМ, построенная Лебедевым (на базе киевского Института электротехники АН УССР). МЭСМ как прототип впервые была публично запущена 6 ноября 1950 года и уже в качестве полноценной машины прошла государственные приёмочные испытания 25 декабря 1951 года.
Развитие созданных моделей
IBM SSEC имел возможность рассматривать инструкции как данные и был публично продемонстрирован 27 января 1948 года. Эта способность утверждалась в патенте США. Однако это была частично электромеханическая машина, а не полностью электронная. На практике инструкции были прочитаны с бумажной ленты из-за его ограниченной памяти.
Baby был первым полностью электронным компьютером для запуска сохраненных программ. Он запускал программу факторинга в течение 52 минут 21 июня 1948 года после запуска простого вычисления деления и расчета, который показывает, что два числа являются взаимно простыми.
ENIAC был изменен, чтобы работать в качестве примитивной ЭВМ только для чтения, но по той же архитектуре, и был продемонстрирован 16 сентября 1948 года, а запуск программы Адель Гольдштейн организовала с помощью фон Неймана.
BINAC провел несколько тестовых программ в феврале, марте и апреле 1949 года, хотя и не был завершен до сентября 1949 года. Кроме того, осуществлялись тестовые запуски (некоторые успешные) других электронно-вычислительных машин, для которых свойственна данная архитектура. Фон Нейман, к слову, продолжал работу и над проектом “Манхеттен”. Вот такой универсальный человек.
Разработка концепции хранимой в памяти программы
Математик Алан Тьюринг, который испытывал интерес к проблеме математической логики после лекции Макса Ньюмана в Кембриджском университете, написал статью в 1936 году, она была опубликована в издании Лондонского математического общества. В ней он описал гипотетическую машину, которую назвал «универсальной вычислительной машиной», и которая теперь известна как универсальная машина Тьюринга.
Она имела бесконечное хранилище (в современной терминологии – память), которое содержало как инструкции, так и данные, для чего и создавалась данная архитектура. Фон Нейман познакомился с Тьюрингом в то время, когда он был приглашенным профессором в Кембридже в 1935 году, а также в ходе защиты докторской диссертации Тьюринга в Институте перспективных исследований в Принстоне (штат Нью-Джерси) в 1936-1937 годах.
Независимо друг от друга Джи Преспер Эккерт и Джон Мочли, которые разрабатывали ENIAC в школе электротехники в Университете штата Пенсильвания, писали о концепции машины, хранящей программу в памяти в декабре 1943 года. При планировании новой машины, EDVAC, Эккерт писал в январе 1944 года, что она будут хранить данные и программы в новом устройстве с адресацией памяти с помощью задержки металлической ртути.
Узкое место архитектуры фон неймана
Совместное использование шины для памяти программ и памяти данных приводит к узкому месту архитектуры фон Неймана, а именно ограничению пропускной способности между процессором и памятью по сравнению с объёмом памяти. Из-за того, что память программ и память данных не могут быть доступны в одно и то же время, пропускная способность канала «процессор-память» и скорость работы памяти существенно ограничивают скорость работы процессора — гораздо сильнее, чем если бы программы и данные хранились в разных местах.
Данная проблема решается совершенствованием систем кэширования, что в свою очередь усложняет архитектуру систем и увеличивает риск возникновения побочных ошибок (например, в 2021 году были обнаружены уязвимости Meltdown и Spectre, присутствовавшие в современных процессорах в течение десятилетий, но не обнаруженные ранее из-за сложности современных вычислительных систем и, в частности, их взаимодействия с кэш-памятью).
Термин «узкое место архитектуры фон Неймана» ввёл Джон Бэкус в 1977 в своей лекции «Можно ли освободить программирование от стиля фон Неймана?», которую он прочитал при вручении ему Премии Тьюринга[7][8]
Учёные из США и Италии в 2021 заявили о создании прототипа мем-процессора (англ. memprocessor) с отличной от архитектуры фон Неймана и возможности его использования для решения NP-полных задач[9][10][11].