Предыдущий раздел | ПРЕРЫВАНИЯ И РЕЗИДЕНТНЫЕ ПРОГРАММЫ | Следующая глава |
Обычные прикладные программы присутствуют в ОП только во время своего выполнения. Когда это выполнение завершено (например, в результате системного вызова “int 21h”, функция 4Ch), вся занимавшаяся программой память освобождается и может быть распределена другой программе. Но если данная программа может потребоваться в дальнейшем для многократного обслуживания других прикладных программ и (или) для особой обработки каких-то событий, возникающих в ВС, то желательно сделать данную программу резидентной. Резидентная программа – программа, постоянно находящаяся в ОП. Например, резидентна основная часть ОС, называемая ядром.
Для того чтобы сделать свою программу резидентной, достаточно воспользоваться системным вызовом “int 27h”. Этот вызов завершает выполнение программы, оставив ее в памяти. Перед применением вызова программа должна поместить в регистр DX адрес-смещение для байта, расположенного непосредственно после резидентной программы.
Сразу же после своего создания резидентная программа занимает место в памяти, но ничего не делает (не выполняется на ЦП). Это продолжается до тех пор, пока программа не будет инициирована (запущена). Единственно возможным источником такого инициирования является поступление в ЦП сигнала прерывания. Поэтому резидентная программа обязательно является обработчиком прерываний.
Вспомним, что обязательным условием запускаемости обработчика прерываний является размещение его стартового адреса в векторе прерываний, номер которого совпадает с номером прерывания. Для такого размещения следует использовать системный вызов “int 21h” (функция 25h). Перед применением вызова программа должна поместить в регистр AL номер прерывания, а в регистры DS и DX соответственно адрес-сегмент и адрес-смещение для обработчика прерываний.
Выбор номера прерывания зависит от того, какую функцию будет выполнять обработчик прерываний. Если выполняемая им функция уже реализована в системе, то новый обработчик прерываний должен ориентироваться на уже используемый номер прерывания. Иначе – для новой функции необходимо использовать и новый номер прерывания. Вначале рассмотрим второй случай.
Предыдущий раздел | В начало | Следующая глава |