Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по ОС.doc
Скачиваний:
10
Добавлен:
22.11.2019
Размер:
205.31 Кб
Скачать

7. Лабораторная работа №6. Прерывания в ос ms-dos. Обработчики аппаратных прерываний. Механизм обработки прерываний

Цель работы: изучение аппаратных прерываний в ОС. Реализация обработчиков аппаратных прерываний. Методы вызова подпрограмм для обработки прерываний на языке Т. Паскаль.

Задание: разработать подпрограммы обработки прерываний. Написать обработчики прерываний клавиатуры и системного таймера. Обработчик прерываний клавиатуры должен завершить работу программы при нажатии на определённую последовательность клавиш, а обработчик системного таймера каждую секунду должен издавать звуковой сигнал.

Общие теоретические сведения

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

Исключения в отличие от прерываний вызываются не внешней, а внутренней по отношению к выполняющейся программе причиной. Таких причин может быть очень много: деление на 0, попытка исполнения несуществующей машинной инструкции, нарушение в системе защиты (пользовательский процесс пытается обратиться к памяти отведённой под привилегированный процесс), нарушение границ сегмента, обращение к отсутствующей странице памяти, выполнение привилегированной инструкции в пользовательском режиме и т.д.

Поскольку программа-обработчик, написанная в рамках данной лабораторной работы, заменяет обработчик уже установленный в системе, то необходимо предусмотреть возможность вызова стандартного обработчика из пользовательского обработчика с тем, чтобы не нарушить ход выполнения обработчиков и не «потерять» те действия, которые выполнял стандартный обработчик. Для этого обычно используют метод получения адреса обработчика в переменную типа procedure с помощью процедуры GetIntVec и дальнейшее обращение к этой переменной.

Процедура Keep языка Т.Паскаль позволяет завершить программу, не выгрузив её из памяти.

Программист в процедурах обработки прерываний не может вводить циклы, приводящие к приостановке выполнения программы. С учётом частоты, с которой происходит прерывание, это может привести к значительным временным затратам. Например, нельзя использовать такие процедуры как readkey. Выходом из таких ситуаций служит замена процедур на аналогичные с предварительной проверкой на наличие скан-кода нажатой клавиши. В процедурах обработки прерываний обычно используют значение с порта клавиатуры: x:=port[$60].

Выгрузка программы из памяти происходит при помощи функции 49Н (освобождение памяти), но для этого предварительно необходимо получить адрес самой программы использую функцию 62H - получение адреса PSP (префикса программного сегмента).

Функция 62H: Дать адрес PSP (DOS 3.0+)

Входные параметры:

  • Регистр AH - 62H.

Выходные параметры:

  • Регистр BX - сегментный адрес PSP выполняющейся программы.

Описание:

Эта функция возвращает в регистр BX адрес PSP текущей программы. Используется, чтобы получить адрес параметров командной строки, адрес окружения DOS и другой полезной информации, содержащейся в PSP .