Прерывания и виды ОС

Как ОС узнаёт, что пришли данные с диска или нажали клавишу, не тратя процессор на постоянные проверки.

Прерывание (interrupt) — это сигнал, который заставляет процессор приостановить текущую работу и выполнить специальную процедуру-обработчик, после чего вернуться к прерванной задаче.

Зачем нужны прерывания

Представьте, что вы ждёте курьера. Можно каждую минуту выглядывать в окно — это опрос (polling), и он тратит ваше время впустую. А можно заняться делами и ждать звонка в дверь — это прерывание. Когда курьер придёт, звонок прервёт вас, вы откроете дверь и вернётесь к делам.

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

Виды прерываний

ВидОткудаПример
Аппаратноеот устройстванажата клавиша, пришёл сетевой пакет, диск закончил чтение
Программное (trap)от инструкциисистемный вызов, точка останова отладчика
Исключение (fault)от ошибкиделение на ноль, обращение к недопустимой памяти, page fault

Как обрабатывается прерывание

Когда приходит прерывание, происходит чёткая последовательность:

1. процессор завершает текущую инструкцию
2. сохраняет состояние (регистры, счётчик команд)
3. по номеру прерывания находит обработчик в таблице
4. выполняет обработчик (в режиме ядра)
5. восстанавливает сохранённое состояние
6. продолжает прерванную программу с того же места

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

Аналогия с приоритетами

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

Виды операционных систем

Под разные задачи делают разные ОС. Кратко основные семейства:

  • Системы пакетной обработки (batch). Исторические: задания собирали в пакет и выполняли подряд без участия человека.
  • Системы разделения времени (time-sharing). Много пользователей работают «одновременно», процессор быстро переключается между ними. Так работают Linux, Windows, macOS.
  • Системы реального времени (real-time). Главное — уложиться в жёсткий срок (дедлайн). Применяют в автомобилях, медтехнике, промышленности. Бывают «жёсткие» (срыв дедлайна недопустим) и «мягкие».
  • Встраиваемые (embedded). Маленькие ОС для устройств с ограниченными ресурсами: роутеры, умные часы, бытовая техника.
  • Распределённые. Управляют группой компьютеров как единым целым.

Опрос против прерываний: цена в цифрах

Сравним стоимость опроса и прерываний на простой модели. Опрос делает много пустых проверок, прерывание реагирует только на готовность.

# Устройство готово на 1000-й проверке из имитации
ready_at = 1000
poll_cost = 1      # одна проверка опроса
interrupt_cost = 80  # одно прерывание дороже, но оно одно

polling_total = ready_at * poll_cost
interrupt_total = interrupt_cost

print(f"Опрос: {ready_at} проверок x {poll_cost} = {polling_total} тактов потрачено впустую")
print(f"Прерывание: 1 сигнал x {interrupt_cost} = {interrupt_total} тактов")
print(f"Выигрыш прерываний: в {polling_total // interrupt_total} раз дешевле")

Вывод:

Опрос: 1000 проверок x 1 = 1000 тактов потрачено впустую
Прерывание: 1 сигнал x 80 = 80 тактов
Выигрыш прерываний: в 12 раз дешевле

Итог

  • Прерывание — сигнал, заставляющий процессор отложить работу и выполнить обработчик.
  • Прерывания эффективнее опроса: не нужно постоянно проверять устройства.
  • Бывают аппаратные, программные (trap) и исключения (fault).
  • Адреса обработчиков лежат в таблице векторов прерываний, у прерываний есть приоритеты.
  • Виды ОС: пакетные, разделения времени, реального времени, встраиваемые, распределённые.
Проверьте себя
1. В чём главное преимущество прерываний перед опросом (polling)?
AПрерывания работают быстрее любой инструкции
BПроцессор не тратит время на постоянные проверки устройств
CПрерывания не требуют участия ядра
DОпрос вообще невозможен на современных процессорах
2. К какому виду относится прерывание от системного вызова?
AАппаратное
BПрограммное (trap)
CСбой питания
DСетевое
3. Какая ОС в первую очередь обязана укладываться в жёсткие сроки (дедлайны)?
AПакетная (batch)
BРазделения времени
CРеального времени (real-time)
DРаспределённая
Поддержать проект