Попытаемся, насколько это возможно, в общих чертах объяснить что именно предложил фон Нейман, тем более что сейчас в компьютерной технике разбираются многие, а её основы преподают даже в неспециализированных университетах.[290] Итак, компьютер производит обработку данных представленных в двоичной форме, т. е. в виде логических единиц и нулей. Логическая единица или логический ноль — это просто уровни напряжения, низкий (около 0 вольт) при «нуле» и «высокий» (примерно 2,4 В) при «единице». Это называется двоичной логикой или булевой алгеброй, её аппарат был разработан в середине XIX века англичанином Д. Булем. В ней числа переводятся в двоичный код по специальной формуле, а затем все операции над ними проводятся именно в двоичном коде. Элементарных операций над логическими числами всего лишь три: дизъюнкция или сложение (ИЛИ), конъюнкция или умножение (И) и инверсия или отрицание (НЕ). Каждую из этих операций реализует т. н. логический элемент и из этих элементов можно получить такие более сложные звенья как триггеры, счетчики и регистры (они осуществляют переключение, счет и хранение логических кодов); шифраторов и дешифраторов (преобразовывают коды); мультиплексоров и демультиплексоров (коммутируют шины данных). Эта техника называется цифровой и составляет один из самых интересных разделов электроники. Ни в коем случае не подумайте, что я вам здесь рассказываю какие-то сложные и заумные вещи, понятные только подготовленным профессионалам. В Советском Союзе, в 70-80-е годы, книги по цифровой электронике издавались даже для детей среднего школьного возраста и эти дети поразительно быстро вникали во все её базовые аспекты, сами проектировали логические схемы (это очень развивает мышление — говорю вам как один из таких бывших детей). Знавал я и карапузов младшего школьного возраста, которые также всё легко «схватывали». Ну да, это вам не «Война и Мир» и не какой-нибудь Бальзак с Гюго. А потом и реализовывали схемы в «железе». Именно такие малолетки «среднего и старшего школьного возраста» одними из первых в СССР обзавелись в конце 80-ых годов компьютерами самостоятельно изготовленными на базе процессоров I8080 или Z80, в то время как почти всё взрослое население не имело о компьютерной технике ни малейших представлений.[291] К сожалению, их невообразимый потенциал был слит в 90-ых годах, либо перешел к врагам — американцам. Так что если вам будет нечего делать, можете почитать детские советские книжки по цифровой технике и двоичной логике, список смотрите в примечании.
Да, так вот, любой, даже самый сложный компьютер может быть выстроен из множества логических элементов, разумеется соединенных специальными образом. К примеру вам нужно сложить числа 5 и 2. Двоичный код числа 5 — 101, а код числа 2 — 010. И там и там — три разряда. У нас 3 разряда, поэтому берем 3 логических сумматора (элемента ИЛИ) с двумя входами (так как складываем два числа). Сумматор-дизъюнктор имеет два входа и один выход, а числа складывает по специальному правилу, на выходе мы получаем трехразрядный код 111 — код числа 7. Если вы хотите удостовериться правильно ли произведено сложение, то можете путем простейших операций сравнить полученный код с заранее «зашитым» в память кодом числа 7. Точно также можно вычитать, умножать или делить числа. Почему двоичная логика чрезвычайно удобна? Да потому что она позволяет свести самые сложные операции к множеству элементарных, пусть даже их и будет очень много (есть контакт — нет контакта). Наука не дает нам ответа как именно некоторые люди производят в уме весьма сложные операции, вроде умножения шестизначных чисел или извлечения с точностью до 3–4 знака корней n-ой степени из больших трансцендетных чисел, но факт: основа нашего головного мозга — нейрон, элементарная ячейка, могущая находиться в возбужденном или невозбужденном состоянии проводить слабые электрические импульсы или не проводить. Т. е. в общем случае иметь те же состояния что и логические элементы. Мы практически ничего не знаем о работе мозга вообще, но работа отдельного нейрона изучена достаточно хорошо. И совсем неудивительно что Росс Эшби был нейрофизиологом, а фон Нейман и Винер серьезно интересовались принципами работы мозга. В своей книге фон Нейман вообще постоянно перескакивает с элементов и реле на нейроны. И действительно, возьмите обычное реле. Подайте на обмотку напряжение («логическую единицу»), контакты замкнуться, лампочка загорится, «истинный» сигнал пройдет.
А можно сделать наоборот — при подаче напряжения реле будет не замыкать, а размыкать контакты. Т. е. при подаче «1», на выходе будет «0», а при подаче «0» (т. е. при отсутствии управляющего сигнала) на выходе будет «1». Это и есть инверсия. Неудивительно, что первые электрические вычислительные машины были собраны на реле, которые могли включаться-выключаться несколько десятков раз в секунду. Потом в них ввели электронные лампы, которые тоже «включались-выключались», но уже сотни тысяч раз в секунду. Теперь транзисторы могут делать то же самое сотни миллионов и миллиарды раз в секунду. Ну и очевидно, что если сложная вычислительная операция разбивается на множество простых и её с огромной скоростью выполняют тысячи быстродействующих элементов мы можем получить прибавку к ускорению операций во много-много порядков. А если размер быстродействующих элементов — нанометры, то вполне мощный компьютер может легко разместиться в кармане. Или в мобильном телефоне.
Но лампы и особенно реле работали крайне ненадежно в сравнении с современными комплектующими. Контакты реле залипали или наоборот обгорали, у них обламывались подвижные части, иногда они оказывались подверженными воздействию помех и т. п. Понятно, что надежность реле как элементарных звеньев стремились повысить насколько это в принципе было возможно, но этих реле были тысячи и десятки тысяч, поэтому вероятность ненадежного срабатывания всё равно была высокой, именно за счет численности. Ненадежность оказывалась неизбежностью и фон Нейман предварительно отметил что: «…ошибка рассматривается не как исключительное событие, результат или причина какой-то неправильности, но как существенная часть рассматриваемого процесса. Значение понятия ошибки в синтезировании автоматов вполне сравнимо со значением обычно учитываемого фактора правильной логической структуры которая имеется в виду». Иными словами, если мы представляем себе какими именно будут ошибки, то они не столь опасны если мы их не замечаем. Относительно вероятности ошибки вообще, он добавлял что «По убеждению автора, которого он придерживается много лет, ошибку следует рассматривать при помощи термодинамических методов, так же, как это делается с информацией в работах Сцилларда и Шеннона». Т. е. потенциально ошибаться или «срабатывать ненадежно» могут все, но с разной вероятностью.
Мы говорили, что все логические операции изначально сводятся к трем простейшим — сложению, умножению и вычитанию, но существует более сложные функции через которые, наоборот, можно выразить все простейшие, т. е. вместо трех простейших, мы получаем одну, но немного более сложную. Одной из таких функций является т. н. «штрих Шеффера» или «отрицание конъюнкции» (И—НЕ). Фон Нейман математически доказал, что с помощью элементов, реализующих «штрих Шеффера» даже при том что каждый элемент функционирует ненадежно, тем не менее, можно построить любую логическую функцию, которая будет надежнее чем схема сделанная из обычных элементов. Да, такая схема получается несколько избыточной, но при её оптимизации избыточность минимизируется, а в электронном варианте «штрих Шеффера» реализуется на том же числе дискретных деталей что и обычные логические элементы.
Клод Шеннон изучив выводы фон Неймана, издал уже более прикладную работу: «Надежные схемы из ненадежных реле»,[292] где не только разработал более эффективную систему в смысле числа требуемых элементов при условии надежности всей схемы, но и открыл перспективное направление исследований асимптотической оценки сложности подобных схем.
290
Ю.А. Данилов в журнале серии «Знание», № 4, 1981 г. посвященном фон Нейману пояснял его идеи в более общем виде. «По фон Нейману, каждую компоненту допустимо рассматривать как чёрный ящик с определённым числом входов и выходов. Если бы сигнал на выходе был функцией сигналов на входе, то мы имели бы надёжную компоненту, срабатывающую с вероятностью 1. Если же сигнал на выходе при заданных сигналах на входе возникает с вероятностью меньше 1, то компонента ненадёжна. Можно ли, располагая неограниченным запасом ненадёжных компонент, построить надёжный вариант любого заданного автомата? Фон Нейман решает эту задачу двумя способами. Первое решение (автоматы с простыми линиями) позволяет понижать вероятность ошибки лишь до некоторого уровня. Суть решения состоит в построении из трёх ненадёжных одинаковых линий и смесителей, производящих сравнение сигналов на выходах подключённых к ним компонент, более надёжной системы, выполняющей ту же функцию. Второе решение фон Нейман называет трюком с кратными линиями. Двоичный выход машины заменяется пучком из многократно повторенного двоичного выхода, и значение сигнала на выходе определяется «большинством голосов» — значением сигнала на большей части линий в пучке. Схема идеального автомата, построенного из надёжных компонент, преобразуется: каждая линия заменяется пучком линий, а каждый орган — аналогом, производящим операции с выходным сигналом большинства линий. Фон Нейман приводит оценки избыточности для второй схемы. Оказывается, что при замене органа, не срабатывающего с вероятностью 1/200, при избыточности 60 000 на единицу уровень ошибки понижается до 10–20. Это означает, что автомат, сравнимый по сложности и быстродействию с человеческим мозгом, мог бы столетиями работать без сбоев».
291
В СССР описание компьютера который можно собрать самостоятельно было впервые опубликовано в мае 1986 года в журнале «Радио». Использовался базовый комплект микросхем фирмы «Интел» серии I80 разработанной в конце 60-ых годов, точнее, их советский аналог — серия К580. Поскольку интерес к этой технике был огромный, а ни одна деталь для этого компьютера официально не продавалась, мгновенно возник черный рынок, и в СССР, помимо всего прочего, начали еще спекулировать компьютерами и комплектующими к ним. Через год появилось несколько вариантов другого компьютера, на этот раз на базе процессора Z80, фирмы «Zylog». Этот компьютер стал особенно популярен и был реализован в кустарных и домашних условиях в сотнях тысячах если не в миллионах экземплярах. Именно эти два компьютера превратили профессию программиста в массовую. Финалом процесса стал самостоятельный сбор компьютера IBM ХT состоящего в разных вариантах из 200–220 микросхем. Впрочем, вскоре на постсоветское пространство массовым потоком пошли компьютеры и комплектующие с Запада.
292
C. E. Shannon and E. Moore, «Reliable circuits. from unreliable relays» Русское издание, «Надежные цепи из ненадежных реле» Кибернетический сборник, Москва, 1960. Шеннон совместно с Е. Муром занимался повышением надежности релейных цепей на работу которых сильно влияли шумовые помехи. Достигалось это все тем же введением избыточности из дополнительных элементов каждый из которых был ненадежен. Шеннон трансформировал свои выводы относительно борьбы с шумом к анализу ситуации на фондовом рынке, в частности, к вопросу оптимальной стратегии инвестиций, в которой роль «зашумленного канала» выполнял нестабильный рынок ценных бумаг и соответствующие ему временные ряды. Целью задачи, понятное дело, была максимизация выгоды.