Прерывание
Прерывание (англ. interrupt) в сигнал, сообщающий процессору о наступлении какого-либо события. При этом выполнение текущей последовательности команд приостанавливается и управление передаётся обработчику прерывания, который реагирует на событие и обслуживает его, после чего возвращает управление в прерванный код.[1]
В зависимости от источника возникновения сигнала прерывания делятся на:
- асинхронные или внешние (аппаратные) в события, которые исходят от внешних источников (например, периферийных устройств) и могут произойти в любой произвольный момент: сигнал от таймера, сетевой карты или дискового накопителя, нажатие клавиш клавиатуры, движение мыши. Факт возникновения в системе такого прерывания трактуется как запрос на прерывание (англ. Interrupt request, IRQ);
- синхронные или внутренние в события в самом процессоре как результат нарушения каких-то условий при исполнении машинного кода: деление на ноль или переполнение, обращение к недопустимым адресам или недопустимый код операции;
- программные (частный случай внутреннего прерывания) в инициируются исполнением специальной инструкции в коде программы. Программные прерывания как правило используются для обращения к функциям встроенного программного обеспечения (firmware), драйверов и операционной системы.
Термин «ловушка» (англ. trap) иногда используется как синоним термина «прерывание» или «внутреннее прерывание». Как правило, словоупотребление устанавливается в документации производителя конкретной архитектуры процессора.
Содержание |
[править] Маскирование
В зависимости от возможности запрета внешние прерывания делятся на:
- маскируемые в прерывания, которые можно запрещать установкой соответствующих битов в регистре маскирования прерываний (в x86-процессорах в сбросом флага IF в регистре флагов);
- немаскируемые (англ. Non maskable interrupt, NMI) в обрабатываются всегда, независимо от запретов на другие прерывания. К примеру, такое прерывание может быть вызвано сбоем в микросхеме памяти.
Обработчики прерываний обычно пишутся таким образом, чтобы время их обработки было как можно меньшим, поскольку во время их работы могут не обрабатываться другие прерывания, а если их будет много (особенно от одного источника), то они могут теряться.
[править] Приоритизация
До окончания обработки прерывания обычно устанавливается запрет на обработку этого типа прерывания, чтобы процессор не входил в цикл обработки одного прерывания. Приоритизация означает, что все источники прерываний делятся на классы и каждому классу назначается свой уровень приоритета запроса на прерывание. Приоритеты могут обслуживаться как относительные и абсолютные.
- Относительное обслуживание прерываний означает, что если во время обработки прерывания поступает более приоритетное прерывание, то это прерывание будет обработано только после завершения текущей процедуры обработки прерывания.
- Абсолютное обслуживание прерываний означает, что если во время обработки прерывания поступает более приоритетное прерывание, то текущая процедура обработки прерывания вытесняется, и процессор начинает выполнять обработку вновь поступившего более приоритетного прерывания. После завершения этой процедуры процессор возвращается к выполнению вытесненной процедуры обработки прерывания.
[править] Таблица прерываний
Вектор прерывания в закреплённый за устройством номер, который идентифицирует соответствующий обработчик прерываний. Векторы прерываний объединяются в таблицу векторов прерываний, содержащую адреса обработчиков прерываний. Местоположение таблицы зависит от типа и режима работы процессора.
[править] Программное прерывание
Программное прерывание в синхронное прерывание, которое может осуществить программа с помощью специальной инструкции.
В процессорах архитектуры x86 для явного вызова синхронного прерывания имеется инструкция Int, аргументом которой является номер прерывания (от 0 до 255). В IBM PC-совместимых компьютерах обработку некоторых прерываний осуществляют подпрограммы BIOS, хранящиеся в ПЗУ, и это служит интерфейсом для доступа к сервису, предоставляемому BIOS. Также, обслуживание прерываний могут взять на себя BIOS карт расширений (например, сетевых или видеокарт), операционная система и даже обычные (прикладные) программы, которые постоянно находятся в памяти во время работы других программ (т. н. резидентные программы). В отличие от реального режима, в защищённом режиме x86-процессоров обычные программы не могут обслуживать прерывания, эта функция доступна только системному коду (операционной системе).
MS-DOS использует для взаимодействия со своими модулями и прикладными программами прерывания с номерами от 20h до 3Fh (числа даны в шестнадцатеричной системе счисления, как это принято при программировании на языке ассемблера x86). Например, доступ к основному множеству функций MS-DOS осуществляется исполнением инструкции Int 21h (при этом номер функции и её аргументы передаются в регистрах). Это распределение номеров прерываний не закреплено аппаратно и другие программы могут устанавливать свои обработчики прерываний вместо или поверх уже имеющихся обработчиков, установленных MS-DOS или другими программами, что, как правило, используется для изменения функциональности или расширения списка системных функций. Также, этой возможностью пользуются вирусы.
[править] См. также
- Событие (объектно-ориентированное программирование)
- Int3
- Message Signaled Interrupts
- Контроллер прерываний
- APIC
- Ralf Brownв™s Interrupt List (англ.)
[править] Примечания
- в‘ Погорелый С. Д., Слободанюк Т. Ф. Глава 2. Язык ассемблера для шестнадцатиразрядного микропроцессора К1810ВМ86. Подпрограммы обработки прерываний // Программное обеспечение микропроцессорных систем: Справочник. в К.: Тэхника, 1989. в С. 56. в 301 с. в ISBN 5-335-00169-0
[править] Литература
- Intel 64 and IA-32 Architectures Software Developerв™s Manual (в пяти томах):
| Это заготовка статьи о компьютерах. Вы можете помочь проекту, исправив и дополнив её. Это примечание по возможности следует заменить более точным. |
Для улучшения этой статьи желательно?:
|
| Операционные системы (история) | |
|---|---|
| Ядро | |
| Управление процессами |
|
| впамятью | |
| Прочее | |
| Микроконтроллеры | ||||||||
|---|---|---|---|---|---|---|---|---|
| Архитектура |
|
|||||||
| Производители | Analog Devices Atmel Silabs Freescale Fujitsu Holtek Hynix Infineon Intel Microchip Maxim Parallax NXP Semiconductors Renesas Texas Instruments Toshiba Ubicom Zilog Cypress | |||||||
| Компоненты | Регистр Процессор SRAM EEPROM Флеш-память Кварцевый резонатор Кварцевый генератор RC-генератор Корпус | |||||||
| Периферия | Таймер АЦП ЦАП Компаратор ШИМ-контроллер Счётчик LCD Датчик температуры Watchdog Timer | |||||||
| Интерфейсы | CAN UART USB SPI I²C Ethernet 1-Wire | |||||||
| ОС | FreeRTOS μClinux BeRTOS ChibiOS/RT eCos RTEMS Unison MicroC/OS-II Nucleus | |||||||
| Программирование | JTAG C2 Программатор Ассемблер Прерывание MPLAB AVR Studio MCStudio | |||||||