Что происходит в программе обработки прерываний? - PullRequest
21 голосов
/ 03 августа 2010

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

Ответы [ 4 ]

22 голосов
/ 03 августа 2010

Существует хорошая страница википедии по обработчикам прерываний .

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

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

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

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

2 голосов

Минимальный 16-битный пример

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

Сначала узнайте, как создать минимальный загрузчик ОС и запуститьэто на QEMU и реальном оборудовании, как я объяснил здесь: https://stackoverflow.com/a/32483545/895245

Теперь вы можете работать в 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" в коде сборки?

0 голосов
/ 21 июня 2018

Когда 8086 выполняет программу, прерывание нарушает нормальную последовательность выполнения команды, перенаправляет ее выполнение на другую программу, называемую подпрограммой обработки прерывания (ISR). после выполнения управления верните обратно обратно в основную программу.

0 голосов
/ 21 июня 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...