Аппаратные прерывания (Interrupts) — это электрический сигнал от оборудования, который устройство посылает процессору для уведомления о каком-то событии.
Примеры событий:
- нажатие клавиши на клавиатуре;
- приход сетевого пакета;
- завершение операции чтения/записи на диске;
Механизм работы:
1. Устройство посылает сигнал на контроллер прерываний.
2. Контроллер уведомляет CPU, указывая номер (вектор) прерывания
3. CPU откладывает выполнение текущего кода.
4. Сохраняется текущее состояние процессора.
5. Управление передаётся в специальную функцию — обработчик прерывания (Interrupt Handler).
6. Обработчик выполняется в привилегированном режиме ядра (Kernel mode) в особом контексте прерывания (Interrupt context).
7. После выполнения обработчика процессор восстанавливает сохранённое состояние и продолжает выполнение основной программы.
Особенности:
- Каждому устройству назначается номер прерывания (IRQ number или вектор прерывания). По этому номеру процессор находит в специальной таблице (IDT - Interrupt Descriptor Table) адрес соответствующего обработчика. Источников прерываний может быть больше, чем физических линий, поэтому используется контроллер, который их собирает в один канал и управляет приоритетами.
- Прерывания не выполняются параллельно — они обрабатываются по очереди, в потоке, на одном ядре процессора (том, которое приняло прерывание). Новые прерывания на этом же ядре обычно на время обработки текущего маскируются (отключаются), чтобы обработчик не мог быть прерван сам собой.
- При необходимости контроллер прерываний ставит прерывания в очередь и создаёт задачи для их обработки.
1 минута
12 июня