[ Тематический план ] [ Контроллер прерываний ] [ 1 ] [ 2 ]
Система прерываний микропроцессора 8086 принципиально не отличалась от таковой у его «идейного» предшественника — 8-разрядного 8080. Запросы прерываний от устройств по линиям IRQ (Interrupt Request) поступают в контроллер прерываний, который и выполняет их обработку. Участие самого процессора в обслуживании запросов прерываний минимально: он лишь следит за появлением общего сигнала запроса прерывания, поступающего от контроллера, а при его появлении и при условии, что прерывания не запрещены (флаг IF установлен), обрабатывает прерывание, получая его вектор от контроллера. Все остальные функции — хранение запросов, ожидающих обработки, маскирование некоторых из них, выделение наиболее приоритетного из незамаскированных запросов, формирование вектора прерывания (т.е. фактически адреса программы обработки прерывания) для конкретного запроса — выполняет контроллер прерываний. Такой подход позволял упростить сам процессор, но требовал применения для обработки прерываний дополнительной микросхемы контроллера.
В первом IBM PC, а также в появившемся несколько позже IBM PC/XT применялась одна микросхема программируемого контроллера прерываний типа 8259 (советский аналог К1810ВН59). Она имела восемь входных линий запросов прерываний (IRQ0–IRQ7) и была рассчитана на работу как с процессором 8080, так и 8086/8088: выбор конкретного типа процессора выполнялся при инициализации контроллера.
Создавая IBM PC/AT, фирма IBM решила удвоить количество линий запросов прерываний и применила два контроллера типа 8259, соединив их каскадно. Ведущий контроллер прерываний обслуживал запросы прерываний по линиям IRQ0–IRQ7, ведомый — по линиям IRQ8–IRQ15. Выходная линия запроса прерывания ведомого контроллера поступала на одну из входных линий (IRQ2) ведущего; для подключения внешних устройств использовались все восемь входных линий ведомого контроллера и семь (IRQ0, IRQ1 и IRQ3–IRQ7) ведущего, что в сумме давало 15 линий.
Такая схема обработки прерывания стала стандартной. Однако она имеет целый ряд недостатков, важнейшими из которых являются нехватка линий запросов прерываний (15 штук современному компьютеру не хватает) и неспособность работать в многопроцессорной системе. Последнее особенно актуальным стало с появлением многоядерных процессоров, ведь каждое ядро с точки зрения программиста является отдельным процессором. Эти проблемы были в общем решены путём разработки усовершенствованного программируемого контроллера прерываний (APIC), однако в целях совместимости традиционный PIC по-прежнему поддерживается и используется старыми операционными системами, не умеющими работать с APIC. Следует заметить, что современные варианты PIC, входящие, как правило, в микросхему южного моста чипсета системной платы, поддерживают лишь часть возможных режимов исходной пары контроллеров 8259. Так, по очевидным причинам выброшена возможность работы PIC с микропроцессором 8080. В последующих разделах будут описаны только те возможности контроллера прерываний, которые присутствуют в его современных реализациях.