Машина фон Неймана: почему все компьютеры устроены одинаково
От смартфона до суперкомпьютера — внутри одна и та же схема, придуманная в 1945 году. Разбираем, что такое архитектура фон Неймана и почему мир так и не придумал ничего радикально иного.
Один документ 1945 года задал форму почти всем компьютерам, что вы видели в жизни.
Гениальность фон Неймана была в простоте: пусть программа лежит в той же памяти, что и данные. И всё стало возможно.
Документ без авторских прав
В 1945 году математик Джон фон Нейман написал черновик отчёта о проекте компьютера EDVAC. Документ разошёлся по рукам, на титуле стояло только его имя — и в историю схема вошла как архитектура фон Неймана, хотя над ней работала целая команда. Идея оказалась настолько удачной, что стала фактическим стандартом на десятилетия вперёд.
Главная идея: код — это тоже данные
До фон Неймана компьютеры программировали проводами и переключателями: чтобы решить новую задачу, машину буквально перекоммутировали руками часами. Прорыв был в концепции хранимой программы: команды программы лежат в той же памяти, что и числа, с которыми она работает. Для машины и инструкция, и данные — просто байты. А раз так, программу можно загрузить за секунды, можно копировать, и — самое смелое — программа может менять саму себя.
Из чего она состоит
- Память — единое хранилище, где вперемешку лежат код и данные.
- Устройство управления — дирижёр: читает команды и решает, что делать дальше.
- АЛУ (арифметико-логическое устройство) — считает: сложить, сравнить, сдвинуть.
- Устройства ввода-вывода — связь с внешним миром: клавиатура, экран, диск.
Управление и АЛУ вместе образуют то, что мы зовём процессором. А всё общение между памятью и процессором идёт по шине — общему каналу передачи данных.
Цикл, который крутится миллиарды раз в секунду
Процессор живёт в простом ритме, который называют fetch–decode–execute:
- Выборка: достать из памяти очередную команду по адресу, на который указывает счётчик команд.
- Декодирование: понять, что это за команда.
- Исполнение: выполнить — сложить числа, записать в память, прыгнуть в другое место.
Потом счётчик сдвигается, и всё повторяется. Этот незатейливый цикл, повторённый миллиарды раз в секунду, и есть работа любого процессора.
Бутылочное горлышко
У красивой схемы есть врождённая болезнь — бутылочное горлышко фон Неймана. Раз код и данные ходят по одной шине, процессор и память постоянно толкаются в одной двери. Процессоры стали быстрыми, а память за ними не успевает — и шина превращается в пробку. Именно с этим горлышком борются кэши (быстрая память поближе к ядру), конвейеры и многоядерность.
Парадокс в том, что недостаток схемы — обратная сторона её достоинства. Раз код и данные неотличимы для машины, программа может работать с другой программой как с обычными числами: загружать её, изменять, переводить с языка на язык. Именно поэтому стали возможны компиляторы, операционные системы и вообще программы, которые пишут программы. Гарвардская архитектура с раздельными шинами быстрее, но лишена этой гибкости — оттого и прижилась там, где код менять не нужно: в простых микроконтроллерах внутри бытовой техники.
| Фон Нейман | Гарвардская архитектура |
| Одна память на код и данные | Раздельная память для кода и данных |
| Гибкость, простота | Скорость, но жёсткость |
| ПК, ноутбуки, серверы | Микроконтроллеры, DSP |
Почему мы до сих пор здесь
За 80 лет придумали GPU, квантовые и нейроморфные чипы. Но базовый компьютер на вашем столе по сути всё та же машина фон Неймана: память, процессор, шина, цикл выборки команд. Иногда лучшая идея — та, которую почти не надо менять. Фон Нейман описал не конкретную машину, а форму, в которую с тех пор отливают почти всё цифровое.