Открыть сервис

Принцип хранимой программы

Принцип хранимой программы — это фундаментальный принцип архитектуры вычислительных машин, согласно которому программа и данные, необходимые для её выполнения, хранятся в одной и той же памяти компьютера и кодируются в единой, двоичной форме. Этот принцип предполагает, что команды программы могут обрабатываться и изменяться так же, как и данные, что позволяет машине выполнять различные задачи без физического переключения схем или перекоммутации соединений.

Принцип хранимой программы является основой архитектуры фон Неймана, которая до сих пор доминирует в подавляющем большинстве современных компьютеров, от микроконтроллеров до суперкомпьютеров. Его реализация ознаменовала переход от жёстко запрограммированных вычислителей (например, механических или с переключателями) к универсальным программируемым машинам.

История

Предпосылки и ранние вычислители

До появления принципа хранимой программы компьютеры были специализированными или программировались путём физического изменения конфигурации. Например, механический «Аналитическая машина» Чарльза Бэббиджа (1830-е годы) использовала перфокарты для ввода программ, но сама программа не хранилась в памяти машины — она считывалась последовательно. Электромеханические компьютеры 1930-1940-х годов, такие как Z3 Конрада Цузе (Германия) и Mark I Говарда Эйкена (США), также программировались с помощью внешних носителей (перфолент, коммутационных панелей) и не могли модифицировать свою программу в процессе работы.

Формулировка принципа

Ключевая идея была впервые чётко сформулирована в 1945 году в отчёте «First Draft of a Report on the EDVAC» американского математика и физика Джона фон Неймана. В этом документе, написанном по итогам работы над проектом EDVAC (Electronic Discrete Variable Automatic Computer) в Институте перспективных исследований (IAS, Принстон), фон Нейман описал архитектуру, в которой и программа, и данные хранятся в одной оперативной памяти. Хотя в разработке EDVAC участвовали многие учёные, включая Джона Мокли и Джона Преспера Эккерта, именно фон Нейман систематизировал и опубликовал эти идеи, поэтому архитектура получила название «фон-неймановской».

Первые реализации

Первым реально работающим компьютером с хранимой программой стал британский Manchester Baby (также известный как Small-Scale Experimental Machine, SSEM), запущенный 21 июня 1948 года в Манчестерском университете. Он был разработан Фредериком Уильямсом, Томом Килберном и Джеффри Тутиллом. Программа хранилась в электронно-лучевой трубке (трубка Уильямса) — первой оперативной памяти на электронных лампах.

В США первым полноценным компьютером с хранимой программой стал EDSAC (Electronic Delay Storage Automatic Calculator), построенный в Кембриджском университете (Великобритания) под руководством Мориса Уилкса и запущенный 6 мая 1949 года. EDSAC был первым компьютером, на котором была запущена программа, вычисляющая квадраты чисел, и он стал основой для многих последующих разработок.

В СССР первым компьютером с хранимой программой стала МЭСМ (Малая электронная счётная машина), созданная в 1950 году под руководством Сергея Алексеевича Лебедева в Киеве. МЭСМ была полностью программно-управляемой и могла выполнять программы, хранящиеся в памяти на электронных лампах.

Основные положения и архитектура фон Неймана

Принцип хранимой программы является центральным элементом архитектуры фон Неймана, которая включает следующие ключевые компоненты:

  1. Устройство управления (УУ): интерпретирует команды программы и управляет работой всех остальных блоков.
  2. Арифметико-логическое устройство (АЛУ): выполняет арифметические и логические операции над данными.
  3. Запоминающее устройство (ЗУ): память, в которой хранятся и программа, и данные. Обычно делится на оперативную (ОЗУ) и постоянную (ПЗУ) память.
  4. Устройства ввода/вывода (УВВ): обеспечивают связь компьютера с внешним миром.

