Таблица векторов прерываний: концепция и реализация
Interrupt vector table
Таблица векторов прерываний (IVT): структура данных, связывающая запросы прерываний с обработчиками. Реализация зависит от архитектуры процессора (Intel, ARM и др.).
Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Структура данных
общая концепция
Data structure
the general concept
Таблица векторов прерываний (IVT) — это структура данных, которая связывает список обработчиков прерываний со списком запросов прерываний в таблице векторов прерываний. Каждая запись в таблице векторов прерываний, называемая вектором прерывания, является адресом обработчика прерывания (также известного как ISR). Хотя эта концепция распространена во всех архитектурах процессоров, IVT могут быть реализованы различными способами, зависящими от конкретной архитектуры. Например, таблица диспетчеризации является одним из методов реализации таблицы векторов прерываний.
An interrupt vector table (IVT) is a data structure that associates a list of interrupt handlers with a list of interrupt requests in a table of interrupt vectors. Each entry of the interrupt vector table, called an interrupt vector, is the address of an interrupt handler (also known as ISR). While the concept is common across processor architectures, IVTs may be implemented in architecture specific fashions. For example, a dispatch table is one method of implementing an interrupt vector table.
Предыстория
Большинство процессоров имеют таблицу векторов прерываний, включая чипы от Intel, AMD, Infineon, Microchip Atmel, NXP, ARM и других производителей.
Most processors have an interrupt vector table, including chips from Intel, AMD, Infineon, Microchip Atmel, NXP, ARM etc.
"Предназначенный"
"Предварительно заданный" метод загружает счетчик команд (PC) непосредственно адресом некоторой записи внутри таблицы векторов прерываний. Сама таблица содержит исполняемый код. Хотя теоретически чрезвычайно короткий обработчик прерывания может быть полностью сохранен в таблице векторов прерываний, на практике код в каждой записи представляет собой единственную инструкцию перехода, которая перенаправляет управление в полноценную подпрограмму обработки прерывания (ISR) для данного прерывания. Intel 8080, Atmel AVR и все микроконтроллеры 8051 и Microchip используют предварительно заданный подход.
The "predefined" method loads the program counter (PC) directly with the address of some entry inside the interrupt vector table. The jump table itself contains executable code. While in principle an extremely short interrupt handler could be stored entirely inside the interrupt vector table, in practice the code at each entry is a single jump instruction that jumps to the full interrupt service routine (ISR) for that interrupt. The Intel 8080, Atmel AVR and all 8051 and Microchip microcontrollers use the predefined approach.
"Получить"
Метод "fetch" загружает программный счетчик (PC) косвенно, используя адрес определенной записи в таблице векторов прерываний для извлечения адреса из этой таблицы, а затем загружая программный счетчик этим адресом. Каждая запись в таблице векторов прерываний (IVT) содержит адрес подпрограммы обработки прерывания. Все микроконтроллеры Motorola/Freescale используют метод "fetch".
The "fetch" method loads the PC indirectly, using the address of some entry inside the interrupt vector table to pull an address out of that table, and then loading the PC with that address. Each and every entry of the IVT is the address of an interrupt service routine. All Motorola/Freescale microcontrollers use the fetch method.
"Прекращение подтверждения"
Для метода "признания прерывания" внешнее устройство предоставляет процессору номер обработчика прерывания. Метод признания прерывания используется в процессорах Intel Pentium и многих более ранних микропроцессорах. Когда процессор получает прерывание, он находит соответствующий обработчик в таблице векторов прерываний и передает ему управление.
For the "interrupt acknowledge" method, the external device gives the CPU an interrupt handler number. The interrupt acknowledge method is used by the Intel Pentium and many older microprocessors. When the CPU is affected by an interrupt, it looks up the interrupt handler in the interrupt vector table, and transfers control to it.