В 1944 году знаменитый ученый Джон фон Нейман придумал фундаментальный принцип архитектуры компьютеров, когда подключился к созданию первого в мире лампового компьютера ЭНИАК. До этого вычисления проводились на механических арифмометрах. В условиях второй мировой войны было необходимо производить множество расчетов траекторий выпущенных из пушки снарядов. Такие расчеты при помощи арифмометров делали специальные клерки, которых называли "компьютеры", что переводиться как "вычислители". Расчет одной траектории занимал до 16 дней. Расчетов необходимо было много, и люди не успевали справляется с работой, что в условиях войны было недопустимо. Поэтому постоянно придумывались новые способы автоматизации расчетов и увеличение производительности труда вычислителей. Именно поэтому и были изобретены электронные компьютеры, некоторые из них были на вакуумных лампах, другие на электронно-механических реле.
Если вы не знаете, что такое вакуумная лампа и реле объясню. Вакуумная лампа - это такой прибор, можно сказать допотопный транзисторов, но сделанный не из полупроводника, а в виде лампы с электродами, из которой выкачан воздух. Ну а транзистор - это такой "кирпичик" из которого сделаны интегральные микросхемы, например, микропроцессор в компьютере. В процессоре этих самых транзисторов - миллионы, и они такие маленькие что умещаются в небольшой коробочке, который и называют процессором, или "камнем". Так как реле и лампы очень крупные, то первые компьютеры занимали размер чуть ли не с дом. Вот как выглядит (или выглядела?) лампа:
принцип действия лампы заключается в том, что под высоким напряжением с электродов срываются электроны, и возникает электрический ток. Другой электрод управляет этим потоком электронов. Примерно такой же принцип в транзисторах, только все это происходит в кристалле полупроводника (кремний или германий), поэтому транзисторы можно сделать очень маленькими, прямо микроскопическими.
В реле другой принцип. Там электромагнит замыкает или размыкает контакты. Вот как выглядит (или выглядела?) типичная релюшка:
Но закончим историческое отступление и вернемся к теме урока. Итак, принципы фон Неймана:
- Принцип однородности памяти. Команды и данные хранятся в одной и той же памяти и внешне в памяти неразличимы. Распознать их можно только по способу использования; то есть одно и то же значение в ячейке памяти может использоваться и как данные, и как команда, и как адрес в зависимости лишь от способа обращения к нему. Это позволяет производить над командами те же операции, что и над числами, и, соответственно, открывает ряд возможностей. Так, циклически изменяя адресную часть команды, можно обеспечить обращение к последовательным элементам массива данных. Такой прием носит название модификации команд и с позиций современного программирования не приветствуется. Более полезным является другое следствие принципа однородности, когда команды одной программы могут быть получены как результат исполнения другой программы. Эта возможность лежит в основе трансляции — перевода текста программы с языка высокого уровня на язык конкретной вычислительной машины.
- Принцип адресности. Структурно основная память состоит из пронумерованных ячеек, причем процессору в произвольный момент доступна любая ячейка. Двоичные коды команд и данных разделяются на единицы информации, называемые словами, и хранятся в ячейках памяти, а для доступа к ним используются номера соответствующих ячеек — адреса.
- Принцип программного управления. Все вычисления, предусмотренные алгоритмом решения задачи, должны быть представлены в виде программы, состоящей из последовательности управляющих слов — команд. Каждая команда предписывает некоторую операцию из набора операций, реализуемых вычислительной машиной. Команды программы хранятся в последовательных ячейках памяти вычислительной машины и выполняются в естественной последовательности, то есть в порядке их положения в программе. При необходимости, с помощью специальных команд, эта последовательность может быть изменена. Решение об изменении порядка выполнения команд программы принимается либо на основании анализа результатов предшествующих вычислений, либо безусловно.
- Принцип двоичного кодирования. Согласно этому принципу, вся информация, как данные, так и команды, кодируются двоичными цифрами 0 и 1. Каждый тип информации представляется двоичной последовательностью и имеет свой формат. Последовательность битов в формате, имеющая определенный смысл, называется полем. В числовой информации обычно выделяют поле знака и поле значащих разрядов. В формате команды можно выделить два поля: поле кода операции и поле адресов.
Первые компьютеры работали как раз по такому принципу. По такому же принципу, иногда, с различными доработками, работают и современные компьютеры. Схематически эти принципы можно выразить вот так:
Иными словами, в памяти компьютера хранятся некие программы и данные. Все они выражены некими числам в двоичной системе счисления. Команда программы (некое число) поступает на АЛУ (арифметико-логическое устройство). Туда же поступают некие данные (из памяти, от внешних устройств или от внутренних регистров). Эти данные так же выражены числом. С поступившими данными, в зависимости от команды, производятся некие действия. Например, сложение, вычитание. Либо какие то логические операции. Так же это может быть пересылка данных из памяти во внутренний регистр или наоборот, изменение текущего адреса, откуда берется выполняемая команда (переход), при чем это может быть как безусловно (безусловный переход), так и в зависимости от какого то условия (условный переход). Что это может быть за условие? Ну, например, результат сравнение поступивших данных или значений внутренних регистров с каким то определенным значением. Например, равенство или неравенство нулю. может так же быть сравнение на больше или меньше.
Замечу, однако, что принципы фон Неймана еще не были реализованы в компьютере ЭНИАК. Идея этих принципов родилась в процессе создания сей машины, и была запланирована для реализации в компьютере EDVAC. Однако проект EDVAC не был завершен из за технических трудностей в создании надежной компьютерной памяти. Другие научно-исследовательские институты, ознакомившись с ЭНИАКом и проектом EDVAC, сумели решить эти проблемы гораздо раньше. Первыми компьютерами, в которых были реализованы основные особенности архитектуры фон Неймана, были:
- прототип — Манчестерская малая экспериментальная машина — Манчестерский университет , Великобритания, 21 июня 1948 года;
- 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 года.
У архитектуры, построенной на принципах фон Неймана, есть свои слабые и сильные стороны. Начнем с достоинств:
- Простота реализации.
- Результаты работы программы сами могут быть программной. Этот замечательный принцип используется в трансляторах с одного языка программирования на другой, в частности, в компиляторах, которые переводят программы с языка высокого уровня (Бейсик, Паскаль, СИ и другие) в машинные коды. Благодаря такому принципу программировать стало намного проще.
Теперь о недостатках (в каждой бочке меда есть ложка дегтя). Пожалуй, самым главным недостатком является узкое место использования шины для памяти программ и памяти данных, которое ограничивает пропускную способность между процессором и памятью. Из-за того, что память программ и память данных не могут быть доступны в одно и то же время, пропускная способность канала "процессор-память" и скорость работы памяти существенно ограничивают скорость работы процессора — гораздо сильнее, чем если бы программы и данные хранились в разных местах. Так как скорость процессора и объём памяти увеличивались гораздо быстрее, чем пропускная способность между ними, узкое место стало большой проблемой, серьёзность которой возрастает с каждым новым поколением процессоров данная проблема решается совершенствованием систем кэширования.
Другая опасность архитектуры фон Неймана - это возможность создать компьютерные вирусы. Действительное, если программа может создать набор данных, которые сами являться программой, то кто мешает создать такую программу, которая размножает сама себя? Иными словами, на выходе программы - ее копия. А так как программа и данные - это одно и тоже, то кто мешает такой программе изменить другую программу, так как будто это данные, приписав к ней саму себя и изменив программу так, что бы сначала вызвалась она (копия программы), а уже потом та, другая программа, которая была таким образом изменена. Именно так и делают компьютерные вирусы.