Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод_з_1.doc
Скачиваний:
5
Добавлен:
01.03.2025
Размер:
2.57 Mб
Скачать

6.4. Организация прерываний

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

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

• при поступлении сигнала прерывания проводится идентифи­кация устройства, запросившего прерывание;

• запоминается информация о состоянии процессора;

• выполняется инициализация процессора для выполнения пре­рывающей программы;

• осуществляется запуск и исполнение прерывающей програм­мы обслуживания поступившего запроса прерывания;

• восстанавливается состояние процессора и возобновляется ра­бота прерванной программы.

Процесс сохранения текущего состояния процессора на мо­мент прерывания и его последующее восстановление называется контекстным переключением. Под состоянием процессора пони­мается содержимое счетчика (указателя) команд и всех его регистров на момент прерывания. Главное место в процедуре перехода за­нимает загрузка в стек текущего состояния процессора и его ини­циализация для выполнения прерывающей программы. В большин­стве процессоров при переходе к обработке прерывания содержи­мое счетчика команд (адрес возврата) автоматически запомина­ется в стеке. По окончании обработки адрес возврата извлекается из стека и помещается в счетчик команд. Сохранение и восстанов­ление содержимого регистров процессора автоматически не вы­полняется и обычно реализуется командами записи в стек (push) и извлечения из стека (pop).

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

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

С точки зрения возможности управления реакцией процессора на запрос прерывания от периферийного устройства различают маскируемые и немаскируемые прерывания. Маскируемые пре­рывания процессор может обработать немедленно или проигно­рировать их обслуживание в данный момент времени. Для управ­ления маскируемыми прерываниями большинство процессоров использует программно управляемый флаг разрешения преры­ваний IF. При IF = 0 маскируемые прерывания запрещены, а при IF= 1 - разрешены. В некоторых процессорах, наряду с возмож­ностью общего маскирования всех маскируемых прерываний, обес­печено программное маскирование отдельных типов прерывания. Используя индивидуальное маскирование, процессор в некото­рые моменты времени может разрешить обработку прерываний от более важных устройств и запретить обслуживание менее важных устройств.

Немаскируемые прерывания представляют собой тип преры­ваний, которые нельзя запретить. Они сигнализируют о событиях особой важности, таких как отключение питания, сбой памяти, сигналы «сторожевого таймера». Процессор не может игнориро­вать такие запросы на прерывание и должен их обрабатывать не­медленно. Реагируя на немаскируемое прерывание, процессор может передать важные результаты в безопасное место прежде, чем они будут потеряны из-за возникновения критической ситу­ации. Для маскируемых и немаскируемых прерываний в процессо­ре обычно используют раздельные входные сигналы и соответ­ствующие им входы. Приоритет немаскируемых прерываний все­гда выше.

Функционирование системы прерываний достаточно очевид­но и не требует особых пояснений. Более подробно остановимся на функциях и способах реализации блока, который при наличии нескольких запросов прерывания обеспечивает приоритетный выбор одного из них на обслуживание и определяет адрес обра­ботчика выбранного запроса. Определение адреса обработчика непосредственно связано с организацией системы прерываний. Современные системы в большинстве случаев имеют либо ради­альную, либо векторную организацию прерываний.

При радиальной организации прерываний адрес обработчика для каждого источника фиксирован аппаратно. Способ применя­ется в системах с небольшим числом источников.

При векторной организации прерываний каждому источнику прерывания соответствует свой адресный код - вектор прерыва­ний. При данном способе организации прерываний адрес обра­ботчика поступает в процессор непосредственно или в закодиро­ванном виде из специального контроллера в результате выполне­ния процессором цикла чтения адреса вектора прерывания или кода прерывания. Векторная организация применяется в системах с большим числом источников прерываний. В IBM PC-совмести­мых ПК с МП х86 адреса обработчиков хранятся в специальной таблице IDT (Interrupt Descriptor Table), которая должна разме­щаться в ОП. При поступлении запроса вектор прерывания ис­пользуется в качестве индекса таблицы IDT для определения ад­реса обработчика.

При одновременном поступлении нескольких запросов систе­ма прерываний фиксирует их в регистре запросов прерываний и выполняет приоритетный выбор одного на обслуживание. Этот выбор обычно реализуют либо методом линейного (последова­тельного) опроса флагов прерывания, либо методом направлен­ного (векторного) опроса, при этом выбор источника запроса для обработки зависит от встроенного в систему механизма при­оритетов. Известны несколько способов организации приорите­тов. Одни из них реализуются аппаратно, другие программно или аппаратно-программно. Приоритеты могут быть фиксированными и динамически перестраиваемыми.

Простейший способ задания фиксированных приоритетов зак­лючается в выбираемом разработчиком порядке присоединения линий сигналов запросов к входам системы прерывания. Сами зап­росы фиксируются в регистре запросов прерываний в строго оп­ределенных разрядах (флагах). В системах с фиксированным при­оритетом при выборе запроса для обработки процессор проверяет (программно или аппаратно) состояние регистра флагов преры­ваний. Поиск источника запроса прерывания прекращается при обнаружении самого старшего единичного разряда регистра пре­рывания. При поступлении следующего запроса поиск источника запроса вновь начинается со старшего разряда регистра прерыва­ний. Приоритет обслуживаемого запроса определяется его местом в последовательной цепочке. Более быстродействующим перифе­рийным устройством обычно назначают более высокий приори­тет. В подобных системах приоритет устройства является жестко фиксированным и изменить его можно только новым соединени­ем линий запросов на входах системы прерываний. Процедура вы­бора запроса с наивысшим приоритетом и формирования адреса прерывающей программы при последовательном просмотре флаж­ков прерывания называется полинг (poling).

В МП х86 запросы внешних прерываний поступают по входам INTR и NMI. Немаскируемые внешние прерывания, требующие немедленной реакции, поступают на вход NMI, а маскируемые (внешние аппаратные) - на вход INTR. Источниками немаски­руемых прерываний являются ошибка четности при обращении к памяти или ошибка канала ввода-вывода (сигнал I/O CHRDY для шины ISA или сигнал SERR# для шины PCI). В современных ПК в качестве источника NMI используется только ошибка четности.

Все маскируемые прерывания, поступающие на вход INTR МП с выхода программируемого контроллера прерываний (ПКП), программно можно разрешить или запретить. Бо­лее того, соответствующими настройками ПКП можно запретить только конкретные запросы IRQ при разрешении прерываний на других входах IRQ.

Источниками прерываний в IBM PC-совместимых ПК с про­цессорами х86, наряду с внешними прерываниями, могут быть внутренние и программные прерывания (рис. 6.9).

Рис. 6.9. Типы прерываний процессора х86