Система прерываний программ в ПК
Важнейшая роль в реализации сложных режимов работы отводится системе прерывания программ.
Прерывание — это приостановление выполнения в процессоре программы с целью выполнения какой-то более важной или нужной в данный момент другой программы или процедуры, после завершения которой продолжается выполнение прерванной программы с момента ее прерывания. Прерывание позволяет компьютеру приостановить любое свое действие и временно переключиться на другое, как заранее запланированное, так и неожиданное, вызванное непредсказуемой ситуацией в работе машины или ее компонента. Каждое прерывание влечет за собой загрузку определенной программы, предназначенной для обработки возникшей ситуации — программы обработки прерывания.
Организация и управление прерываниями функционально во многом смыкается с управлением задачами — одной из базовых функций операционных систем. Основой для управления процессом одновременного решения нескольких задач (равно как и управления прерываниями) являются процедуры:
- выбора очередной задачи или определения приоритета задачи;
- сохранения информации о статусе задачи при ее прерывании (формирование слова состояния программы);
- упреждения и устранения конфликтов между задачами (координации и синхронизации выполнения задач).
Последовательность действий процессора при реализации прерывания такова. При появлении запроса на прерывание, запланированное заранее или неожиданное, процессор, как правило, после завершения выполнения текущей команды программы анализирует допустимость (разрешенность и приоритетность) данного вида прерывания. Если оно разрешено, процессор производит следующие действия:
- запоминает в стековой памяти текущее состояние прерываемой программы (состояние некоторых регистров МПП, в частности регистров FL,CS,IP, а в микропроцессорах МП80286 и выше — и слова состояния программы, хранящегося в другом регистре МПП);
- посылает источнику запроса на прерывание запрос о причине (коде) прерывания; ,
- анализирует код запрошенного прерывания (номер прерывания — Л^) и формирует адрес ячейки (AV,-хранящей вектор прерывания (вектор-адрес программы обработки прерывания) по формуле AV= 4*Ni (векторы прерываний занимают начальную 1024-байтовую область ОП с адресами ячеек от 00000 до 00400Н (шестнадцатеричный код) так, что адрес вектора вычисляется простым умножением номера прерывания на четыре, так как СS и 1Р занимают по 2 байта каждый);
- считывает из ОП и записывает в регистры МПП (в регистры FL,CS,IP и т. д.) вектор прерывания и его атрибуты;
- сбрасывает (устанавливает в 0) флаги прерывания (IF) и трассировки (ТР);
- выполняет программу обработки прерывания (которую иногда называют драйвером прерывания);
- после выполнения программы обработки прерывания возвращает из стековой памяти параметры прерванной программы в регистры МПП и восстанавливает процесс выполнения прерванной программы.
Видов (номеров) прерывания может быть всего 256, и, соответственно, векторов прерывания (адресов CS:IР программ обработки прерываний) в ОП насчитывается до 256. Классификация видов прерываний показана на рис. 1
Прикладные прерывания временно устанавливаются пользователем при многопрограммной работе МП для указания приоритета выполнения прикладных программ (при появлении необходимости выполнения более приоритетной программы текущая менее приоритетная программа прерывается).
Псевдопрерывания служат для запоминания важных фиксированных адресов, которые могут быть использованы в программах, в частности, при условных и безусловных передачах управления (запоминание адресов передачи управления как векторов прерывания возможно благодаря аналогии выполнения прерывания и обращения к процедурам).
Аппаратные прерывания инициируются при обращениях к МП со стороны внешних устройств (таймера, клавиатуры, дисководов, принтера и т. д.) с требованием уделить им внимание и выполнить совместно с ними те или иные процедуры. Прерывания от таймера, например, повторяются 18 раз в секунду, от клавиатуры — при каждом программно не запланированном нажатии некоторых клавиш и т. п. Аппаратные прерывания не координируются с работой программы и могут быть весьма разнообразны. Для их систематизации и определения очередности выполнения при одновременном возникновении нескольких из них обычно используется контроллер прерываний.
|
|
Рис.1. Классификация видов прерываний в МП
Программные прерывания — это обычные процедуры, которые вызывает текущая программа для выполнения предусмотренных в ней стандартных подпрограмм, чаще всего подпрограмм — служебных функций работы с внешними устройствами, то есть фактически программные прерывания ничего не прерывают. Программные прерывания делятся на две большие группы, вызывающие служебные функции:
- базовой системы ввода-вывода — прерывания ВЮ5;
- операционной системы — прерывания ВО5.
Программы обработки прерываний ВО5, в отличие от программ обработки прерываний В1О5, не встроены в ПЗУ и для разных операционных систем могут быть разными. К программным прерываниям можно отнести также прерывания при пошаговом исполнении программы, при работе с контрольным остановом и т. д.
Технические прерывания (или, иначе, прерывания от схем контроля) возникают при появлении отказов и сбоев в работе технических средств (аппаратуре) ПК. Большинство технических прерываний не маскируются, то есть они разрешаются всегда, а некоторые из них относятся к категории «аварийных» (например, отключение питания), и при их возникновении даже не запрашивается причина прерывания, а просто, по возможности, спасаются важные промежуточные результаты — записываются в безопасное место, в НЖМД, например.
Логические прерывания возникают при появлении ошибок в выполняемых программах (деление на 0, потеря точности мантиссы, нарушение защиты памяти и т. п.). Многие из логических прерываний также относятся к категории немаскируемых.
Прерывания обслуживаются базовой системой ввода-вывода — модулем расширения BIOS и модулем обработки прерываний DOS.