Прерывания и виды ОС
Как ОС узнаёт, что пришли данные с диска или нажали клавишу, не тратя процессор на постоянные проверки.
Прерывание (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).
- Адреса обработчиков лежат в таблице векторов прерываний, у прерываний есть приоритеты.
- Виды ОС: пакетные, разделения времени, реального времени, встраиваемые, распределённые.