Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Основной цикл с прерываниями
Структуру метода основного цикла с прерываниями можно рассматривать как систему опроса с прерываниями. Как и в случае с чистой системой опроса, в этом методе используется понятие "основного цикла". Во время этого цикла может ничего не делаться, а может что-то выполняться, что будет прерываться так часто, как того требуют внешние устройства или часы (таймер). Как только возникает какое-либо событие, прерывание посылается в процессор. Отдельная стандартная программа обслуживания прерывания (ISR) связывается с каждым видом прерывания. Давайте вернемся к примеру упрощенной системы управления домашним хозяйством. В нашем примере прерывания разработаны так, что работа процессора прерывается, когда: 1. температура выходит за пределы диапазона от (ref__temp - delta) до (ref__temp + delta) 2. уровень дыма выходит за пределы безопасности. Процедуры adjust__temp и initiate_al arm представляют собой две программы ISR, соответствующие указанным двум видам прерываний . В общем случае прерывание не может быть связано с процедурой water_lawn, потому что эта процедура использует функцию прерывания "int 21h" операционной системы MS-DOS для определения времени суток. Поскольку программа операционной системы MS-DOS не является реентерабельной, программа ISR не может произвести другое прерывание в операционной системе MS-DOS. Поэтому процедура water_lawn не разрабатывается в виде программы ISR, но вызывается из главного программного цикла main_loop: forever: cal1 water_lawn ; call wait_loop ; для протекания некоторого времени ; до повторного вызова процедуры water_lawn jmp forever Стандартные программы обслуживания прерываний называются adjust_temp и initiate_al arm. Текст программы ISR такой же, что и для уже описанных процедур, со следующей разницей: 1. Программа ISR использует команду IRET вместо команды RET 2. Вы должны сохранять регистры, используемые программой 3. Прерывания должны разрешаться/запрещаться. Программа adjust_temp должна разрешать использование прерываний. В противном случае сигнал об обнаружении дыма может остаться нераспознанным, что неприемлемо. Аналогично, программа initiate_alarm должна запрещать управления, потому что она является процедурой наивысшего приоритета и не должна прерываться вплоть до возбуждения сигнала о пожаре. Указанные программы ISR должны быть связаны с соответствующими уровнями прерываний. Связь эта может быть реализована через функцию "Установить вектор прерываний" в операционной системе MS-DOS. Функция прерывания "int 21h" с кодом функции в AH=25h используется для этой цели. DS:DX указывает на программу ISR до выполнение запроса. mov ah,25h ; функция = установить вектор прерываний mov al , int_l eve! ; Уровень прерываний в AL mov dx,sadjust_temp mov ds,dx ; адрес программы ISR в DS:DX mov dx,offset adjust_temp int 21h ; обращение к операционной ; системе DOS Подобные запросы к функциям должны выполняться для других программ ISR в системе. Преимуществами этого подхода являются: . на опрос неактивных устройств не тратится время . на любое количество асинхронных внешних событий (если большинство устройств неактивны) поступает очень быстрый ответ . более простой текст программ, поскольку каждая программа ISR пишется независимо от других. Недостатками этого подхода являются: . сложное взаимодействие между программой ISR и главной программой . сложное протекание главной программы, что является следствием асинхронной природы возникновения событий.
Лекция 18 |
Последнее изменение этой страницы: 2019-04-21; Просмотров: 180; Нарушение авторского права страницы