
- •1. Подготовка к выполнению лабораторных работ Цели и задачи лабораторного практикума
- •Программа и порядок выполнения лабораторных работ
- •Требования к оформлению отчёта о выполнении лабораторной работы
- •Общие теоретические сведения Файловый сервис операционной системы ms-dos
- •Системные регистры процессора
- •2. Лабораторная работа №1. Реализация низкоуровневых функций работы с файлами
- •Общие теоретические сведения
- •Контрольные вопросы к лабораторной работе
- •3. Лабораторная работа №2. Применение дескрипторно-ориентированных файловых функций
- •Общие теоретические сведения
- •Контрольные вопросы к лабораторной работе
- •4. Лабораторная работа №3. Реализация низкоуровневых функций работы с каталогами
- •Общие теоретические сведения
- •Контрольные вопросы к лабораторной работе
- •5. Лабораторная работа №4. Реализация низкоуровневых функций работы с памятью
- •Общие теоретические сведения
- •Контрольные вопросы к лабораторной работе
- •6. Лабораторная работа №5. Реализация низкоуровневых функций работы с системной датой и временем
- •Общие теоретические сведения
- •Контрольные вопросы к лабораторной работе
- •7. Лабораторная работа №6. Прерывания в ос ms-dos. Обработчики аппаратных прерываний. Механизм обработки прерываний
- •Общие теоретические сведения
- •Контрольные вопросы к лабораторной работе
- •Приложение №1. Коды ошибок для операций работы с файлами
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 .