Подсистема прерываний


Прерывание — это временное прекращение вычислительного процесса, вызванное событиями, внешними по отношению к этому процессу.

Прерывание – это операция процессора, состоящая в регистрации предшествовавшего прерыванию состояния процессора и установлению нового состояния (ГОСТ).

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

Состояние процессора определяется содержимым этой памяти. В момент прерывания эту память мы должны где-то, сохранить, чтобы в момент восстановления прерванного процесса мы могли восстановить эту память и продолжить выполнение с того места, где был процесс остановлен. Современный процессор имеет внутреннюю память порядка 100 бит и больше. Для того чтобы эту память уменьшить, надо запретить прерывание процессора не в любой момент, а только в некие стандартные моменты, когда состояние большинства памяти процессора является стандартным. Если разрешить прерывание процессора после окончания исполнения текущей команды, то некоторая память процессора имеет стандартное значение (регистр микрокоманд либо счетчик микрокоманд) или значение которой в памяти потеряли свою актуальность (регистр команд). Т.е. мы фактически сократили объем сохраняемой памяти, обеспечив возникновение прерывания в момент смены команд процессора.

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

Для уменьшения объёма сохраняемых данных процессор прерывается не в любой момент, а в те моменты, у которых состояние части внутренней памяти предопределено. Чаще всего это происходит при окончании выполнения текущей команды, состояние управляющего блока можно исключить из текущего состояния.

Прерывание возможно только после полного завершения текущей команды.

Источники прерываний

Рис. 1. 53. Источники прерываний

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

Отказы – возникают до или во время выполнения команды до её завершения. После возникновения отказа возможно восстановить прерванное состояние процессора и повторить.

Ловушки – возникают после завершения выполнения команды и предназначены, например, для отладочных действий.

Авария – неисправность или некорректность работы схем процессора, которые не входят в его ядро, например, 3-й отказ является аварией.

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