Пересылки по прерыванию
Система прерывания программ ЭВМ
Система прерывания программ обеспечивает оперативную реакцию вычислительной системы на широкий набор событий, происходящих в выполняемой программе, в технических средствах ВС и вне ее. Процесс прерывания начинается том случае, если процессор, получает специальный сигнал — запрос прерывания. Реакцией процессора могут быть приостановление выполнения текущей программы и переход к выполнению специальной программы, соответствующей типу запроса. После выполнения этой программы осуществляется возврат к прерванной программе.
Запросы прерывания вызываются внутренними причинами и внешними источниками.
Внутренние причины:
· сбой в аппаратуре, в том числе в системе электропитания;
· переполнение разрядной сетки при выполнении команды;
· нарушение правил адресации;
· попытка деления на 0.
Внешние источники:
· периферийные устройства, в том числе терминалы пользователя;
· аппаратура передачи данных от удаленных терминалов и других ЭВМ;
· датчики технологического процесса и т. п.
Специальные программы обработки прерывания могут входить как в стандартное общее программное обеспечение, так и создаваться конкретным пользователем. Очевидно, что большинство внутренних запросов прерывания должны обрабатываться стандартным образом. Совокупность специальных аппаратных средств и стандартных программ обработки прерываний составляют систему прерывания программ. К ее функциям относятся:
а) запоминание состояния прерываемой программы;
б) приоритетный выбор запроса для исполнения из поступивших запросов и организация перехода к соответствующей обрабатывающей программе;
в) восстановление состояния прерванной программы и возврат к ней;
г) программное изменение приоритетов запросов.
Ниже будут рассмотрены проблемы использования системы прерываний для организации системных пересылок, т. е. реакция на внешние запросы прерываний.
Последовательность действий в алгоритме пересылок по прерыванию может быть описана следующими шагами:
1. Периферийное устройство запрашивает прерывание, выставляя сигнал «Запрос» на соответствующий вход процессора.
2. Процессор завершает выполнение очередной команды текущей программы и, если он находится в состоянии «разрешения прерываний», проверяет наличие сигнала «Запрос». (В режиме «запрещения прерывания» проверка входа «Запрос» не производится). При обнаружении сигнала «Запрос» процессор переходит в состояние ожидания и выставляет на линию «Добро» (подтверждение прерывания) соответствующий уровень сигнала.
3. ПУ принимает сигнал «Добро» и выставляет на шину данных двоичный код, идентифицирующий данное устройство. Одновременно на линию «Готов» выставляется соответствующий сигнал.
4. Приняв сигнал «Готов», процессор снимает идентифицирующий ПУ код с шины данных и организует переход к программе обработки данного прерывания аналогично переходу к обычной подпрограмме (например, используя стек).
5. Первыми командами подпрограммы обработки прерывания должно быть обеспечено сохранение (в стеке) значений флагового регистра и регистров РОН, соответствующих моменту прерывания текущей программы. Далее в подпрограмме обработки прерывания производятся программно-управляемая пересылка данных (например, по асинхронному алгоритму) и, возможно, какие-либо преобразования.
6. Подпрограмма обработки прерывания заканчивается восстановлением содержимого всех внутренних регистров процессора и командой возврата из подпрограммы.
7. Возобновляется счет по прерванной программе.
Код, идентифицирующий выдавшее запрос прерывания ПУ, используется тем или иным способом (в зависимости от конструкции процессора) для определения начального адреса хранящейся в главной памяти программы обработки данного запроса — вектора прерывания. Кроме описанного выше «векторного» способа обработки запросов существуют и другие. Однако данный способ имеет в настоящее время наибольшее распространение.
Рисунок 1.4.1 – Схема обработки внешних прерываний