Алгоритм обработки прерываний

Механизм обработки прерываний независимо от архитектуры вычислительной системы подразумевает выполнение некоторой последовательности шагов.

1. Установление факта прерывания (приём сигнала запроса на прерывание) и идентификация прерывания.

2. Запоминание состояния прерванного процесса вычислений. Состояние процесса выполнения программы определяется, прежде всего, значением счетчика команд (адресом следующей команды), содержимым регистров процессора, и может включать также спецификацию режима (например, режим пользовательский или привилегированный) и другую информацию.

3. Управление аппаратно передается на подпрограмму обработки прерывания.

4. Сохранение информации о прерванной программе, которую не удалось спасти на шаге 2 с помощью аппаратуры. В некоторых процессорах предусматривается запоминание довольно большого объема информации о состоянии прерванных вычислений.

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

6. Восстановление информации, относящейся к прерванному процессу (этап, обратный шагу 4).

7. Возврат на прерванную программу.

Шаги 1-3 реализуются аппаратно, шаги 4-7 – программно.

 

Принципы написания обработчика прерывания

По способу организации программы-обработчики прерываний можно классифицировать как два альтернативных типа: замещающие и перехватывающие векторы прерываний.

К замещающим обработчикам, например, относится обработчик INT 23 (Control/Break), который предполагает замену существующего вектора без его сохранения и восстановления.

По-иному реализуется механизм в обработчике, построенном по принципу перехвата вектора прерывания с последующим его возвратом, при этом обработчик сохраняет значение перехваченного оригинального вектора. Большинство макропрограмм клавиатуры относятся к этому типу обработчиков. Они не замещают вектор прерывания INT 09, а перехватывают прерывание и затем уже "решают", будет ли использоваться оригинальный обработчик BIOS. В любом случае после выполнения процедуры обработки прерывания управление будет передано тому обработчику, чей вектор был перехвачен. Подавляющее большинство обработчиков строится именно по такому принципу.

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

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

Собственно процедура обработки прерывания - это сугубо индивидуальная задача, на которой почти не отражаются требования, налагаемые системой. Этого нельзя гарантировать в отношении остальных аспектов и компонент обработчика.

 

Фаза инициализации

Задача этой фазы - обеспечить корректную загрузку обработчика с точки зрения DOS и программ, находящихся в памяти одновременно с обработчиком, привязку обработчика к определенным векторам прерываний и инсталляцию его в качестве резидента. Загрузка обработчика осуществляется таким же образом, как и большинства программ, - при помощи системной функции 4Bh, но в процессе инсталляции резидента могут быть открыты файлы, которые будут закрыты самой операционной системой после выхода из процедуры инициализации. Выход из фазы инициализации заключается в освобождении той части памяти, которая не может быть освобождена операционной системой, и в вызове либо системной функции 31h, либо прерывания DOS INT 27.

Фаза активизации

Активизация обработки прерываний - это действия МП 80286/80386 по передаче управления программе обработки прерываний.

Таблица 7.31

Прерывания, вызванные
INTR NMI INT n
1. Получить номер вектора n из контроллера прерываний, выполнив два специальных цикла "Распознавание прерываний ". 2. Сохранить регистр флажков в стеке. 3. Сохранить CS в стеке. 4. Сохранить IP в стеке. 5. Сбросить IF. 6. Прочитать вектор прерываний n. Поместить селектор в CS и смещение в IP. 7. Начать выполнение команд во входной точке (CS:IP). 1. Сохранить регистр флажков в стеке. 2. Сохранить CS в стеке. 3. Сохранить IP в стеке. 4. Сбросить IF и запретить NMI. Прочитать вектор прерывания 2. Поместить селектор в CS и смещение в IP. 5. Начать выполнение команд во входной точке (CS:IP). 1. Сохранить регистр флажков в стеке. 2. Сохранить CS в стеке. 3. Сохранить IP в стеке. 4. Прочитать вектор прерывания n. Поместить селектор в CS и смещение в IP. 5. Начать выполнение команд во вход ной точке (CS:IP

Фаза обработки

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

 

Автоматное программирование. Диаграмма состояний и переходов цифрового автомата. Программная реализация ЦА, входных, постоянных и выходных действий состояния. Особенности применения автоматного подхода в системах управления

Автома́тное программи́рование — это парадигма программирования, при использовании которой программа или её фрагмент осмысливается как модель какого-либо формального автомата.

Теорию автоматов преподают не везде. В технических ВУЗах преподают эту теорию применительно к синтезу цифровой аппаратуры, но не применительно к программированию (Такие выводы сделаны моим коллегой Шалыто А. А. для ведущих Питерских ВУЗов).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: