Абсолютные приоритеты
Запрос, имеющий абсолютный приоритет, прерывает выполняемую программу и инициирует выполнение соответствующей прерывающей программы.
Рис. 6.2 Иллюстрация абсолютного приоритета
Относительные приоритеты.
Запрос с относительным приоритетом является первым кандидатом на обслуживание после завершения выполнения текущей программы.
Рис. 6.3 Иллюстрация относительных приоритетов
Если наиболее приоритетный из выставленных запросов прерывания не превосходит по уровню приоритета выполняемую процессором программу, то запрос прерывания игнорируется или его обслуживание откладывается до завершения выполнения текущей программы.
Простейший способ установления приоритетных соотношений между запросами прерывания состоит в том, что приоритет определяется порядком присоединения линий сигналов запросов к входам системы прерывания. При появлении нескольких запросов прерывания первым воспринимается запрос, поступивший на вход с меньшим номером. В этом случае приоритет является жестко фиксированным. Изменить приоритетные соотношения можно лишь пересоединением линий сигналов запросов на входах системы прерывания.
Идентификация прерывающего устройства.
Когда в ЭВМ имеется несколько периферийных устройств, работающих в режиме прерываний, сигналы их запросов на обслуживание объединяются по схеме ИЛИ и подаются на вход INT процессора. Следовательно, при наличии активного сигнала INT= 1 без дополнительных действий и аппаратных средств невозможно определить, какое устройство должен обслуживать процессор, тем более, что запросы на обслуживание могут формироваться одновременно несколькими устройствами. Другими словами, возникает проблема идентификации прерывающего устройства, т. е. однозначного перехода к определенной подпрограмме обслуживания. Разработано несколько способов решения этой проблемы, различающихся скоростью реакции процессора и объемом дополнительных аппаратных средств. При реализации любого способа необходимо назначить устройствам определенные приоритеты и учитывать их таким образом, чтобы процессор, реагируя на сигнал прерывания, выбирал для обслуживания запрашивающее устройство с максимальным приоритетом.
Программный полинг.
Простейшее решение проблемы идентификации, почти не требующее дополнительных аппаратных средств, заключается в программном опросе (по-линге) флажков готовности (т. е. сигналов прерываний) периферийных устройств. Реагируя на прерывание, процессор переходит к подпрограмме полинга, находящейся в фиксированной области памяти с известным начальным адресом. Этот начальный адрес загружается в программный счетчик после запоминания его предшествующего содержимого в стеке.
На рис. 6.4 приведен типичный вариант программного полинга.
Рис. 6.4 Программный полинг
Первым проверяется флажок готовности устройства У1 с наибольшим приоритетом. Если оно не запрашивало обслуживания, опрашивается следующее устройство и т. д. Когда встречается первое устройство, готовое к операциям ВВ, управление передается подпрограмме обслуживания этого устройства, которая определяет необходимые операции ВВ. По завершении обслуживания в полинге может быть запрограммировано одно из следующих действий:
1. Управление возвращается в основную программу без проверки готовности остальных устройств. Здесь гарантируется обязательная проверка в каждом цикле полинга устройств с высоким приоритетом, так как обслуживание их блокирует обслуживание устройств с меньшими приоритетами.
2. Управление возвращается к программе полинга, т. е. в точку проверки прерывания следующего устройства (на рис. 6.4 показано штриховыми линиями). Этот способ гарантирует проверку в каждом цикле полинга всех устройств.
Конкретная реализация полинга зависит от особенностей системы команд процессора и конфигурации аппаратных средств. Например, для ускорения полинга сигналы прерываний всех устройств подключаются к специальному регистру. Полинг реализуется посредством ввода в процессор содержимого этого регистра и анализа состояний отдельных бит с помощью команд сдвига или маскирования. Последовательность анализа определяется приоритетами устройств, и при обнаружении первого установленного бита осуществляется переход к соответствующей подпрограмме обслуживания
Удобно реализовать программный полинг с помощью команды условного пропуска. При ее выполнении адресуется регистр управления и состояния определенного устройства, проверяется состояние флажка готовности и, если флажок установлен, выполняется следующая по порядку команда перехода к подпрограмме обслуживания адресованного устройства. Если же флажок сброшен, следующая команда пропускается и аналогичным образом проверяется запрос прерывания очередного устройства.
Недостаток программного полинга заключается в необходимости проверки всех устройств, даже тех из них, которые не требуют обслуживания. Каждая проверка представляет собой последовательность команд, которые должен выполнять процессор. При увеличении числа устройств быстро увеличивается и число команд, что приводит к непроизводительным потерям времени процессора и замедлению его реакции на запросы устройств. В результате полинг вводит значительную задержку между моментом, когда устройство сигнализирует о своей готовности к операциям ВВ, и моментом собственно передачи данных.
Основное достоинство программного полинга, как уже отмечалось, заключается в простоте его реализации, почти не требующей дополнительных аппаратных средств.
Аппаратный полинг.
В аппаратном полинге (синонимы: дейзи-цепь, приоритетная цепочка, гирляндное или каскадное включение устройств) процессор и все периферийные устройства соединяются таким образом, что процессор может осуществить автоматический опрос с целью идентификации прерывающего устройства (рис. 6.5).
Когда процессор реагирует на запрос прерывания, он формирует сигнал подтверждения прерывания INT ACK на линии, которая последовательно проходит через все устройства. При прохождении сигнала по цепочке проверяется состояние флажков готовности устройств. Если устройство не формирует прерывания, сигнал INT ACK проходит в следующее устройство, пока не встретится прерывающее (активное) устройство. Оно блокирует дальнейшее распространение сигнала INT ACK по цепочке. Таким образом, здесь приоритеты устройств определяются их физической близостью к процессору по линии INT ACK.
Рис. 6.5 Схема аппаратного полинга
Затем активное устройство передает по шине данных свой адрес (идентификатор или вектор) вместе со стробирующим (синхронизирующим) импульсом STROBE. Последний информирует процессор о нахождении на шине данных адреса устройства с наибольшим приоритетом, запрашивающего обслуживания. Этот адрес имеет однозначное соответствие с начальным адресом подпрограммы обслуживания прерывания данного устройства, в простейшем случае равен начальному адресу. Иногда возвращаемый адрес представляет собой индекс, прибавляемый к содержимому базового регистра процессора.
Адрес, возвращаемый прерывающим устройством, обычно встраивается в интерфейсную плату, и его с помощью перемычек или переключателей может изменять пользователь. Приоритет устройства определяется размещением его интерфейсной платы в разъеме, занимающем фиксированное положение в схеме.
При наличии нескольких одновременных запросов прерываний аппаратный полинг обеспечивает быструю идентификацию устройства с наибольшим приоритетом. По линии прерывания к процессору можно подключить больше периферийных устройств. Основной недостаток этого способа связан с задержкой распространения сигнала INT ACK в цепочке. Однако общее время идентификации прерывающего устройства оказывается намного меньше, чем в программном полинге, поэтому аппаратный полинг в мини- и микро-ЭВМ распространен довольно широко.