Какая информация содержится в таблице векторов прерывания. Прерывания и особые ситуации: Типы прерываний

Таблица векторов Cortex начинается с нижней части адресного пространства. Однако таблица векторов начинается не с нулевого адреса. а с адреса 0x00000004, т. к. первые четыре байта используются для хранения начального адреса указателя стека. Таблица векторов исключительных ситуаций содержит адреса, которые загружаются в счетчик программы, когда микропроцессор переходит в исключительную ситуацию.

Каждый из векторов прерываний занимает 4 байта и указывает на начальный адрес каждой конкретной процедуры обработки прерывания. Первые 15 векторов - адреса обработки исключительных ситуаций, возникающих в ядре Cortex. К ним относятся вектор сброса, немаскируемое прерывание, управление авариями и ошибками, исключительные ситуации отладочной системы и прерывание таймера SysTick. Набор инструкций Thumb-2 также поддерживает инструкцию. выполнение которой приводит к генерации исключительной ситуации. Начиная с 16 вектора, следуют адреса обработки прерываний пользовательских У ВВ. Их назначение зависит от каждого конкретного производителя. В программе таблица векторов обычно приводится в отдельном файле и содержит адреса процедур обработки прерываний (рис. 1.7).

Рис. 1.7.

Например, если используется прерывание таймера SysTick, то объявление на Си процедуры обработки прерывания выполняется следующим образом (рис. 1.8).

Рис. 1.8.

Теперь, когда сконфигурирована таблица векторов и объявлена процедура обработки прерываний, мы можем настроить NV1C на обработку прерывания таймера SysTick. Обычно для этого выполняют две операции: задается приоритет прерывания, а затем разрешается источник прерывания. Регистры NVIC расположены в области системных ресурсов Cortex-МЗ, и доступ к ним возможен при работе микропроцессора только в привилегированном режиме.

Настройка внутренних исключительных ситуаций процессора выполняется с помощью регистров системного управления и системных приоритетов, а пользовательских УВВ - с помощью регистров IRQ. Прерывание SysTick является внутренней исключительной ситуацией процессора Cortex и поэтому управляется через системные регистры. Некоторые внутренние исключительные ситуации постоянно разрешены. К ним относятся прерывание по сбросу, немаскированное прерывание, а также прерывание таймера SysTick, поэтому никаких действий с NVIC по разрешению этого прерывания делать не нужно. Для настройки прерывания SysTick нам необходимо активизировать сам таймер и его прерывание с помощью соответствующего регистра управления.

Приоритет каждой внутренней исключительной ситуации Cortex можно задать в системных регистрах приоритета. У исключительных ситуаций Reset, NMI и hard fault он фиксированный. Этим гарантируется, что ядро всегда будет переходить к обработке известной исключительной ситуации. У всех остальных исключительных ситуаций имеется восьмибитное поле, которое расположено в трех системных регистрах приоритета. Микроконтроллеры STM32 используют только 16 уровней приоритета, поэтому у них активны только 4 бита этого поля. Однако важно запомнить, что приоритет устанавливается четырьмя старшими битами.

Каждое пользовательское УВВ управляется через блоки регистров IRQ. У каждого такого УВВ имеется бит разрешения прерывания. Все эти биты находятся в пределах двух 32-битных регистров установки разрешения прерываний. Для отключения источника прерывания предусмотрены отдельные регистры отмены разрешения прерываний. У NVIC также имеются регистры отправленных и активных прерываний, которые позволяют отследить состояние источника прерывания.

У каждого источника прерывания имеется бит разрешения, как в NVIC, так и в УВВ. У микроконтроллера STM32 используется 16 уровней приоритетов. Всего предусмотрено 16 регистров приоритета. Каждый из них разделен на четыре 8-битных поля для задания приоритета. Каждое поле связано с конкретным вектором прерывания. У микроконтроллера STM32 используется только половина такого поля, т. к. реализовано только 16 уровней приоритета. Однако необходимо помнить, что активные биты приоритета находятся в старшей тетраде поля. По умолчанию поле приоритета определяет 16 уровней приоритета, причем уровень 0 - высший приоритет, а 15 - низший. Поле приоритета также можно представить в виде групп и подгрупп приоритета. Это не добавляет дополнительных уровней приоритета, просто облегчает управление ими при необходимости задания в поле

