Типы прерываний программы и организация их обработки. Часть 1.

Прерыванием называется событие, требующее от центрального процессора некоторых действий по обработке возникшей ситуации. Эти действия производятся программой-обработчиком, которая выполняется с «новым» РСП, отличным от РСП прерванной программы («старый» РСП). При прерывании процессор должен автоматически сменить состояние РСП и передать управление обработчику (т. е. загрузить счетчик команд R7 адресом входа обработчика), а «старое» РСП и адрес возврата сохранить. При выходе из прерывания необходимо их восстановление. Эта общая схема в ЭВМ семейства имеет следующие особенности.

  1. Для повышения скорости реакции системы произведено распараллеливание обработчиков внешних прерываний. Начальная область оперативной памяти отведена под векторы прерываний (пара «новый» РСП — адрес входа обработчика). Устройство, требующее прерывания, выставляет в Канал адрес вектора обработки этого прерывания. Таким образом, обработка каждого такого прерывания начинается сразу, в отличие от систем, в которых прерывания от внешних устройств сгруппированы, и некоторое время процессор разбирается, кто же конкретно запросил обработку, и лишь затем приступает к обработке. Примененное здесь векторное прерывание обеспечивает минимальную задержку в обработке прерываний.
  2. Сохранение «старого» РСП и адреса возврата производится не в ячейках памяти, резервированных за конкретными устройствами или типами прерываний, а в стеке с указателем в регистре R6. Стек естественным образом отвечает вложенной структуре прерываний: при возврате из прерывания не важно, кто его вызвал, важно лишь найти последнюю сохраненную пару РСП — адрес возврата. Эта пара будет находиться на вершине стека, так как ее последней туда «затолкнули».

Аппаратное сохранение и выталкивание из общего для всех типов прерываний стека обеспечивает глубокую вложенность прерываний, ограниченную только размером стека.

По отношению к выполняемой программе прерывания могут быть двух типов: синхронные и асинхронные (рис. 1.3). Синхронные прерывания (называемые также командными) вызываются непосредственно программой. Для ускорения обработки введено четыре типа командных прерываний со своими векторами обработки:


ЕМТ N — обращение к супервизору (N — число от 0 до 255, идентифицирующее требуемую от супервизора услугу);

TRAP N — обращение к пакету (N имеет тот же диапазон и назначение);

IOТ — обращение к вводу-выводу;

ВРТ — переход к программе отладки.

Типы прерываний

Синхронные прерывания подобны обращению к подпрограмме, но обеспечивают такие дополнительные удобства:

  • автоматическую смену содержимого РСП; при этом может измениться приоритет процессора по отношению к внешним устройствам; произойдет смена режима и соответственно область доступных физических адресов при том же виртуальном адресном пространстве и область стека в ЭВМ «Электроника 100-25» и «Электроника 79»; может произойти смена набора регистров;
  • обеспечение независимости расположения программы, выдающей команды прерывания, и программы-обработчика прерываний; это позволяет не компоновать программу-обработчик с основной программой и производить замену каждой из них без связывания программ.

Асинхронные прерывания вызываются событиями, не связанными с выполнением программы в момент прерывания: окончанием (или ошибкой) операции ввода-вывода, истечением интервала времени (прерывание от таймера), каким-либо событием на управляемом технологическом объекте, обнаружением ошибки схемами контроля памяти и т. д. По отношению к ЭВМ (ее центральной части) асинхронные прерывания делятся на внешние и внутренние. Внутренние связаны с нарушением нормального выполнения программы из-за ошибок в программе: ошибка нечетного адреса, резервная команда, запрещенная команда, ошибка стека — и (или) из-за сбоев в аппаратуре: ошибка диспетчера памяти, ошибка процессора плавающей точки, ошибка тайм-аута (несуществующий адрес), нарушение питания, ошибка паритета памяти.

Ошибка нечетного адреса возникает, если в команде, работающей со словами, вырабатывается нечетный адрес (адрес байта). Прерывания по резервной команде происходят при программных ошибках типа передачи управления в область констант или данных. Этот же тип прерывания позволяет эмулировать на ЭВМ младших моделей команды, выполняемые только на старших моделях семейства. Таким образом, можно добиться совместимости сверху вниз (в определенных пределах) на уровне машинных команд.

Контроль переполнения стека (на который указывает регистр R6) реализован в ЭВМ «Электроника 100-25», «Электроника 79» и «Электроника 60-1», Для этого введен регистр границы стека, имеющий в Канале фиксированный адрес. При попадании вершины стека (т. е. адреса в R6) в зону ниже границы (32 байта) возникает прерывание «желтая зона стека», при этом происходят обычные аппаратные действия (запоминание в стеке и т. д.). Если же вершина стека пересекает границу, возникает прерывание «красная граница стека». Так как стек переполнен, номер РСП и адрес возврата запоминаются в фиксированных ячейках памяти (0 и 2) и ошибка считается восстановимой.

Ошибка «запрещенная команда» возникает, если в программе, работающей в режиме пользователя («Электроника 100-25») или в режимах пользователя и супервизора («Электроника 79»), встретилась команда HALT.

Прерывание по тайм-ауту возникает, если в программе выработан не существующий в системе адрес или при обращении к регистру неисправного интерфейса. Тайм-аут равен 10 мкс; если в этот промежуток времени Канал не ответил, адрес считается несуществующим (недействующим).