Cистема прерываний и обрабатывающие программы
Система прерывания – это совокупность аппаратных и программных средств, которые при наличии запросов на прерывания обеспечивают прекращение выполнения текущей программы, запуск обрабатывающей программы, которая совершает действия, соответствующие запросу и возврат к прерванной программе. Запросы на прерывание могут быть внутренними или внешними. К внутренним прерываниям приводят события, которые отслеживаются аппаратурой процессора, например, деления на ноль, переполнение разрядной сетки, аварийные сигналы от схем контроля и т. д. К внешним прерываниям можно отнести запросы на обслуживание периферийных устройств (ПУ), сигналы от других процессоров или ЭВМ.

Процесс прерывания работы процессора сигналами запроса внешних устройств устраняет необходимость выполнения процессором неэффективных операций по проверке их готовности к обмену, снижает затраты времени на ожидание их готовности и обеспечивает параллельную работу. Реализация механизма прерываний имеет особое значение в случае обмена данными с большим числом асинхронно работающих внешних устройств. Практически все современные системы преравания являются многоуровневыми и приоритетными. Система приоритетных прерываний, характеризуется количеством уровней приоритетов. В большинстве микропроцессоров приняты запросы прерывания двух уровней приоритетов: немаскируемые и маскируемые.
Немаскируемые запросы на прерывание - такие прерывания, которые реализованы аппаратно, вне программного контроля и не управляются программистом. Сигналы немаскируемых запросов на прерывания обычно поступают в микропроцессор по отдельной шине магистрали управления и имеют наивысший приоритет, т. е. исполняются ранее других запросов на прерывания. Обычно к немаскируемым запросам на прерывания относятся запросы на прерывания от таких важнейших для системы средств, как схемы питания и контроля правильности передач данных.
Для обслуживания ПУ используется маскируемое прерывание. Как правило, процессор имеет только один вход для обслуживания маскируемых прерываний. Для организации дополнительных уровней приоритетов служит специальное устройство, называемое программируемым контроллером прерываний (ПКП). ПКП имеет несколько входов, по которым поступают сигналы запросов на прерывания от ПУ. Каждый вход имеет определенный приоритет и соответствующий указатель адреса обрабатывающей программы, который устанавливается программно. При появлении сигнала запроса на прерывание на каком-либо входе ПКП, при отсутствии сигнала на более приоритетных входах, контролер выдает сигнал запроса прерывания процессору. Процессор на основании информации в регистре слова состояния о приоритете текущей программы, разрешает прерывание или ставит в очередь на обслуживание. При разрешении прерывания процессор сообщает об этом ПКП, а тот выдает информацию об адресе обрабатывающей программы.
Маскируемые запросы на прерывания управляются командами программы и имеют целью дать программисту возможность гибкого управления вычислительным процессом. Если программист организовал программный цикл ожидания и обмен с устройством, который не может быть прерван, то ему необходимо отключить механизм прерываний, т. е. замаскировать прерывание. Для этих целей в состав регистра состояния микропроцессора вводится специальный триггер разрешение запросов на прерывания, который сбрасывается и устанавливается программно, специальными командами процессора. Программист может вставлять их в программу везде, где это необходимо.
При организации системы прерывания необходимо обеспечить запоминание состояния прерываемой программы, осуществить перехода к обрабатывающей прерывание программе, восстановить состояние прерванной программы и возвратиться к ее выполнению без потери информации. Перечисленные требования определяют свойство системы прерывания, называемое прозрачностью. Программа обработки прерываний, обладающей таким свойством, называется прозрачной.
Для сохранения состояния прерываемой программы, которое представляет собой текущее содержимое регистров процессора, используется стек. Стек представляет собой совокупность ячеек памяти, которая адресуется с помощью специального регистра процессора, называемого указателем стека. При записи в стек слова адрес меняется в одну сторону (или уменьшается или увеличивается), а при чтении слова – в другую. Это означает, что стековая память работает по принципу “последним пришел - первым вышел”. В стеке реализуется неявная адресация, т. е. всегда запись или чтение данных происходит в “верхнюю” ячейку.
При получении сигналам запроса на прерывание, например от внешнего устройства, надо указать адреса программы обработки прерывания. Наиболее простой метод заключается в записи кода адреса памяти, где записана первая команда подпрограммы прерывания, в специальном регистре адреса прерывания. В этом случае блок управления микропроцессором автоматически считывает и передает в регистр счетчика команд код регистра адреса прерывания. Обратившись по этому адресу, микропроцессор считывает два байтовых числа или одно двухбайтовое число, которое является первой командой подпрограммы прерывания. Данный метод прямо указывает на место расположения подпрограммы прерывания. Начальный адрес программы, обрабатывающей прерывание принято называть вектором прерывания. Как правило для векторов прерывания в ОП отводится фиксированная область, называемая таблицей векторов прерывания. Таким образом, рассмотренный метод позволяет косвенной адресацией ячейки памяти определить вектор прерывания, а через него и подпрограмму прерывания.
Другой метод требует проведения асинхронного запроса со стороны микропроцессора к внешним устройствам для определения устройства, которое выставило сигнал запроса на прерывание. Информационный контроллер внешнего устройства, пославшего сигнал запроса на прерывание, в ответ на запрос микропроцессора выставляет код команды, который при исполнении блоков управления микропроцессора вызывает ветвление по одному из некоторого множества адресов. Следовательно, этот метод также практически прямо указывает на вектор прерывания, причем позволяет задать векторы прерываний многих подключенных внешних устройств. Для реализации он требует развития средств информационного контроллера. В сложных микропроцессорах используется специальный регистр, адресуемый программистом и называемый регистром вектора прерывания, с помощью которого можно также прямо задать векторы прерывания многих внешних устройств.
Например, в некоторых процессорах фирмы Intel, для того чтобы связать адрес программы обработки прерывания с номером прерывания, используется таблица векторов прерываний, занимающая первый килобайт оперативной памяти - адреса от 0000:0000 до 0000:03FF. Таблица состоит из 256 элементов - FAR-адресов обработчиков прерываний. Эти элементы является векторами прерываний. В первом слове элемента таблицы записано смещение, а во втором - адрес сегмента обработчика прерывания. Векторы прерывания, располагающиеся в определенной области памяти, должны быть заполнены до начала работы системы прерывания.
Cистема прерываний. Многоуровневость и приоритетность
При наличии нескольких источников прерывания возможна ситуации одновременного появления нескольких запросов. Поэтому должен быть установлен определенный порядок обслуживания поступающих запросов. Существует два подхода к организации обслуживания поступающих запросов. Первый подход заключается в запрете прерывания всех обрабатывающих программ, т. е. запросы обслуживаются в порядке поступления и программа обработки прерывания отрабатывает до конца, а поступившие за это время запросы ставятся в очередь. Т. е. обработка запросов производится строго по очереди.
Такой способ организации обслуживания практически не используется т. к. существуют прерывания, требующие немедленной обработки, например, прерывание, вызванное делением на ноль. Также внешние устройства имеют разную скорость обмена, и обслуживание запроса низкоскоростного устройства может привести к снижению скорости обмена или потере информации при ожидании обслуживании готового к обмену высокоскоростного устройства. Поэтому используется другой подход к организации обслуживания прерываний, который заключается в разрешении прерывания обрабатывающей программы и запуске другой обрабатывающей программой, которая в свою очередь может быть прервана следующей обрабатывающей программой и т. д. Такая система прерываний называется многоуровневой. Большинство процессоров имеют средства для обеспечения практически произвольного количества уровней прерываний. Это означает, что имеется возможность многократного прерывания программ обработки прерываний и образования очереди прерываний, т. е. вложенных прерываний, ведущих к появлению последовательностей вложенных подпрограмм.
Но многоуровневая система прерывания не учитывает “важность” прерывания, для нее все прерывания одинаковы. Поэтому между запросами должны быть установлены приоритетные соотношения, определяющие, какой из нескольких поступающих запросов подлежит обработке в первую очередь, и устанавливающих, имеет ли право поступивший запрос прервать текущую программу обработки.
Поэтому вводится понятие приоритета прерывания, которое заключается в том, что каждому прерыванию присваивается определенное значение приоритета. Обрабатывающая программа может быть прервана запросом на прерывание, только в том случае, если приоритет прерывания, которое обрабатывается ниже приоритета прерывания, запрос на которое поступил. В этом случае, обслуживание прерывания не будет приостановлено менее приоритетными прерываниями, а может быть приостановлено только запросом на более приоритетное прерывание. Такая система прерывания называется приоритетной. Система приоритетных прерываний, характеризуется количеством уровней приоритетов. В большинстве микропроцессоров приняты запросы прерывания двух уровней приоритетов: немаскируемые и маскируемые. Для увеличения количества уровней приоритета совместно с процессором используется специальное устройство - программируемый контроллер прерываний (ПКП).


