Cтраница 2
После выполнения прерывающей программы происходит возврат к прерванной. Для этого прерывающую программу заключает команда Возврат из прерывания или, иначе, Загрузить ( восстановить) ССП. В ЭВМ общего назначения из ячейки ОП, в которой хранится ССП прерванной программы, извлекается и вновь становится текущим старое ССП. В мини - и микроЭВМ по этой команде старое ССП извлекается из магазинной памяти. [16]
Рассмотрим пример прерывающей программы. [17]
Для каждой прерывающей программы может быть установлена своя маска. Маски для всех программ обычно хранятся в памяти и засылаются в регистр маски, если соответствующая прерывающая программа вызывается к исполнению. При формировании маски состояние 1 получают лишь триггеры, соответствующие программам с более высоким, чем у данной программы, приоритетом. [18]
После исполнения прерывающей программы должен быть осуществлен выход из нее. [19]
После исполнения прерывающей программы должен быть осуществлен выход яз нее. Если за это время в системе не появились запросы прерывания, соответствующие заявкам на выполнение иных более важных работ, то выход заключается в восстановлении состояния прерванной программы. Если управление запоминанием состояния и выходом возложено на саму прерывающую программу, то она должна состоять из трех частей: подготовительной и заключительной, обеспечивающих переключение программ, и собственно прерывающей программы, осуществляющей ту работу, которая была затребована запросом прерывания. [20]
Приоритет между прерывающими программами определяет, какие программы могут прервать данную программу и для каких это запрещено. Этот вид приоритета для многоуровневых систем с достаточной глубиной прерывания имеет гораздо большее значение, чем приоритет между запросами прерывания. Приоритет между запросами установлен таким образом, что предпочтение отдается запросу с меньшим номером. Предположим также, что приоритет между прерывающими программами, соответствующими указанным уровням, установлен в обратном порядке. [21]
После окончания выполнения прерывающей программы микропроцессор возвращается к выполнению основной программы с команды, на которой произошло прерывание. [22]
После окончания выполнения прерывающей программы возврат в основную программу происходит следующим образом. В процессе выполнения этой команды адрес команды основной программы, перед которой произошло прерывание, выбирается из стека и передается в регистр адреса, а увеличенное на единицу значение заносится в счетчик команд. [23]
![]() |
Прерывание при использовании ССП. [24] |
В конце выполнения прерывающей программы для перехода к прерванной программе старое ССП записывается в качестве текущего. [25]
Поскольку обмен информацией прерывающей программы с основной производится таким же способом, что и между разными прерывающими программами, возникает вопрос, существует ли разница между прерывающими программами и основной. Фактически разница между ними совершенно несущественна и заключается в уровне приоритета. Основная программа имеет наинизший приоритет и поэтому выполняется только тогда, когда не работает ни одна из прерывающих программ. Следовательно, можно допустить существование нескольких основных программ, связанных друг с другом через очередь сообщений. Для этих программ или процессов обработки данных могут использоваться одни и те же файлы данных и могут, как и в случае прерывающих программ, возбуждаться другие процессы обработки данных. Такой режим работы аналогичен работе системы с разделением времени и хорошо подходит для организации любой интерактивной программы. [26]
![]() |
Схема механизма прерывания. [27] |
По окончании работы прерывающей программы управление возвращается к команде А 1 основной прерванной программы путем переноса команды А 1 из РгАВ в СчК - Основная программа продолжается с команды А 1, следующей сразу же за той, на которой произошло прерывание. [28]
При входе в прерывающую программу аппаратура машины записывает старое ССП по адресу, определяемому текущим значением АЗП, которое затем увеличивается на единицу. После этого машина выбирает новое ССП в соответствии со значением базового адреса и номера уровня. В конце прерывающей программы выполняется команда, которая уменьшает АЗП на единицу и вызывает ССП по адресу из АЗП. Ячейки массива старых ССП не привязаны к уровням прерывания, и расположение в них информации определяется порядком следования запросов прерывания во времени. До сих пор для простоты предполагалось, что ССП занимает одну ячейку памяти. В реальных системах длины одной ячейки не хватает и ССП занимает несколько последовательных ячеек памяти. [29]
Процедура перехода к прерывающей программе и возврата из нее, реализуемая в ЕС ЭВМ, пояснена на рис. 9.17. Каждому классу прерывания отводятся в постоянно распределенной области памяти фиксированные ячейки ОП для хранения старого ССП и нового ССП. [30]