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

Мультипрограммирование

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

История

Предпосылки возникновения

В ранних вычислительных системах (1940-е — начало 1950-х годов) использовался режим пакетной обработки, при котором программа выполнялась от начала до конца без прерываний. Процессор простаивал во время операций ввода-вывода, которые были значительно медленнее его работы. Например, считывание данных с перфоленты или магнитной ленты могло занимать в тысячи раз больше времени, чем выполнение инструкций. Это приводило к крайне низкой загрузке центрального процессора — часто менее 10%.

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

Первые системы с элементами мультипрограммирования появились в конце 1950-х годов. Одним из ранних примеров является система Atlas (Манчестерский университет, Великобритания, 1962 год), где использовалась концепция «одноуровневого хранения» и аппаратная поддержка прерываний. В 1960-х годах мультипрограммирование стало стандартом для мейнфреймов, таких как IBM System/360 (1964 год), где операционная система OS/360 поддерживала одновременное выполнение нескольких задач.

Развитие в СССР

В Советском Союзе мультипрограммирование активно развивалось в рамках создания многомашинных и многопроцессорных вычислительных комплексов. Например, в ЭВМ «БЭСМ-6» (1967 год) использовалась аппаратная поддержка прерываний и система команд, позволявшая реализовать мультипрограммный режим. Операционная система «ДИСПАК» (1970-е годы) для БЭСМ-6 поддерживала мультипрограммирование с разделением времени.

Принципы работы

Основные механизмы

Мультипрограммирование базируется на трёх ключевых механизмах:

  1. Прерывания — аппаратный сигнал, который приостанавливает выполнение текущей программы и передаёт управление операционной системе. Прерывания могут быть вызваны завершением операции ввода-вывода, ошибкой или таймером.
  2. Планирование задачалгоритм, определяющий, какую из находящихся в памяти программ следует выполнять в данный момент. Планировщик может использовать различные стратегии: «первым пришёл — первым обслужен» (FCFS), «кратчайшая задача первой» (SJF), циклическое планирование (Round Robin) и другие.
  3. Управление памятью — механизмы, позволяющие нескольким программам одновременно находиться в оперативной памяти без взаимного влияния. Для этого применяются такие методы, как статическое и динамическое распределение памяти, страничная и сегментная организация.

Состояния задач

В мультипрограммной системе каждая программа может находиться в одном из трёх состояний:

  • Выполнение — процессор активен и исполняет инструкции данной программы.
  • Ожидание — программа заблокирована, например, ожидает завершения операции ввода-вывода.
  • Готовность — программа может быть выполнена, но процессор занят другой задачей.

Переключение между задачами происходит при наступлении прерывания или по истечении кванта времени (в системах с разделением времени).

Виды мультипрограммирования

По степени загрузки процессора

  • Мультипрограммирование с фиксированным числом задач — в памяти одновременно находится строго определённое количество программ (например, 2 или 4). При завершении одной задачи её место занимает новая.
  • Мультипрограммирование с переменным числом задач — количество одновременно выполняемых программ может меняться в зависимости от доступной памяти и загрузки системы.

По типу взаимодействия с пользователем

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

По аппаратной реализации

  • Аппаратное мультипрограммирование — поддерживается на уровне архитектуры процессора (наличие нескольких регистровых файлов, быстрые переключения контекста). Пример: процессоры Intel Itanium.
  • Программное мультипрограммирование — реализуется операционной системой без специальной аппаратной поддержки. Требует больше времени на переключение контекста.

Преимущества и недостатки

Преимущества

  • Повышение загрузки процессора — за счёт совмещения вычислений с операциями ввода-вывода загрузка может достигать 80–90%.
  • Увеличение пропускной способности — большее количество задач может быть выполнено за единицу времени.
  • Возможность интерактивной работы — в системах с разделением времени несколько пользователей могут одновременно работать с компьютером.

Недостатки

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

Применение

Историческое

Мультипрограммирование широко использовалось в мейнфреймах 1960–1980-х годов для пакетной обработки данных (например, расчёт зарплаты, научные вычисления, обработка банковских транзакций). Системы IBM System/360 и System/370, а также советские ЕС ЭВМ (единая серия ЭВМ) работали в мультипрограммном режиме.

Современное

В современных операционных системах (Windows, Linux, macOS) мультипрограммирование является базовым принципом, реализованным через механизмы мультизадачности. Однако термин «мультипрограммирование» чаще используется в историческом контексте или в технической литературе при описании встроенных систем и операционных систем реального времени, где требуется детерминированное выполнение задач.

Отличие от мультизадачности и мультипроцессорной обработки

  • Мультипрограммирование — одновременное нахождение нескольких программ в памяти и переключение процессора между ними (один процессор).
  • Мультизадачность — более широкое понятие, включающее мультипрограммирование, а также разделение времени и управление потоками (threads) в рамках одной программы.
  • Мультипроцессорная обработка — использование нескольких процессоров (или ядер) для одновременного выполнения нескольких программ или потоков.

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

  • Первая коммерческая система с мультипрограммированием — UNIVAC 1107 (1962 год), где использовалась операционная система EXEC II.
  • В советской ЭВМ «Минск-32» (1968 год) мультипрограммирование было реализовано на аппаратном уровне с помощью системы прерываний и специального блока управления задачами.
  • Термин «мультипрограммирование» (multiprogramming) ввёл в обиход американский учёный Джон Маккарти в 1959 году, хотя первые теоретические работы появились ещё в середине 1950-х.

Источники

  • Таненбаум Э., Бос Х. «Современные операционные системы». 4-е изд. — СПб.: Питер, 2015.
  • Столлингс У. «Операционные системы: внутренняя структура и принципы проектирования». 9-е изд. — М.: Вильямс, 2019.
  • Дейтел Г. «Введение в операционные системы». В 2 т. — М.: Мир, 1987.
  • Королёв Л. Н. «Структуры ЭВМ и их математическое обеспечение». — М.: Наука, 1978.
  • Брукс Ф. «Мифический человеко-месяц». — М.: Символ-Плюс, 2000.

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

На главную BFOmetr →