|
|
|
|
Аппаратные прерывания
На уровне аппаратных средств, поддерживающих MS-DOS, есть система прерываний от аппаратных средств, каждое из которых ассоциировано с конкретным
устройством. Каждое устройство, ожидающее обслуживания процессором, посылает контроллеру прерываний 8259A, который планирует обработку прерываний,
запрос на прерывание, или IRQ. Каждое устройство имеет некоторый приоритет. Устройство с высшим приоритетом первым получает доступ к процессору
раньше менее важных устройств. (Контроллер прерываний 8259A может быть запрограммирован и по-другому, но другие способы обработки менее выгодны для
использования). Когда контроллер прерываний решает, что прерывание может быть обработано, он посылает на устройство сообщение "подтверждение приема
прерывания", блокирует все остальные прерывания и генерирует прерывание.
В ответ на конкретное аппаратное прерывание, процессор ищет адрес обработки прерывания в таблице векторов прерываний (IVT). Эта таблица занимает
256 двойных слов (1024 байта) памяти. Каждая ее строка содержит адрес подпрограммы обработки прерывания (ISR). Процессор запоминает текущие флаги и
программный счетчик (CS:IP) и начинает обслуживание прерывания.
ISR делает все необходимое для обслуживания прерываний. В некоторый момент ISR посылает сообщение о конце прерывания (EOI) контроллеру 8259,
означающее, что он готов принять запрос на обслуживание следующего прерывания. Контроллер прерываний не будет принимать прерывания от этого или других
устройств с более низким приоритетом, пока не получит этого сообщения. После того, как ISR сделала свою работу, она выполняет команду IRET, которая
восстанавливает флаги и первоначальный CS:IP.
|
|