В процессе выполнения программ в компьютере могут возникнуть условия, требующие изменения хода обработки данных. Так, при нажатии клавиши или кнопки мыши, компьютеру необходимо приостановить текущие действия и переключиться на другие в ответ на поступивший запрос. При выполнении программы также может возникнуть ошибочная ситуация, например, деление на ноль. Поэтому для взаимодействия устройств и программ компьютера с центральным процессором, в IBM-совместимых компьютерах предусмотрена система прерываний (interrupts). Помимо обеспечения взаимодействия устройств и программ, система прерываний компьютера аппаратно поддерживает мультипрограммирование – выполнения одним процессором одновременно большого числа программ за счет прерывания выполнения текущей программы и передачи управления другой программе.
Прерывания в компьютере делятся на аппаратные (hardware interrupts) и программные (software interrupts).
К аппаратным прерываниям относятся как встроенные в процессор прерывания (например, при отключении электропитания), так и прерывания от устройств компьютера (клавиатуры, жесткого диска и т.д.).
|
|
С помощью программных прерываний в прикладных программах выполняются действия по вводу-выводу данных на устройства и управление работой программы.
В IBM-совместимых компьютерах управление аппаратными прерываниями от устройств и узлов компьютера осуществляется специальными микросхемами – контроллерами прерываний, встроенными в одну из микросхем на материнской плате.
Запрос на прерывание от устройства (например, при нажатии клавиши клавиатуры) поступает на регистр контроллера прерываний, состоящий из триггеров прерываний – по одному триггеру на каждый тип прерываний. При поступлении запроса на прерывание соответствующий триггер устанавливается в "1", фиксируя наличие запроса на прерывание данного типа. Регистр прерываний периодически опрашивается процессором (обычно перед завершением выполнения очередной команды) и, если запрос на прерывание есть, процессор переключается на программу обслуживания запроса от устройства.
Все запросы на прерывания могут быть «маскированы», то есть заблокированы программными средствами, кроме одного – прерывания, указывающего на аппаратные ошибки памяти. Это прерывание получило название немаскируемого.
Для каждого прерывания в операционной системе составляется своя процедура обработки прерывания. Поскольку при изменении версии операционной системы начальные адреса этих процедур могут меняться, вызов процедуры осуществляется не по ее адресу, а с помощью указания номера прерывания следующим образом: начальные адреса этих процедур при загрузке операционной системы записываются в самые первые ячейки памяти. Поскольку каждый адрес занимает 4 байта, общий объем этой области памяти, называемой вектором прерываний, составляет, таким образом, 1 Кбайт. По заданному номеру прерывания, определяющего индекс прерывания в векторе прерываний, определяется адрес соответствующей процедуры прерывания и происходит переход к выполнению этой процедуры.
|
|
Следует отметить, что любая процедура обработки прерываний, прежде чем начать непосредственно обработку прерываний, производит необходимые действия, обеспечивающие в дальнейшем возвращение к прерванной программе.
Запросы на прерывание поступают в блок прерываний в произвольные моменты времени, причем не только одновременно, но и в процессе выполнения обработки другого прерывания. Глубина прерывания – максимально возможное число прерываний, которые могут прерывать друг друга. Глубина возможных прерываний зависит от решаемых задач и определяется организацией очередности при реализации прерываний.
Очередность обработки запросов на прерывание (при наличии нескольких запросов на прерывания) устанавливается в соответствии с фиксированными приоритетами, присвоенными каждому типу прерываний.
Наибольший приоритет имеет немаскируемое прерывание NMI (Non-Maskable Interrupt), затем идет IRQ0 (Interrupt ReQuest 0), и т.д.
В первых IBM-совместимых компьютерах имелось всего 8 шин запросов на прерывания, затем был добавлен второй контроллер прерываний и количество шин увеличилось до 16.
Прерывания (в порядке убывания приоритета) и их описания приведены в таблице 1.3.1.
Табл. 1.3.1.Прерывания IBM-совместимых компьютеров
Прерывание | Описание |
NMI | (немаскируемое прерывание) |
IRQ0 | системные часы (счетчик 0 программируемого таймера) |
IRQ1 | клавиши клавиатуры |
IRQ2 | используется для подключения второго контроллер прерываний (шина IRQ8-IRQ15) |
IRQ8 | реальное время |
IRQ9 | свободен или сетевая карта |
IRQ10 | свободен |
IRQ11 | свободен или поддержка IRQ для управления PCI |
IRQ12 | свободен или порт мыши Bus Mouse |
IRQ13 | математический сопроцессор |
IRQ14 | первичный контроллер жестких дисков |
IRQ15 | вторичный контроллер жестких дисков |
IRQ3 | последовательный порт 2 (4) |
IRQ4 | последовательный порт 1 (3) |
IRQ5 | параллельный порт 2 или звуковая карта |
IRQ6 | контроллер гибких дисков |
IRQ7 | параллельный порт 1 |
При использовании шины ISA в случае, если какое-либо устройство отсутствует в данной конфигурации компьютера, его IRQ может использоваться другим устройством. Например, IRQ5 вместо отсутствующего в большинстве компьютеров второго параллельного порта часто используется звуковой картой. Настройка IRQ выполняется аппаратно или программно.
Шина PCI использует описываемую ниже технологию Plug&Play, поэтому для устройств, поддерживающих эту технологию, управление присвоением IRQ устройствам возлагается на операционную систему, что помогает избежать конфликтных ситуаций.