Строительный блокнот Развитие полупроводниковой электроники цессов, совершаемых в системе по специальной микропрограмме. Еще короче! прерывание-это выполнение микропрограмм прерывания и рестарта. Казалось бы, мы разобрались с проблемой организации процессов ввода-вывода. На самом деле ничего подобного. Трудности только начинаются. Действительно, как быть, если, скажем, два или более устройств ввода-вывода одновременно подали запросы на прерывание? Или как быть, если выполнение внутренней программы в процессоре по тем или иным соображениям ие может быть прервано? Ответ на первый вопрос дает так называемая система приоритетов, а иа второй - способ маскирования. Сущность системы приоритетов состоит в том, что каждому из устройств ввода-вывода или, что то же самое, каждому иэ портов присваивается специальное целое число 1, 2, 3,... (обычно не более 8), называемое приоритетом. При одновременном поступлении нескольких запросов на прерывание обслуживается тот из них, который имеет старший приоритет. Если поступают два сигнала с одинаковым приоритетом, обслуживается любой из них. Что касается необслужениых сигналов, то в зависимости от конкретных условий они либо теряются (имеется в виду, что соответствующее внешнее устройство повторяет запрос иа прерывание до тех пор, пока оио не будет обслужено), либо запоминаются и ждут, когда будет обслужен сигнал со стар шим приоритетом. Интересная ситуация возникает тогда, когда запрос на прерывание е некоторым приоритетом поступает в момент выполнения программы ввода-вывода, которая в свою очередь была введена в действие по запросу на прерывание, но с низшим приоритетом. В этом случае выполняются те же действия по обслуживанию прерывания, которые выполнялись бы, если бы в момент поступления запроса иа прерывание выполнялась внутренняя программа. В частности, содержимое счетчиков адресов команд и общих регистров передается в стек. Подобная ситуация схематически показана на рис. 3.7. Запрос на лрерыванив а приоритетом п -5 5 I й Запрос прерывание Рис 3 7. Прерывание программы После выполнения программы, начатой на основании запроса на прерывание с более высоким приоритетом, производится возврат к выполнению программы, начатой на основании запроса о прерывании с более низким приоритетом, и лишь после окончания этой программы будет осуществлен возврат я Выполнению внутренней программы. Обычно самый высокий приоритет присваивается наименее быстродействующим устройствам. в облаетн памяти, иазваниой стеком млн магазжном, может храниться ие- колько комплектов данных, относящихся к нескольким программам. Теперь ие-но, зачем вообще понадобился магазин. Комплект данных, поступивший в него аервым (в ответ на самый первый запрос иа прерывание), автоматически извле ается из магазина последним, что а требуется по сути выполняемых действий. Что же делать, если некоторая программа не может быть прервана но тем или иным соображениям? Очень просто -ие прерывать ее. Для этого ис-пользуется особое состояние системы, называемое маскированием. Замаскиро-ааииое устройство ие чувствительно к запросам на прерывание. Эти запросы либо теряются, либо запоминаются н будут обслужены, когда система выйдет 3 состояния мастшроваиия. Замаскировать можно все без исключения запросы на прерывание или только запросы, имеюшле приори гет не выше заданного. В частности, при выполнении программы, начатой на основе запроса на прерывание с некоторым приоритетом, все запросы на прерывание, имеющие более низкий приоритет, маскируются автоматически. Это и есть дисциплина обслуживания прерывания. На рнс. 3.8 показана ехема устройства, реализующая некоторую дисциплину обслуживания преры ваиия. Запросы на прерываине поступают по восьми входам, обозначенным нь
Резиотр масок -о па -от -опг -о/77 -0/74 ~оП5--оПв--оП7 Рис, 3 8. Устройство обслуживания прерывания риеунке как ПО-П7, а запоминаются в регистре запросов на прерывание. Из этого регистра запросы поступают в дешифратор приоритета, который связан регистром масок. Если некоторый запрос обладает самым высоким среди остальных приоритетом и не является замаскированным, он передается в регистр обелуживания запросов на прерывание. Все только что перечисленные действия выполняются под управлением ев стороны специальных сигналов, вырабатываемых блоком управления. Как видно из рис. 3.8, связь описываемого устройства с другими устройствами системы 70 овушествляется через магистраль данных, для чего имеется специальный буфер, и через сигнальную магистраль. Имеется также внутренняя магистраль данных, объединяющая основные элементы устройства. Устройство в целом получило название программируемого контроллера прерываний (ли, как иногда говорят, системного контроллера. Программируемый контроллер прерываний - еще один полноправный член никропроцессорного семейства. Вся работа программируемого контроллера прерываний суть не что иное, как выполнение некоторой микропрограммы над дан-вымн, хранящимися в регистрах, и в этом смысле все его функции могут быть выполнены процессором. Иногда функции реализации дисциплины обслуживания прерываний возлагаются на программируемые адаптеры ввода-вывода. Однако в оотав многих микропроцессорных комплектов входят отдельные программируемые контроллеры прерываний. Констатируем с удовлетворением, что найден выход для третьей нз отмеченных трудностей. Теперь мы точно знаем, как организовать во времени apoiffioc обмена данными между микропроцессорной системой н внешней средой. Но невольно возникает вопрос: а не слишком ли широко разрастается микропроцессорное семейство? Действительно ли обслуживание прерываний еголь необходимо, что для этого надо иметь самостоятельное устройство или отдельный универсальный процессор? Восстановим логику рассуждений. Операции ввода-вывода совершаются ио программе. Программа ввода-вывода генерируется процессором. Поэтому на все время выполнения операции ввода-вывода процеесор следует освободить от выполнения каких-либо других работ, т. е. обслужить запрос на прерывание. Но, может быть, имеется и другая возможность? Например, генерировать программу ввода-вывода в каком-либо специальном устройстве нли приспособить для этого адаптер рвода-вывода? Устройства памяти, которые н без того достаточно сложны, можно научить общаться одновременно и с процессором, и внешними устройствами. Ну, а что касается одновременного поступления нескольких запросов на прерывание? Разве нельзя ваставить внешние устройства или их адаптеры каким-то образом договариваться между собой? Конечно, все это можно осуществить. Однако есть одно но . В случае магистральной структуры так или иначе и по адресной магистрали, н по магистрали данных в каждый момент времени может передаваться лишь одно слово. Значит, независимо от всей остальной конфигурации системы прерывание необходимо. Дисциплина обслуживания прерываний вместе со всем тем, что ее реализует и поддерживает, - это та цена, которую приходится платить ва магистральную структуру. Но магистральная структура - это возможность аолучення любой конфигурации системы, возможность наращивания системы любыми дополнительными устройствами, в том числе и такими, которые еще не вуществовали к моменту проектирования системы. Иными словами, магистральная структура - это универсальность. Иное дело, что сложность дисциплины обслуживания прерываний, вообще говоря, должна зависеть от сложности самой системы. Чем проще система, тем роще может быть дисциплина обслуживания прерываний, начиная с простейшей, беоприоритетной, и кончая системой со сложной иерархией приоритетов и сложной иерархией маскирования.
|