PRIGROUP регистра прикладных прерываний и управления сбросом большого числа прерываний. Поле PRIGROUP разделяет уровни приоритетов на группы и подгруппы. Это необходимо для повышения программной абстракции при работе с большим числом прерываний. Трехбитное поле PRIGROUP управляет разделением 4-битных полей приоритета на группы и подгруппы. Например, запись в PRIGROUP числа 3 приведет к созданию двух групп с 4 уровнями приоритетов в каждой. После этого вы можете в программе выполнить определения высокоприоритетной и низкоприоритетной групп прерываний. В рамках каждой группы можно задавать подуровни, в т. ч. низкий, средний, высокий и очень высокий. Ранее уже говорилось, что это позволяет более абстрактно смотреть на структуру прерываний и помогает программисту управлять большим числом прерываний. Конфигурация прерываний УВВ очень похожа на конфигурацию внутренних исключительных ситуаций процессора Cortex.

  • 5.Организация микропроцессорной системы (мпс): магистрально-модульный принцип организации мпс, основные классы микропроцессорных средств. Микропроцессорная система (мпс)
  • 6. Типовые структуры мпс: магистральная, магистрально-каскадная, магистрально-радиальная.
  • 7.Шинная организация микропроцессорных систем: с одной шиной, с двумя видами шин, с тремя видами шин.
  • 8. Характеристики микропроцессоров.
  • 9. Организация магистрали микропроцессорной системы. Трехшинная магистраль с раздельными шинами передачи адреса и данных.
  • 10. Циклы обращения к магистрали.
  • 11. Организация обращения к магистрали с синхронным доступом.
  • 12. Организация обращения к магистрали с асинхронным доступом.
  • 13. Совмещение адресной шины и шины данных. Двухшинная магистраль с совмещенными шинами адреса/данных.
  • 14. Механизм пакетной передачи данных по системной магистрали.
  • 15. Архитектура подсистемы памяти микропроцессорной системы. Характеристики подсистемы памяти микропроцессорной системы
  • 16. Адресная память (запоминающие устройства с произвольным доступом).
  • 17. Ассоциативная память.
  • 18. Стековая память.
  • 19. Основная память: блочная, циклическая и блочно-циклическая схемы организации основной памяти.
  • 20. Кэш-память. Принципы кэширования памяти.
  • 21. Способы отображения основной памяти на кэш-память. Архитектуры кэш-памяти.
  • 22.Алгоритмы замещения информации в заполненной кэш-памяти.
  • 23.Алгоритмы согласования содержимого кэш-памяти и основной памяти.
  • 24.Концепция виртуальной памяти.
  • 25.Страничная организация виртуальной памяти.
  • 26.Сегментная организация виртуальной памяти. Комбинированная сегментно- страничная организация виртуальной памяти.
  • 27.Архитектура подсистемы ввода/вывода микропроцессорной системы.
  • 28.Организация прерываний в микропроцессорной системе.
  • 29.Радиальная система прерываний.
  • 30. Векторная система прерываний.
  • 31.Организация прямого доступа к памяти в микропроцессорной системе.
  • 32.Аккумуляторная архитектура микропроцессоров.
  • 33.Регистровая архитектура микропроцессоров.
  • 34. Архитектура микропроцессоров с выделенным доступом к памяти.
  • 35.Стековая архитектура микропроцессоров.
  • 36.Классификация команд микропроцессоров.
  • 37.Структура (форматы) команд микропроцессоров.
  • 38. Регистровые структуры микропроцессоров
  • 39. Адресация данных в микропроцессорах: представление адресной информации, способы адресации.
  • 40.Управление памятью в микропроцессорах: линейная и сегментная адресации, преобразование логических адресов в физические, управление виртуальной памятью.
  • 41.Защита памяти в микропроцессорах: механизмы защиты, концепция привилегий.
  • 42.Поддержка операционной системы в микропроцессорах.
  • 43.Специальные прерывания (особые случаи, исключения) в микропроцессорах.
  • 44.Мультипрограммный режим работы микропроцессоров.
  • 45.Структурная организация однокристальных микроконтроллеров (на примере 8- разрядных микроконтроллеров): модульный принцип построения, типы процессорных ядер.
  • 46.Резидентная (внутренняя) память микроконтроллеров.
  • 47.Периферийные устройства микроконтроллеров: параллельные порты ввода/вывода, таймеры и процессоры событий, интерфейсы последовательного ввода/вывода.
  • 48.Основы организации интерфейсов микропроцессорных систем.
  • 49.Классификация интерфейсов.
  • 50.Организация параллельной передачи данных.
  • 51.Организация последовательной передачи данных.
  • 52.Основы проектирования микропроцессорных систем: цикл проектирования мпс, средства разработки и отладки мпс.
  • 30. Векторная система прерываний.

    Повышение эффективности системы прерываний связано с передачей функции идентификации ПУ, запросившего обслуживания, внешним по отношению к процессору средствам. В векторной системе прерываний ПУ, запросившее обслуживание, само идентифицирует себя с помощью вектора прерывания , который принимается МП. В общем случаедля передачи вектора прерывания необходима специальная шина. Однако она,как правило, физически совмещается с шиной данных системной магистрали, при этом ввод вектора прерывания осуществляется в специальном цикле магистрали, который называется циклом подтверждения прерывания . Такое совмещение требует включения в шину управления линии подтверждения прерывания INTA, по которой передается сигнал от процессора, разрешающий выдачу вектора прерывания в ответна запрос прерывания от ПУ. МП, получив вектор прерывания, сразу переключается на выполнение требуемой подпрограммы обработки прерывания. Так же как и радиальная система, векторная система прерываний предполагает наличие для каждого ПУ собственной подпрограммы обработки прерывания. При этом вектор прерывания определяет, какой подпрограмме обработки прерывания процессор должен передать управление.

    Вектор прерывания может представлять собой:

    полную команду вызова подпрограммы вместе с адресом подпрограммы обработки прерывания;

    адрес подпрограммы обработки прерывания;

    указательна адрес подпрограммы обработки прерывания. В качествеуказатель может использоваться либо адрес, по которому в памяти хранится адрес подпрограммы обработки прерывания (иногда такой указатель называют адресом вектора прерывания), либо тип прерывания.

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

    При формировании вектора прерывания средствами ПУ логика работы программного поллингапереносится на аппаратные средства – определениенаиболее приоритетного запроса осуществляется с помощью аппаратного опроса готовности ПУ. Такой подход называется аппаратным поллингом . Линии запросов от всех ПУ объединяются по схеме «монтажное ИЛИ» и подключаются к общей линии запроса прерывания IRQ процессора (рис. 40).

    Рисунок 40 – Формирование вектора прерывания средствами ПУ

    Процессор при поступлении в него по линии IRQ запроса прерывания формирует управляющий сигнал подтверждения прерывания INTA, который поступает сначала в контроллер ближайшего к процессору ПУ. Если это ПУ нетребовало обслуживания, то его контроллер пропускает сигнал подтверждения прерывания на следующий контроллер, иначе дальнейшее распространение сигналапрекращается и контроллер выдает в шину данных вектор прерывания. Такая схема носит ярко выраженный шлейфовый характер. Одна линия подтверждения прерывания проходит последовательно через контроллеры ПУ и образует последовательную приоритетную структуру, называемую дейзи-цепочкой . Приоритет определяется физическим положением каждого ПУ. Ближайшее к процессору ПУ имеет наибольший приоритет.

    Дейзи-цепочка имеет двапреимущества. Во-первых, в системной магистрали нужнатолько одна линия запроса прерывания (одна линия запроса используетсяи в системе с программным опросом готовности ПУ, однако аппаратный опрос готовности ПУ производится гораздо быстрее). Во-вторых, в систему можно ввести новое ПУ с любым требуемым приоритетом, просто подключая его в нужную физическую позицию. Количество ПУ в системе ограничивается только числом векторов прерываний. Однако дейзи-цепочка медленнее параллельного способа, реализуемого в контроллере прерываний, так как сигнал подтверждения прерывания последовательно распространяется через каждое ПУ. Еще один недостаток шлейфовой структуры – трудность управления приоритетами. ПУ, стоящие в дейзи-цепочке ближе к процессору, обладают более высоким приоритетом, поэтому изменениеприоритетов требует изменения последовательности включения ПУ, что во многих случаях затруднительно. Наиболее эффективно векторная система прерываний реализуется с помощью контроллера прерываний (рис. 41)

    Рисунок 41 – Векторная система прерываний на основе контроллера прерываний

    Контроллер прерываний (КПР) может рассматриваться как расширение процессора, по этой причине его иногданазывают сопроцессором обработки прерываний. На основе КПР формируется многоуровневая приоритетная система векторных прерываний. КПР обеспечивает прием и обработку N запросов на прерывание. Приоритетная логика КПР выбирает из числа поступивших запросов на прерывание запрос с наивысшим приоритетом и сравнивает его с текущим приоритетом запроса, находящегося на обслуживании. При превышении текущего приоритета КПР генерирует сигнал запроса прерывания INT, который поступает в процессор. МП подтверждает прием запроса INTгенерацией сигнала подтверждение прерывания INTA, в ответ накоторый КПР выдает на шину данных системной магистрали соответствующий вектор прерывания. До тех пор, пока некоторый запрос находится в обслуживании, все запросы с равным или меньшим приоритетом игнорируются. В то же время запросы с более высоким приоритетом приводят к генерации сигнала INT, инициируя вложенные прерывания. Для оперативного управления работой контроллера предусматривается возможность его программирования, что позволяет динамически изменять приоритеты запросов, формируемые вектора прерываний и т.п.

    "

    Операционная система в значительной степени управляется с помощью системы прерываний. В реальном режиме имеются 2 типа прерываний: аппаратные и программные. Программные прерывания инициализируются командой int. Аппаратные – внешними событиями, асинхронными по отношению к выполняемой программе. Обычно аппаратные прерывания инициализируются аппаратурой ввода/вывода после завершения выполнения текущей операции.

    Для обработки прерываний в реальном режиме процессор использует таблицу векторов прерываний. Сегментные адреса, используемые для определения местоположения программ обработки прерываний, называются векторами прерываний.

    Таблица векторов прерываний располагается в самом начале ОП, т.е. её физический адрес = 0. Таблица векторов прерываний состоит из 256 элементов по 4 байта. Вектора состоят из 16 битового сегментного адреса и 16 битового смещения (сначала идет смещение, а потом сегмент). Каждый вектор прерываний имеет свой номер, называемый номером прерывания, который указывает на его место в таблице. Этот номер, умноженный на 4, дает абсолютный адрес вектора памяти.

    Вектора прерываний получают свои значения при запуске системы. Сначала BIOS выполняя процедуры инициализации, задает значения определенных векторов прерываний. При загрузке DOS задаются значения векторам прерываний DOS.

    DOS может переназначить некоторые из векторов BIOS к своим подпрограммам. Пользователь также может изменить значения векторов прерываний. Когда происходит программное или аппаратное прерывание, текущее состояние регистров CS:IP, а также значения регистра флагов записываются в стек программы. Далее из таблицы векторов прерываний выбираются новые значения CS:IP. При этом управление передается на процедуру обработки прерываний.

    Перед входом в процедуру обработки прерываний принудительно сьрасывется флаг трассировки TF и флаг разрешения прерываний IF. Завершив обработку прерывания, процедура должна выдать команду IRET, по которой из стека будут извлечены значения регистров CS:IP и регистра флагов. Далее продолжается выполнение прерванной программы.

    Процедура обработки прерывания обязательно должна закончится процедурой IRET, после которой считываются значения flags, CS, IP.

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

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

    • Прерывания и особые ситуации (Interrupts and Exceptions ) — обнаруживаются и обрабатываются процессором в самые различные моменты времени и могут происходить как из внешних так и из внутренних источников, все другие типы экстраординарных ситуаций занимают более низкий уровень иерархии и могут обрабатываться, только если сперва заявят о своем существовании через прерывание или особую ситуацию.
    • Исключительные ситуации FPU (Floating-Point Exceptions команд сопроцессора , команд MMX или 3DNow!-команд . Возникновение исключительной ситуации FPU , в свою очередь, может вызывать генерацию прерывания через подачу сигнала на специальные внешние выводы процессора (так называемая реакция в стиле MS-DOS ) или особой ситуации (внутренний механизм процессора обеспечивает генерацию ошибки сопроцессора #MF), обработчик которой далее сам разбирается с тем, какое исключение произошло и какие действия в связи с этим следует предпринять ().
    • Исключительные ситуации SIMD (SSE) (SIMD Floating-Point Exceptions ) — могут возникать только при выполнении SIMD-команд и полностью определяются состоянием SIMD-регистров процессора. SIMD-исключения сообщают о своем возникновении через генерацию специальной особой ситуации #XM . Получив управление, обработчик особой ситуации должен сам программным путем определить причину возникновения исключения ().

    Прерывания и особые ситуации

    Прерывания и особые ситуации (Interrupts and Exceptions ) — это специальные средства, обеспечивающие быструю реакцию процессора на внешние воздействия и прочие неожиданные ситуации. При поступлении прерывания или генерации особой ситуации выполнение программы прерывается, а управление передается специальной процедуре — обработчику прерывания или особой ситуации . В большинстве случаев, когда обработка прерывания или особой ситуации заканчивается, управление может быть возвращено в прерванную программу, которая продолжит свое выполнение с той самой точки, в которой она была остановлена. Процессор производит автоматическое сохранение/восстановление контекста и состояния для обеспечения этой возможности.

    Все прерывания и особые ситуации имеют уникальные идентификационные номера . Эти номера называются векторами прерываний и лежат в пределах от 0 до 255. Векторы от 0 до 31 отведены для особых ситуаций и немаскируемого прерывания , причем некоторые из них зарезервированы и не должны использоваться программами. Векторы от 32 до 255 свободны для любого использования пользовательскими программами и внешними устройствами.

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

    Любые команды, для которых могут генерироваться особые ситуации , маскируемые и немаскируемые прерывания

    Любые невыровненные ссылки на данные в памяти, если активирован контроль выравнивания (CR0.AM = 1, EFLAGS.AC = 1, CPL = 3)

    Типы особых ситуаций и особенности их обработки

    Особые ситуации , генерируемые процессором подразделяются на три типа — ошибки , ловушки и сбои . В зависимости от типа особой ситуации различается реакция процессора на ее возникновение.

    • Ошибка (Fault ) — это особая ситуация , которая может быть исправлена обработчиком особой ситуации . При встрече ошибки состояние процессора сохраняется в том виде, каким оно было до начала выполнения команды, инициировавшей генерацию ошибки, а значения CS:EIP , указывающие на эту команду сохраняются в стеке обработчика. Прерванная программа после исправления ошибки может быть продолжена непосредственно с команды, вызвавшей эту ошибку .
    • Ловушка (Trap ) — особая ситуация , которая генерируется после выполнения соответствующей команды. В этом случае сохраняемые в стеке значения CS:EIP , указывают на команду, которая будет выполняться вслед за командой, вызвавшей ловушку ; например, если ловушка произошла во время команды JMP , то сохраненные значения CS:EIP указывают на команду, являвшуюся целью команды JMP .
    • Сбой (Abort ) — это особая ситуация , которая не допускает точную локализацию вызвавшей ее команды и не допускает перезапуска. Сбои используются для сообщений о некоторых ошибках, таких как: технические неисправности и наличие некорректных значений в системных таблицах.

    Правила функционирования механизма обработки прерываний и особых ситуаций существенно зависят от режима работы процессора и текущих установок некоторых флагов в регистре CR4 . Сам этот механизм включает следующие элементы:

    • таблица дескрипторов прерываний IDT (в режиме реальной адресации — таблица векторов прерываний IVT);
    • регистр таблицы дескрипторов прерываний IDTR ;
    • флаг маскирования внешних прерываний EFLAGS.IF ;
    • флаги для работы с виртуальными прерываниями EFLAGS.VIF , EFLAGS.VIP ;
    • специальная таблица — карта перенаправления прерываний IRB — располагается в сегменте TSS задачи;
    • специальные типы дескрипторов шлюзов .

    Здесь мы разберем такие важные темы, как: обработка прерываний, векторы прерываний, программные прерывания, IRQ , в общем поговорим на темы прерывания.

    Идея прерывания была предложена в середине 50-х годов и основная цель введения прерываний – реализация синхронного режима работы и реализация параллельной работы отдельных устройств ЭВМ.

    Прерывания и обработка прерываний зависят от типа ЭВМ, поэтому их реализацию относят к машинно-зависимым свойствам операционных систем.

    Прерывание (interrupt) – это сигнал, заставляющий ЭВМ менять обычный порядок выполнения команд процессором.

    Возникновение подобных сигналов обусловлено такими событиями , как:

    • завершение операций ввода-вывода.
    • истечение заранее заданного интервала времени.
    • попытка деления на нуль.
    • сбой в работе аппаратного устройства и др.

    Обработка прерывания

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

    Например прерывание с номером 9 — прерывание от клавиатуры, которое генерируется при нажатии и при отжатии клавиши. Используется для чтения данных с клавиатуры. Обозначается в ОС как IRQ 1, где IRQ – обозначение прерывания, а 1 – приоритет прерывания. Данные о запросах на прерывание можно проанализировать в диспетчере устройств:

    Обработчик прерываний – программа обработки прерывания, являющаяся частью ОС, предназначенная для выполнения ответных действий на условие, вызвавшее прерывание.

    Предположим, что в момент поступления сигнала прерывания от некоторого источника программа А находится в решении. В результате управление автоматически передается обработчику прерываний. После завершения обработки управление может быть снова передано в ту точку программы А, где ее выполнение было прервано:

    Векторы прерываний

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

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

    Таблица векторов прерываний занимает первый килобайт оперативной памяти — адреса от 0000:0000 до 0000:03FF. Таблица состоит из 256 элементов — FAR-адресов обработчиков прерываний. Эти элементы называются векторами прерываний . В первом слове элемента таблицы записано смещение, а во втором — адрес сегмента обработчика прерывания. Векторами являются просто полные адреса памяти программы (в сегментированной форме), которая должна быть активизирована в случае возникновения прерывания.

    Прерыванию с номером 0 соответствует адрес 0000:0000, прерыванию с номером 1 — 0000:0004 и т.д. Адрес такой состоит из пары 2-байтовых слов, поэтому каждый из векторов занимает четыре байта.

    Можно просмотреть таблицу векторов прерываний в компьютере, если воспользоваться программой DEBUG. Используйте команду D для вывода содержимого начала памяти: D 0:0. Программа DEBUG покажет вам первые 128 байтов или 32 вектора, которые могут иметь вид наподобие следующего:

    0000:0000 E8 4E 9A 01 00 00 00 00-C3 E2 00 F0 00 00 00 00
    0000:0010 F0 01 70 00 54 FF 00 F0-05 18 00 F0 05 18 00 F0
    0000:0020 2C 08 51 17 D0 0A 51 17-AD 08 54 08 E8 05 01 2F
    0000:0030 FA 05 01 2F 05 18 00 F0-57 EF 00 F0 F0 01 70 00
    0000:0040 90 13 C7 13 4D F8 00 F0-41 F8 00 F0 3E 0A 51 17
    0000:0050 5C 00 B7 25 59 F8 00 F0-E2 0A 51 17 9C 00 B7 25
    0000:0060 00 00 00 F6 8E 00 DE 09-6E FE 00 F0 F2 00 7B 09
    0000:0070 27 08 51 17 A4 F0 00 F0-22 05 00 00 00 00 00 F0

    Векторы хранятся как «слова наоборот»: сначала смещение, а потом сегмент. Например, первые четыре байта, которые программа DEBUG показала выше (E8 4E 9A 01) можно преобразовать в сегментированный адрес 019A:4EE8.

    Можно встретить три вида адресов в таблице векторов . Это могут быть адреса, указывающие на ROM-BIOS, которые можно идентифицировать шестнадцатеричной цифрой F, которая предшествует номеру сегмента. Это могут быть адреса, которые указывают на главную память (как в примере: 019A:4EE8). Эти адреса могут указывать на подпрограммы ДОС или на резидентную программу (например, SideKick или Prokey), либо они могут указывать на саму программу DEBUG (поскольку DEBUG должна временно управлять прерыванием). Также векторы могут состоять из одних нулей, когда прерывание с данным номером не обрабатывается в текущий момент.

    Инициализация таблицы происходит частично BIOS после тестирования аппаратуры и перед началом загрузки операционной системой, частично при загрузке операционной системы.

    Ниже приведено назначение некоторых векторов:

    Описание
    0 Ошибка деления. Вызывается автоматически после выполнения команд DIV или IDIV, если в результате деления происходит переполнение (например, при делении на 0).
    2 Аппаратное немаскируемое прерывание. Это прерывание может использоваться по-разному в разных машинах. Обычно вырабатывается при ошибке четности в оперативной памяти и при запросе прерывания от сопроцессора.
    5 Печать копии экрана. Генерируется при нажатии на клавиатуре клавиши PrtScr. Обычно используется для печати образа экрана.
    8 IRQ0 — прерывание интервального таймера, возникает 18,2 раза в секунду.
    9 IRQ1 — прерывание от клавиатуры. Генерируется при нажатии и при отжатии клавиши. Используется для чтения данных от клавиатуры.
    A IRQ2 — используется для каскадирования аппаратных прерываний в машинах класса AT
    B IRQ3 — прерывание асинхронного порта COM2.
    C IRQ4 — прерывание асинхронного порта COM1.
    D IRQ5 — прерывание от контроллера жесткого диска для XT.
    E IRQ6 — прерывание генерируется контроллером флоппи-диска после завершения операции.
    F IRQ7 — прерывание принтера. Генерируется принтером, когда он готов к выполнению очередной операции. Многие адаптеры принтера не используют это прерывание.
    10 Обслуживание видеоадаптера.
    11 Определение конфигурации устройств в системе.
    12 Определение размера оперативной памяти в системе.
    13 Обслуживание дисковой системы.
    14 Последовательный ввод/вывод.
    1A Обслуживание часов.
    1B Обработчик прерывания Ctrl-Break.
    70 IRQ8 — прерывание от часов реального времени.
    71 IRQ9 — прерывание от контроллера EGA.
    75 IRQ13 — прерывание от математического сопроцессора.
    76 IRQ14 — прерывание от контроллера жесткого диска.
    77 IRQ15 — зарезервировано.

    IRQ0 — IRQ15 — это аппаратные прерывания.

    Механизм обработки прерываний

    При обработке каждого прерывания должна выполняться следующая последовательность действий:

    • Восприятие запроса на прерывание: прием сигнала и идентификация прерывания.
    • Запоминание состояния прерванного процесса: определяется значением счетчика команд (адресом следующей команды) и содержимым регистров процессора.
    • Передача управления прерывающей программе (в счетчик команд заносится начальный адрес подпрограммы обработки прерываний, а в соответствующие регистры – информация из слова состояния процессора).
    • Обработка прерывания.
    • Восстановление прерванного процесса и возврат в прерванную программу.

    Главные функции механизма прерывания:

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

    Типы прерываний

    Прерывания, возникающие при работе вычислительной системы, можно разделить на 4 группы:

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

    Аппаратные прерывания не координируются c работой программного обеспечения. Когда вызывается прерывание, то процессор оставляет свою работу, выполняет прерывание, a затем возвращается на прежнее место.

    Внешние прерывания возникают по сигналу какого-либо внешнего устройства например:

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

    Прерывание по таймеру вызывается интервальным таймером. Этот таймер содержит регистр, которому может быть присвоено определенное начальное значение посредством специальной привилегированной команды. Значение этого регистра автоматически уменьшается на 1 по истечении каждой миллисекунды времени. Когда это значение становятся равным нулю, происходит прерывание по таймеру. Подобный интервальный таймер используется операционной системой для определения времени, в течение которого программа пользователя может оставаться под управлением машины.

    Маскируемые и немаскируемые внешние прерывания

    Существуют два специальных внешних сигнала среди входных сигналов процессора, при помощи которых можно прервать выполнение текущей программы и тем самым переключить работу центрального процессора. Это сигналы NMI (Non Mascable Interrupt, немаскируемое прерывани ) INTR (interrupt request, запрос на прерывание ).

    Соответственно внешние прерывания подразделяются на два вида: немаскируемые и маскируемые.

    Часто при выполнении критических участков программ, для того чтобы гарантировать выполнение определенной последовательности команд целиком, приходится запрещать прерывания (т.е. сделать систему нечувствительной ко всем или отдельным прерываниям). Это можно сделать командой CLI. Ее нужно поместить в начало критической последовательности команд, а в конце расположить команду STI, разрешающую процессору воспринимать прерывания. Команда CLI запрещает только маскируемые прерывания, немаскируемые всегда обрабатываются процессором.

    Таким образом, наличие сигнала прерывания не обязательно должно вызывать прерывание исполняющейся программы. Процессор может обладать средствами защиты от прерываний: отключение системы прерываний, маскирование (запрет) отдельных сигналов прерываний. Прерывания, которые замаскировать нельзя — это немаскируемые прерывания.

    Внутренние прерывания вызываются событиями, которые связаны с работой процессора и являются синхронными с его операциями, а именно прерывание происходит, когда:

    • при нарушении адресации (в адресной части выполняемой команды указан запрещенный или несуществующий адрес, обращение к отсутствующему сегменту или странице при организации механизмов виртуальной памяти);
    • при наличии в поле кода не задействованной двоичной комбинации.
    • при делении на нуль.
    • при переполнении или исчезновении порядка.
    • при обнаружении ошибок четности, ошибок в работе различных устройств аппаратуры средствами контроля.

    Программные прерывания

    Программы могут сами вызывать прерывания с заданным номером. Для этого они используют команду INT. По этой команде процессор осуществляет практически те же действия, что и при обычных прерываниях, но только это происходит в предсказуемой точке программы – там, где программист поместил данную команду. Поэтому программные прерывания не являются асинхронными (программа «знает», когда она вызывает прерывание).

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

    Механизм программных прерываний был специально введен для того, чтобы:

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

    Пример (программные прерывания):

    • привилегированная команда в режиме пользователя.
    • адрес вне диапазона.
    • нарушение защиты памяти.
    • арифметическое переполнение, отсутствует страница.
    • нарушение защиты сегмента.
    • выход за границу сегмента.

    В упрощенном виде схему обработки различных видов прерываний можно представить следующим образом:

    КП – контроллер прерываний, имеет несколько уровней (линий) для подключения контроллеров устройств (на схеме обозначены КУ). Возможно каскадное подключение контролеров, когда на один из его входов подключается еще одни контроллер прерываний. ЦП – центральный процессор.

    Аппаратные прерывания вырабатываются устройствами компьютера, когда возникает необходимость их обслуживания. В отличие от программных прерываний, вызываемых запланировано самой прикладной программой, аппаратные прерывания всегда происходят асинхронно по отношению к выполняющимся программам. Кроме того, может возникнуть одновременно несколько прерываний. Выбор одного из них для обработки осуществляется на основе приоритетов, приписанных каждому типу прерывания.

    Каждому прерыванию назначается свой уникальный приоритет. Если происходит одновременно несколько прерываний, то система отдает предпочтение самому высокоприоритетному, откладывая на время обработку остальных прерываний.

    В случае о прерывании самой программы обработки прерывания говорят о вложенном прерывании . Уровни приоритетов обозначаются сокращенно IRQ0 — IRQ15 или IRQ0 – IRQ23 (в зависимости от микросхемой реализации).

    Пpepывaнию вpeмeни cутoк дан мaкcимaльный пpиopитeт, пocкoльку ecли oнo будет пocтoяннo тepятьcя, то будут нeвepными пoкaзaния cиcтeмныx чacoв. Пpepывaниe от клaвиaтуpы вызывaeтcя при нaжaтии или oтпуcкaнии клавиши; oнo вызывaeт цепь coбытий, кoтopaя oбычнo зaкaнчивaeтcя тем, что код клавиши пoмeщaeтcя в буфep клaвиaтуpы (oткудa он зaтeм мoжeт быть пoлучeн пpoгpaммными пpepывaниями).

    Ну и наконец реализация механизма обработки прерываний

    В машине для каждого класса прерываний имеется соответствующая ему рабочая область прерываний . Например, имеется область, соответствующая прерыванию по таймеру. Когда происходит прерывание по таймеру, содержимое всех регистров сохраняется в этой области (например, пропустив первые несколько слов). Затем из этих пропущенных слов извлекаются заранее занесенные туда значения, которые перезаписываются в счетчик (указатель) команд машины и в слово состояния (или во флаговый регистр). Загрузка и сохранение регистров осуществляется аппаратными средствами машины автоматически.

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

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

    Сохранение и восстановление состояния процессора и содержимого регистров называют операцией контекстного переключения .

    У большинства машин имеется так называемое слово состояния, которое содержит часть информации, используемой при обработке прерываний. Одним из элементов этого слова (например, первый) является признак, определяющий, в каком режиме находится процессор: в пользовательском или супервизора .

    Обычные программы находятся в пользовательском режиме (признак равен нулю). Когда происходит прерывание, новое загружаемое содержимое слово состояния имеет признак, равный 1, что автоматически переводит процессор в режим супервизора. В этом режиме становится возможным использование привилегированных команд. Перед тем, как значение слова состояния будет сохранено, в другом его элементе (например, втором) будет установлено значение, указывающее на причину прерывания:

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

    В третьем элементе указывается, выполняет ли процессор команды или простаивает. В четвертом элементе содержится указатель, идентифицирующий текущую выполняемую программу. В пятом элементе содержится маска прерываний, которая используется для контроля за разрешением прерываний (поле MASK).

    Это поле используется, чтобы не допустить наступления прерываний определенного типа, пока первое из них не будет обработано. В MASK каждый бит соответствует некоторому классу прерываний. Если какой-то бит установлен в 1, то прерывания соответствующего класса разрешены, если в 0, то запрещены. В последнем случае говорят, что они маскированы (их также называют запрещенными или закрытыми ). Однако маскированные прерывания не теряются, потому что сигнал, вызвавший прерывание, сохраняется аппаратурой. Временно задержанное таким способом прерывание называется отложенным . Когда (вследствие того, что значение MASK сброшено) прерывания соответствующего класса вновь разрешаются, сигнал опознается и происходит прерывание.

    Маскирование прерываний находится под контролем операционной системы и зависит от значения MASK в слове состояния, которое заранее сохраняется в рабочей области каждого прерывания. Можно запретить все прерывания, установив все биты MASK в нуль. В действительности поступать подобным образом нет необходимости.