Что происходит в процедуре обслуживания прерываний?

Может кто-нибудь объяснить мне, что происходит внутри процедуры обслуживания прерываний (хотя это зависит от конкретной процедуры, достаточно общего объяснения)? Это всегда было для меня черным ящиком.

Ответы

Ответ 1

В обработчики прерываний есть хорошая страница wikipedia.

"Обработчик прерываний, также известный как подпрограмма обслуживания прерываний (ISR), является подпрограммой обратного вызова в операционной системе или драйвере устройства, выполнение которого инициируется приемом прерывания. Обработчики прерываний имеют множество функций, которые варьируются в зависимости от причины генерирования прерывания и скорости, с которой обработчик прерываний выполняет свою задачу.

В основном, когда часть аппаратного обеспечения (аппаратное прерывание) или какая-то задача ОС (прерывание программного обеспечения) должно запускаться, это вызывает прерывание. Если эти прерывания не замаскированы (игнорируются), ОС остановит действие и вызовет специальный код для обработки этого нового события.

Хорошим примером является чтение с жесткого диска. Диск медленный, и вы не хотите, чтобы ваша ОС дождалась возврата данных; вы хотите, чтобы ОС пошла и сделала другие вещи. Поэтому вы настраиваете систему так, чтобы, когда диск запрашивал данные, он вызывает прерывание. В процедуре обслуживания прерываний для диска ЦП будет принимать данные, которые теперь готовы, и возвратит их запрашивающему.

ISR часто нужно быстро выполнять, так как аппаратное обеспечение может иметь ограниченный буфер, который будет перезаписан новыми данными, если он теперь будет достаточно быстро удален. Также важно, чтобы ваш ISR был завершен быстро, так как CPU обслуживает один прерыватель ISR, будет замаскирован, а это означает, что если ЦП не сможет получить их достаточно быстро, данные могут быть потеряны.

Ответ 2

Лучший способ понять - сделать некоторые минимальные примеры самостоятельно.

Минимальный 16-разрядный пример

Сначала узнайте, как создать минимальную ОС загрузчика и запустить ее на QEMU и реальном оборудовании, как я объяснил здесь: fooobar.com/info/30228/...

Теперь вы можете работать в 16-битном реальном режиме:

    movw $handler0, 0x00
    mov %cs, 0x02
    movw $handler1, 0x04
    mov %cs, 0x06
    int $0
    int $1
    hlt
handler0:
    /* Do 0. */
    iret
handler1:
    /* Do 1. */
    iret

Это будет сделано по порядку:

  • Do 0.
  • Do 1.
  • hlt: прекратить выполнение

Обратите внимание, как процессор ищет первый обработчик по адресу 0, а второй в 4: это таблица обработчиков, называемая IVT, и каждая запись имеет 4 байта.

Минимальный пример, который делает несколько IO, чтобы сделать обработчики видимыми.

Защищенный режим

Современные операционные системы работают в так называемом защищенном режиме.

В этом режиме обработка имеет больше опций, поэтому она сложнее, но дух тот же.

Минимальный пример

См. также

Связанный вопрос: Что такое "int 0x80" в коде сборки?