Система прерываний программ ЭВМ

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

Механизм прерываний поддерживается на аппаратном уровне и позволяет реализовать как эффективное взаимодействие программ с операционной системой, так и эффективное управление программой аппаратной частью компьютера. Каждое прерывание влечет за собой загрузку определенной программы, предназначенной для обработки возникшей ситуации – программы обработки прерывания.

В зависимости от источника, прерывания классифицируются следующим образом:

· Прикладные прерывания временно устанавливаются пользователем при микропрограммной работе процессора для указания приоритета выполнения прикладных программ.

· Псевдопрерывания служат для запоминания важных фиксированных адресов, которые могут быть использованы в программах, в частности, при условных и безусловных передачах управления (запоминание адресов передачи управления как векторов прерывания возможно благодаря аналогии выполнения прерывания и обращения к процедурам).

· Аппаратные прерывания инициируются при обращениях к процессору со стороны внешних устройств (таймера, клавиатуры, дисководов, принтера и т. д.) с требованием уделить им внимание и выполнить совместно с ними те или иные процедуры. Аппаратные прерывания не координируются с работой программы и могут быть весьма разнообразны. Для их систематизации и определения очередности выполнения при одновременном возникновении нескольких из них обычно используется контроллер прерываний.

· Программные прерывания – это обычные процедуры, которые вызывает текущая программа для выполнения предусмотренных в ней стандартных подпрограмм, чаще всего подпрограмм – служебных функций работы с внешними устройствами, то есть, фактически, программные прерывания ничего не прерывают. Они делятся на две большие группы, вызывающие служебные функции:

1. базовой системы ввода-вывода – прерывания BIOS;

2. операционной системы – прерывания DOS.

· Программы обработки прерываний DOS, в отличие от программ обработки прерываний BIOS, не встроены в ПЗУ и для разных операционных систем могут быть разными. К программным прерываниям можно отнести также прерывания при пошаговом исполнении программы, при работе с контрольным остановом и т. д.

· Технические прерывания (или, иначе, прерывания от схем контроля) возникают при появлении отказов и сбоев в работе технических средств (аппаратуре) ПК. Большинство технических прерываний не маскируются, то есть они разрешаются всегда, а некоторые из них относятся к категории «аварийных» (например, отключение питания), и при их возникновении даже не запрашивается причина прерывания, а просто по возможности спасаются важные промежуточные результаты – записываются в безопасное место, в НЖМД.

· Логические прерывания возникают при появлении ошибок в выполняемых программах (деление на 0, потеря точности мантиссы, нарушение защиты памяти и т. п.). Многие из логических прерываний также относятся к категории немаскируемых.

Прерывания, обслуживаемые BIOS, часто называют прерываниями нижнего уровня. К ним относят непланируемые техническими и логическими прерываниями, пользовательскими прикладными прерываниями, а также со многими планируемыми прерываниями, обслуживающими систему ввода – вывода. Использование прерываний BIOS позволяет более детально выполнять обращения к различным системным ресурсам ПК, к элементам информационных структур и их атрибутам

Прерывания DOS часто называют прерываниями верхнего уровня. Они более просты в использовании при программировании. Модуль обработки прерываний DOS обслуживает в большинстве планируемые прерывания, в том числе и прерывания системы ввода-вывода. Для приема внешних прерываний имеются порты двух типов: NMI (None Masked Interrupt) для приема немаскируемых прерываний и INTR (Interrupt) – для приема прочих прерываний (INTR обычно используется для подсоединения контроллера прерываний). Если запрос на прерывание поступает по входу NMI, то прерывание не маскируется (имеет абсолютный приоритет) и сразу выполняется; по входу INTR прерывание разрешается, если в регистре флагов МПП флаг IF-1.

Всего предусмотрено 256 типов (0-255) прерываний. Из них только первые пять жестко закреплены в процессоре, остальные используются системами BIOS и DOS:

Тип 0 – прерывание возникает при делении на 0 или, если частное от деления переполняет разрядную сетку процессора.

Тип 1 – в режиме «трассировка» (при TF = 1) после выполнения каждой команды программы происходит остановка.

Тип 2 – немаскируемое техническое прерывание.

Тип 3 – прерывание по команде INT, включенной в программу: остановка и отображение содержимого регистров процессора.

Тип 4 – прерывание по команде INTO, включенной в программу, но только, если при выполнении предыдущей команды произошло переполнение разрядной сетки.

Типы 8-15 – аппаратные прерывания, инициируемые внешними устройствами, поступают на входы IRQ0 - IRQ7 контроллера прерываний (вход IRQ0 имеет высший приоритет, и прерывание, поступившее по этому входу, обрабатывается первым; всего уровней приоритета 8 и вход IRQ7 имеет низший приоритет).

Типы 16-31 – планируемые программные прерывания BIOS.

Типы 32-255 – программные прерывания DOS (жестко задействовано около 10, а вообще в разных версиях DOS их разное количество).

Прерывания с 0 по 31 и прерывание 64 относятся к прерываниям нижнего уровня, обслуживаемым BIOS; прерывания, начиная с 32, являются прерываниями верхнего уровня (за исключением прерывания 64), причем прерывание 33 (21h) – это комплексное, чаще всего используемое в программах пользователя прерывание, имеющее около 10О разновидностей (служебных функций DOS).

В некоторых типах прерываний BIOS и DOS имеется много разновидностей. Так, прерывание 10 (Ah) включает в себя 15 разновидностей, прерывание 33 (21h) – около 100 разновидностей: в DOS 1.0 – 47, в DOS 2.0 – 3, в DOS 3.0 и выше – 99 разновидностей (вид действия в рамках каждого прерывания определяется содержимым регистра АН).