Контроллер прерываний
- 1 year ago
- 0
- 0
Прерывание — одна из базовых концепций вычислительной техники , которая заключается в том, что при наступлении какого-либо события происходит передача управления специальной процедуре, называемой обработчиком прерываний (ISR, англ. Interrupt Service Routine ) . В отличие от условных и безусловных переходов, прерывание может быть вызвано в любом месте программы, в том числе если выполнение программы приостановлено, и обусловлено обычно внешними по отношению к программе событиями. После выполнения необходимых действий, обработчик прерываний, как правило, возвращает управление прерванной программе .
Как правило, прерывания используются для работы с периферийными устройствами. К примеру, требуется направить запрос на загрузку данных с диска в память, и пока идёт загрузка — производить какие-либо другие операции, либо остановить выполнение до получения прерывания, а после окончания загрузки перейти к обработчику прерывания, который начнёт обработку поступивших данных . С помощью прерываний также может быть реализована многозадачность , отладка программ, эмуляция определённых устройств и т.д.
В зависимости от источника возникновения сигнала прерывания делятся на:
Термин «ловушка» ( англ. trap ) иногда используется как синоним термина «прерывание» или «внутреннее прерывание». Как правило, словоупотребление устанавливается в документации производителя конкретной архитектуры процессора.
Внешние прерывания, в зависимости от возможности запрета, делятся на:
Обработчики прерываний обычно пишутся таким образом, чтобы время их обработки было как можно меньшим, поскольку во время их работы не могут обрабатываться другие прерывания, а если их будет много (особенно от одного источника), то они могут теряться. В Windows для этого применяется механизм отложенного вызова процедур .
До окончания обработки прерывания обычно устанавливается запрет на обработку этого типа прерывания, чтобы процессор не входил в цикл обработки одного прерывания. Приоритизация означает, что все источники прерываний делятся на классы и каждому классу назначается свой уровень приоритета запроса на прерывание .
Вектор прерывания — закреплённый за устройством номер, который идентифицирует соответствующий обработчик прерываний. Векторы прерываний объединяются в таблицу векторов прерываний , содержащую адреса обработчиков прерываний . Местоположение таблицы зависит от типа и режима работы процессора.
Предполагается, что прерывание должно обеспечивать прозрачность — то есть за исключением данных, которые должны быть изменены исходя из назначения прерывания, после окончания обработки прерывания процессор должен быть возвращён в то же состояние, в котором он был в момент его вызова . В простейшем случае достаточно сохранить состояние всех регистров процессора в стек.
Программное прерывание — синхронное прерывание, которое может осуществить программа с помощью специальной инструкции.
В процессорах архитектуры
x86
для явного вызова синхронного прерывания имеется
инструкция
Int
, аргументом которой является номер прерывания (от 0 до 255). В
IBM PC-совместимых компьютерах
обработку некоторых прерываний осуществляют подпрограммы
BIOS
, хранящиеся в
ПЗУ
, и прерывание служит интерфейсом для доступа к сервису, предоставляемому BIOS. Также обслуживание прерываний могут взять на себя BIOS карт расширений (например,
сетевых
или
видеокарт
), операционная система и даже обычные (прикладные) программы, которые постоянно находятся в памяти во время работы других программ (т. н.
резидентные программы
). В отличие от
реального режима
, в
защищённом режиме
x86-процессоров обычные программы не могут обслуживать прерывания, эта функция доступна только системному коду (операционной системе).
MS-DOS
использует для взаимодействия со своими модулями и прикладными программами прерывания с номерами от 20h до 3Fh (числа даны в
шестнадцатеричной системе счисления
, как это принято при программировании на
языке ассемблера
x86). Например, доступ к основному множеству функций MS-DOS осуществляется исполнением инструкции
Int 21h
(при этом номер функции и её аргументы передаются в
регистрах
). Это распределение номеров прерываний не закреплено аппаратно и другие программы могут устанавливать свои обработчики прерываний вместо или поверх уже имеющихся обработчиков, установленных MS-DOS или другими программами, что, как правило, используется для изменения функциональности или расширения списка системных функций. Также этой возможностью пользуются
вирусы
.