Ключевые следствия принципа

  • Единое адресное пространство: команды и данные имеют одинаковые адреса в памяти. Процессор не различает, что именно хранится по данному адресу — команду или число. Это позволяет программе обрабатывать свои собственные команды как данные (самомодифицирующийся код).
  • Последовательное выполнение: команды программы обычно выполняются одна за другой в порядке их расположения в памяти, если только не встречена команда перехода (условного или безусловного).
  • Двоичное кодирование: и команды, и данные представляются в виде двоичных чисел (битов), что упрощает их хранение и обработку электронными схемами.

Классификация и развитие

Гарвардская архитектура

В качестве альтернативы фон-неймановской архитектуре существует Гарвардская архитектура, в которой память команд и память данных физически разделены. Это позволяет одновременно обращаться к команде и данным, что ускоряет работу, но усложняет реализацию самомодифицирующегося кода. Гарвардская архитектура часто используется в микроконтроллерах (например, семейства AVR, PIC, ARM Cortex-M) и цифровых сигнальных процессорах (DSP), где важна скорость и предсказуемость выполнения.

Модифицированная гарвардская архитектура

Современные процессоры часто используют модифицированную гарвардскую архитектуру, которая объединяет преимущества обеих: на физическом уровне память команд и данных разделена, но на логическом уровне они представляются как единое адресное пространство (как в архитектуре фон Неймана). Это достигается с помощью кэш-памяти и механизмов управления памятью.

Применение и значение

Принцип хранимой программы является краеугольным камнем всей современной вычислительной техники. Без него невозможно было бы создание универсальных компьютеров, способных выполнять произвольные программы без физической перестройки схемы. Ключевые области применения:

  • Операционные системы: загрузка и выполнение операционной системы (ОС) с жёсткого диска или SSD в оперативную память — это прямая реализация принципа хранимой программы.
  • Компиляторы и интерпретаторы: программы, которые переводят исходный код в машинный код, сами являются хранимыми программами.
  • Виртуализация: гипервизоры, эмулирующие аппаратное обеспечение, работают на основе хранимых программ.
  • Встраиваемые системы: прошивки (firmware) микроконтроллеров, хранящиеся в ПЗУ, являются программами, которые выполняются процессором.

Критика и ограничения

«Узкое горлышко» фон Неймана

Основной недостаток архитектуры фон Неймана — «узкое горлышко» (von Neumann bottleneck). Поскольку и команды, и данные передаются по одной и той же шине между процессором и памятью, скорость работы ограничивается пропускной способностью этой шины. Процессор часто простаивает, ожидая данные из памяти, что снижает производительность. Для смягчения этого эффекта используются кэш-память, конвейеризация, суперскалярные архитектуры и многоядерные процессоры.

Самомодифицирующийся код

Хотя принцип хранимой программы допускает самомодифицирующийся код (когда программа изменяет свои собственные команды), на практике он используется редко из-за сложности отладки, проблем с кэшированием и угроз безопасности. В современных процессорах самомодификация часто запрещена или ограничена на уровне аппаратного обеспечения (например, через механизмы защиты памяти, такие как NX-бит).

Интересные факты

  • Первый в мире компьютер с хранимой программой, Manchester Baby, имел память всего на 32 слова (машинных слова) по 32 бита каждое. Программа вводилась вручную через переключатели.
  • В 1951 году была создана первая коммерческая компьютерная система UNIVAC I, которая также использовала принцип хранимой программы.
  • В СССР одним из первых компьютеров с хранимой программой стала «Стрела» (1953 год), выпускавшаяся серийно.
  • Принцип хранимой программы лежит в основе работы всех современных языков программирования высокого уровня, так как компиляторы и интерпретаторы сами являются программами, хранящимися в памяти.

Источники

  • John von Neumann, «First Draft of a Report on the EDVAC», 1945.
  • Maurice Wilkes, «The Preparation of Programs for an Electronic Digital Computer», 1951 (первая книга по программированию).
  • Andrew S. Tanenbaum, «Structured Computer Organization», 6th edition, 2012.
  • David A. Patterson, John L. Hennessy, «Computer Organization and Design: The Hardware/Software Interface», 5th edition, 2013.
  • Сергей Алексеевич Лебедев, «О работах по созданию МЭСМ», 1950.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →