Организация возврата к прерванной программе
Для осуществления возврата к прерванной программе необходимо полностью восстановить ее начальное состояние. Информацию, которую следует сохранять при прерывании программы, можно разделить на основную (которая запоминается всегда) и дополнительную (необходимость запоминания которой зависит от содержания прерывающей программы).
В основную информацию можно включить:
*
содержимое счетчика адреса команд, т. е. адрес первой невыполненной команды прерванной программы;
* триггер состояния системы: "рабочее" или состояние "ожидания";
* маска прерывания, устанавливаемая каждой новой программой;
* код прерывания – двоичное число, отдельное для каждого уровня, объединяющего прерывание от нескольких источников, по которому прерывающая программа опознает конкретный источник прерывания.
Так как код прерывания обычно находится в общем для всех уровней регистре, то, если предыдущий код полностью себя не исчерпал (а это почти всегда так), с приходом новой прерывающей программы его надо запомнать.
Указанная информация образует так называемое "слово состояния программы" (ССП) (иногда его называют вектором состояния программы), которое хранится в некотором поле памяти компьютера. В момент прерывания старое ССП, относящееся к прерванной программе, заменяется ССП прерывающей программы, а в конце прерывания старое ССП восстанавливается прерывающей программой. Для ускорения процесса замены ССП эту процедуру выполняют обычно аппаратным путем.
Замечание. В период сохранения и восстановления ССП прерывания любого уровня запрещены.
К дополнительной информации относят содержимое:
* арифметических регистров;
* индексных регистров;
* прочих программно-доступных регистров, общих для всех программ, и т. п.
Сохранение дополнительной информации увеличивает время обслуживания. Поэтому программисту надо тщательно продумать, что из дополнительной информации следует запоминать в каждом конкретном случае. Более того, момент прерывания следует выбирать так (если это возможно), чтобы дополнительной информации для сохранения было как можно меньше.