Аппаратные прерывания
Для обработки событий, происходящих асинхронно по отношению к выполнению программы, лучше всего подходит механизм прерываний. Прерывание можно рассматривать как некоторое особое событие в системе, требующее моментальной реакции.
Аппаратные прерывания (IRQ - Interrupt ReQuest - запрос прерывания) вызываются физическими устройствами и приходят асинхронно. Эти прерывания информируют систему о событиях, связанных с работой устройств, например, о том, что наконец-то завершилась печать символа на принтере и неплохо было бы выдать следующий символ, или о том, что получен очередной символ из последовательного порта и его надо записать в буфер.
Использование прерываний при работе с медленными внешними устройствами позволяет совместить ввод/вывод с обработкой данных в центральном процессоре.
Практически все платы расширения компьютера, начиная от контроллеров накопителей на магнитных дисках и кончая звуковыми адаптерами, используют аппаратные прерывания. Каждая плата должна пользоваться собственным прерыванием. Никакие два устройства не должны разделять одно аппаратное прерывание.
Для обработки прерываний, вырабатываемых платами расширения, обычно используются специальные драйверы. Они загружаются в оперативную память во время запуска операционной системы. Их вызов обычно находится в файле CONFIG.SYS или AUTOEXEC.BAT.
В следующей таблице мы перечислили несколько наиболее важных устройств компьютера и указали используемые ими ресурсы.
Устройство | Номер IRQ | Адреса портов ввода/вывода | Адресное пространство оперативной памяти |
COM1 | 4 | 3F8h - 3FFh | |
COM2 | 3 | 2F8h - 2FFh | |
COM3 | 4 | 3E8h - 3EFh | |
COM4 | 3 | 2E8h - 2EFh | |
LPT1 | 7 | 378h - 37Fh | |
LPT2 | 5 | 278h - 27Fh | |
LPT3 | 7 | 3BCh - 3BFh | |
Контроллер дискаXT DISK CNTRLR | 5 | 320h - 32Fh | C8000h - CBFFFh |
Контроллер дискаAT DISK CNTRLR | 14 | 1F0h - 1F8h | |
VGA, цветной режим | 2/9 | 3C0h - 35Ah | A000h - BFFF0h |
VGA, монохромный режим | 3 | C0h - 3BAh | C000h - C7FFFh |
EGA | 2 | 3C0h - 3CFh | A0000h - AFFFFh |
MONO | 3B0h - 3BFh | B0000h - B3FFFh | |
CGA | 3D0h - 3DFh | B8000h - BBFFFh | |
HGA | 3B4h - 3BFh | B0000h - B7FFFh | |
AST CLOCK | 2C0h - 2C7h |