Информационные технологииStfw.Ru 🔍

Прерывания

Каналы запросов прерывания (IRQ), или аппаратные прерывания, используются различными устройствами для сообщения системной плате (процессору) о необходимости обработки определенного запроса.
🕛 23.10.2009, 14:05
Каналы прерываний представляют собой проводники на системной плате и соответствующие контакты в разъемах. После получения IRQ компьютер приступает к выполнению специальной процедуры его обработки, первым шагом которой является сохранение в стеке содержимого регистров процессора. Затем происходит обращение к таблице векторов прерываний, в которой содержится список адресов памяти, соответствующих определенным номерам (каналам) прерываний. В зависимости от номера полученного прерывания, запускается программа, относящаяся к данному каналу.

Указатели в таблице векторов определяют адреса памяти, по которым записаны программы-драйверы для обслуживания платы, пославшей запрос. Например, для сетевой платы вектор прерывания содержит адрес сетевых драйверов, предназначенных для работы с ней; для контроллера жесткого диска вектор указывает на программный код BIOS, обслуживающий контроллер.
После выполнения необходимых действий по обслуживанию устройства, пославшего запрос, процедура обработки прерывания восстанавливает содержимое регистров процессора (извлекая его из стека) и возвращает управление компьютером той программе, которая выполнялась до возникновения прерывания.
Благодаря прерываниям компьютер может своевременно реагировать на внешние события. Каждый раз, когда последовательный порт передает байт данных системе, генерируется соответствующее прерывание, благодаря которому система должна обработать байт данных до поступления следующих данных. Учтите, что в некоторых случаях устройство, подключаемое к порту (например, модем с микросхемой UART 16550 или выше), может содержать специальный буфер, позволяющий сохранять несколько символов перед генерированием прерывания.
Аппаратные прерывания имеют иерархию приоритетов: чем меньше номер прерывания, тем выше приоритет. Прерывания с более высоким приоритетом обладают преимуществом и могут “прерывать прерывания”. В результате в компьютере может возникнуть несколько “вложенных” прерываний.
При генерации большого количества прерываний стек может переполниться и компьютер зависнет. При этом будет выдано сообщение Internal stack overflow - system halted. Если такая ошибка возникает слишком часто при работе в DOS, попытайтесь исправить ситуацию, увеличив параметр Stacks (размер стека) в файле Config.sys.
По шине ISA запросы на прерывание передаются в виде перепадов логических уровней, причем для каждого из них предназначена отдельная линия, подведенная ко всем разъемам. Каждому номеру аппаратного прерывания соответствует свой проводник. Системная плата не может определить, в каком разъеме находится пославшая прерывание плата, поэтому возможно возникновение неопределенной ситуации в том случае, если несколько плат используют один канал. Чтобы этого не происходило, система настраивается так, что каждое устройство (адаптер) использует свою линию (канал) прерывания. Применение одной линии сразу несколькими разными устройствами в большинстве случаев недопустимо. Совместное использование прерывания допускается только устройствами PCI. Эта возможность поддерживается системной BIOS и операционной системой.
Технология совместного использования прерываний для адаптеров PCI называется PCI IRQ Steering и поддерживается операционными системами, начиная с Windows 95 OSR 2.x, а также BIOS системной платы. Эта технология дает возможность Windows с поддержкой устройств Plug and Play динамически распределять стандартные прерывания для плат PCI (обычно использующих прерывание PCI INTA#), а также назначать одно прерывание нескольким платам PCI.
Внешние аппаратные прерывания часто называются маскируемыми прерываниями, т.е. их можно отключить (“замаскировать”) на время, пока процессор выполняет другие важные операции.

Поскольку в шине ISA совместное использование прерываний обычно не допускается, при установке новых плат может обнаружиться недостаток линий прерываний. Если две платы используют одну и ту же линию IRQ, то их нормальную работу нарушит возникший конфликт.
Прерывания в 8-разрядной шине ISA
В компьютерах PC и XT с 8-разрядным процессором 8088 имеется восемь внешних аппаратных прерываний. Стандартное распределение этих прерываний, пронумерованных от 0 до 7, приведено в табл. 4.78.
Таблица 4.78. Установленное по умолчанию распределение прерываний в 8-разрядной шине ISA
Номер прерывания
Функция
Тип разъема
Системный таймер Нет
Контроллер клавиатуры Нет
Доступно 8-разрядный
Последовательный порт 2 (COM2) 8-разрядный
Последовательный порт 1 (СОМ1) 8-разрядный
Контроллер жесткого диска 8-разрядный
Контроллер гибких дисков 8-разрядный
Параллельный порт 1 (LPT1) 8-разрядный
В компьютере с 8-разрядной шиной ISA имеющихся прерываний (ресурсов) часто катастрофически не хватает. Попытка установить в компьютер PC/XT несколько устройств, требующих обработки своих прерываний, может привести к тому, что разрешить проблему нехватки прерываний вы сможете единственным способом - вынуть реже всего используемую плату адаптера.
Прерывания в 16-разрядной шине ISA и шинах EISA и МСА
В компьютере AT с процессором 286 количество линий внешних аппаратных прерываний увеличилось. Оно удвоилось благодаря использованию двух контроллеров прерываний, причем прерывания, генерируемые вторым контроллером, подаются на неиспользуемый вход IRQ 2 первого. Фактически существует 15 линий IRQ, так как вход IRQ 2 становится недоступным.
Поскольку все прерывания со второго контроллера передаются на первый через один вход IRQ 2, в иерархии приоритетов они размещаются между IRQ 1 и IRQ 3. Так, прерывание IRQ 15 получает больший приоритет, чем прерывание IRQ 3. На рис. 4.81 схематично показано подключение двух микросхем 8259, которые образуют каскад из двух контроллеров прерываний.

Для того чтобы не возникало проблем при генерации фактически несуществующего IRQ 2, конструкторы выделили дополнительное прерывание IRQ 9 для заполнения образовавшейся бреши. Это означает, что любая добавленная в компьютер плата, для которой характерно использование прерывания IRQ 2, на самом деле будет использовать IRQ 9. Это следует учитывать, чтобы случайно не назначить прерывание IRQ 9 другому устройству.
В табл. 4.79 описаны стандартные функции прерываний 16-разрядной шины и 32-разрядных PCI/AGP; при этом приоритет прерываний указан от высшего к низшему. Подобную схему распределения прерываний использовали также шины EISA и MCA.

Отметим, что линии прерываний 0, 1, 2, 8 и 13 не выведены на разъемы шины и не используются платами адаптеров. Линии прерываний 8, 10, 11, 12, 13, 14 и 15 подключены ко второму контроллеру. Они могут использоваться только адаптерами с 16-разрядным разъемом, поскольку подведены к контактам в “расширенных” частях слотов. Линия IRQ 9 подключена к разъему 8-разрядного слота вместо IRQ 2 и доступна 8-разрядным платам, которые используют ее как линию IRQ 2.
Замечание
Несмотря на то что в 16-разрядной шине ISA вдвое больше линий прерываний, чем в 8-разрядной, их все же может не хватить, так как новые прерывания могут использоваться только 16-разрядными адаптерами.
От дополнительной линии IRQ в компьютере с 16-разрядной шиной ISA мало толку, если платы адаптеров нельзя переключить на одну из свободных линий. Некоторые устройства жестко закреплены за конкретной линией IRQ. Если в компьютере уже установлена плата, которая использует данную линию, необходимо устранить этот конфликт перед установкой второго адаптера. Если ни один из них нельзя переключить на другую линию IRQ, скорее всего, вам не удастся использовать их в одной системе.

Прерывания шины PCI

Шина PCI поддерживает аппаратные прерывания, которые использует установленное устройство, чтобы привлечь внимание шины. Это прерывания INTA#, INTB#, INTC# и INTD#. Прерывания INTx# чувствительны к уровню, что позволяет распределять их среди нескольких устройств PCI. Если одиночное устройство PCI использует только одно прерывание, то им должно быть INTA#, что является одним из основных правил спецификации шины PCI. Остальные дополнительные устройства должны использовать прерывания INTB#, INTC# и INTD#.

Для нормального функционирования шины PCI в персональном компьютере ее прерывания должны быть установлены в соответствии с существующими прерываниями ISA. Последние не могут использоваться совместно, поэтому в большинстве случаев для каждой платы PCI, использующей прерывание INTA# шины PCI, следует установить прерывания, отличные от неразделяемых прерываний шины ISA. Рассмотрим в качестве примера систему, имеющую четыре разъема PCI и четыре установленные платы PCI, каждая из которых использует прерывание INTA#. В таком случае каждой из плат должен быть назначен отдельный запрос прерывания ISA, например IRQ9, IRQ10, IRQ11 или IRQ5.
Установка одинаковых прерываний для шин ISA и PCI обязательно приведет к конфликту. Также будут конфликтовать два устройства ISA с одинаковым прерыванием. Что же делать, если доступных прерываний недостаточно для всех установленных в системе устройств? В большинстве новых систем допускается использование одного прерывания несколькими устройствами PCI. Все системные BIOS, удовлетворяющие спецификации Plug and Play, а также операционные системы, начиная с Windows 95b (OSR ), поддерживают функцию управления прерываниями. В таких компьютерах всю заботу о прерываниях берет на себя система. Обратите внимание, что оригинальная версия Windows , а также Windows a эту функцию не поддерживает.
Чаще всего BIOS назначает уникальные прерывания устройствам PCI. А если операционная система поддерживает управление прерываниями, то эту задачу она выполняет самостоятельно. Следует заметить, что, даже если активизирована системная функция управления прерываниями, их начальное распределение берет на себя BIOS. Если свободных прерываний недостаточно, то операционная система распределяет одно прерывание между несколькими устройствами PCI. Если операционная система не обладает функцией управления прерываниями, то она просто деактивизирует устройство до появления свободного прерывания.
Чтобы определить, поддерживается ли описанная функция в вашем компьютере, выполните ряд действий.
1. Щелкните на кнопке Пуск (Start) и выберите команду Настройка^Панель управления (Settings^Control Panel).
2. Дважды щелкните на пиктограмме Система (System).
3. В появившемся окне активизируйте вкладку Устройства (Device Manager).
4. Щелкните на знаке “+” возле группы Системные устройства (System Devices).
5. Дважды щелкните на компоненте Шина PCI (PCI Bus). В появившемся окне активизируйте вкладку Управление IRQ (IRQ Steering). Вы увидите группу флажков.
В Windows 2000/XP отключить распределение прерываний нельзя, поэтому вкладка Управление IRQ (IRQ Steering) отсутствует в диалоговом окне Диспетчер устройств (Device Manager).
Управление прерываниями осуществляется с помощью нескольких таблиц. Порядок просмотра таблиц изменить нельзя, однако установка или сброс флажка Get IRQ Table Using позволяет отменить поиск определенных таблиц, тем самым указывая нужную для первоначального обнаружения таблицу. В поисках необходимых параметров Windows последовательно просматривает такие таблицы IRQ:
- ACPI BIOS; - PCIBIOS 2.1 в защищенном режиме;
- спецификации MS; - PCIBIOS 2.1 в реальном режиме.
Для устранения проблем с распределением прерываний попробуйте по одному отключать установленные по умолчанию флажки во вкладке Управление IRQ. В первую очередь используйте таблицу IRQ из ACPI BIOS, а если проблема не будет устранена - таблицу IRQ из PCIBIOS 2.1 в защищенном режиме. Обратите внимание: описанные действия подходят только для Windows ; в Windows эти параметры несколько отличаются.
Следует отметить, что с функцией управления и сопоставления прерываний могут быть связаны определенные недоразумения. Даже несмотря на возможность совместного использования прерываний PCI (INTx#) (данная функция активизирована по умолчанию), каждое устройство, которое использует общее прерывание PCI, все равно должно быть связано с уникальным прерыванием IRQ ISA, которое, в свою очередь, совместного использования не допускает. С одним прерыванием IRQ ISA можно сопоставить несколько устройств PCI только в следующих случаях:
- данное прерывание IRQ не использует ни одно устройство ISA;
- BIOS и операционная система поддерживают управление IRQ PCI;
- функция управления IRQ PCI активна.
Без активизации функции PCI IRQ Steering (управление IRQ PCI) возможности по совместному использованию прерываний PCI оказываются минимальными, так как все сопоставления прерываний IRQ PCI-ISA должны быть уникальными. Без функции PCI IRQ Steering очень легко столкнуться с тем, что прерываний ISA IRQ будет просто недостаточно. Если функция PCI IRQ Steering поддерживается и активна, несколько устройств PCI могут использовать одно прерывание IRQ, что позволяет задействовать в системе намного больше устройств без риска столкнуться с ситуаций, когда доступных прерываний IRQ оказывается недостаточно. Улучшенная поддержка функции PCI IRQ Steering - одна из основных причин перехода к Windows 98 или более новым версиям операционной системы, особенно в том случае, если используется первая версия Windows 95 OSR1.
Еще одна проблема состоит в том, что в списке прерываний, представленном в программе Device Manager (Диспетчер устройств) в Windows 9x, назначения PCI-ISA могут быть показаны в виде многочисленных записей для избранного прерывания ISA. Только одна запись будет указывать на устройство, в действительности получившее то или иное прерывание (например, встроенный контроллер USB), в то время как другая запись для того же прерывания IRQ будет выглядеть, как надпись IRQ Holder for PCI Steering. Последняя запись, несмотря на декларируемое применение аналогичного прерывания, на самом деле не указывает на конфликт ресурсов; запись определяет резервное прерывание, выделенное набором микросхем системной логики для возможного назначения какому-либо устройству. Это характерно для шины PCI с поддержкой технологии Plug and Play и для современных наборов микросхем системных плат. В Windows 2000/XP нескольким устройствам также может быть назначено одно прерывание, однако во избежание путаницы термин IRQ Holder не используется.
К шине PCI могут быть подключены внешние устройства, даже несмотря на свободные разъемы PCI. Например, в большинстве систем есть два контроллера IDE и контроллер USB, по сути представляющие собой устройства, подключенные к шине PCI. Обычно контроллеры PCI IDE получают прерывание ISA (основной IDE) и 15 (вторичный IDE). Контроллеру USB присваиваются прерывания 9, 10, 11 или 5. Многие современные системы оснащены двумя или большим количеством контроллеров USB (каждый из них обычно поддерживает два порта US), но каждый контроллер USB должен быть сопоставлен с прерыванием ISA
Шина PCI позволяет использовать два типа устройств - bus master (инициатор) и slave (назначение). Устройство bus master берет на себя управление шиной и инициирует передачу данных на устройство slave. Согласно спецификации PC 97, все устройства PCI могут выступать как в роли инициирующего, так и в роли получателя. В настоящее время практически все разъемы PCI поддерживают “универсальные” устройства.
Шиной PCI управляет арбитр, который является частью контроллера шины PCI в наборе микросхем системной логики. Именно этот арбитр управляет доступом всех устройств к шине. Перед “захватом” управления шиной устройство Bus Master получает на это разрешение у арбитра. Примерно аналогичные действия происходят в локальной сети: сначала отправляется запрос на выполнение определенных действий, а при получении положительного ответа выполняются сами действия.

Усовершенствованный программируемый контроллер прерываний APIC

В качестве замены традиционной паре контроллеров прерываний 8259 компания Intel в середине 1990-х годов разработала усовершенствованный программируемый контроллер прерываний API(Advanced Programmable Interrupt Controller). Хотя все процессоры, начиная с Pentium, поддерживают API, этот контроллер должен присутствовать на системной плате; кроме того, системная BIOS также должна поддерживать APIC. Поддержка APIC реализована на большинстве современных системных плат; контроллер APIC поддерживается операционными системами Windows, начиная с версии Windows . Поддержку APIC можно разрешить или запретить, воспользовавшись программой BIOS Setup.
Контроллер APIC обеспечивает поддержку нескольких процессоров, однако может использоваться и в однопроцессорных системах. Основное преимущество APIC для однопроцессорной системы - поддержка виртуальных прерываний IRQ выше 15. Большинство реализаций APIC поддерживают виртуальные IRQ до 24. Хотя Windows старается назначать запросы на прерывания PCI IRQ в традиционном для устройств ISA диапазоне 0...15, причем даже при активном контроллере APIC, Windows XP полностью использует все возможности активного контроллера APIC. Для Windows XP контроллер APIC ограничивает совместное использование IRQ, что значительно сокращает количество конфликтов устройств. Например, Windows XP при активном контроллере APIC может назначить запросы PCI IRQ так, как показано ниже.
- PCI IRQ 16: интегрированный звуковой адаптер/видеоадаптер AGP (совместное использование).
- PCI IRQ 17: дополнительный адаптер USB 1.1 (совместное использование отсутствует).
- PCI IRQ 18: дополнительный адаптер USB 1.1 (совместное использование отсутствует).
- PCI IRQ 19: сетевой адаптер 10/100 Ethernet/дополнительный адаптер USB 2.0 (совместное использование).
- PCI IRQ 21: интегрированный контроллер USB 1.1 (3)/дополнительный адаптер USB 2.0 (совместное использование).
Традиционные запросы ISA IRQ 0...15 на данной системе использовались только для устройств ISA, тем самым предотвратив конфликты устройств ISA-PCI.
Контроллер APIC должен быть активизирован в системой BIOS до установки Windows 2000/XP, чтобы обеспечить работоспособность необходимых служб APIC.
Замечание
Контроллер APIC должен быть активизирован в системной BIOS до установки Windows XP Professional x64 Edition или Windows Server 2003 for x64.
Конфликты прерываний
Вероятно, наиболее распространенный конфликт прерываний (IRQ) связан с интегрированным последовательным портом COM2, существующим в современных системных платах, и внутренним модемом (имеется в виду полноценный внутренний PC-модем, а не программный модем, который также называется WinModem). Внутренний модем, соединенный с одним из последовательных портов, использует его в качестве одного из элементов схемы собственной платы. Этот порт назначается по умолчанию как последовательный порт СОМ2. В результате в компьютере появляются два порта СОМ2, использующих одни и те же прерывания (IRQ) и адреса портов ввода-вывода.
Решить эту проблему довольно просто: следует войти в BIOS Setup системы и отключить встроенный порт COM2. Кроме того, можно подумать также об отключении порта COM1, который используется крайне редко. Отключение неиспользуемых портов СОМх - один из лучших способов высвобождения прерываний (IRQ) для других используемых устройств.

Чаще всего конфликты IRQ возникают между последовательными портами СОМ. Как уже отмечалось, прерывание IRQ 3 предназначено для СОМ2, а IRQ 4 - для СОМ1. Проблемы появляются при установке в компьютере дополнительных последовательных портов, что вполне логично, поскольку их максимальное количество равно четырем.
Принятое в свое время распределение линий IRQ между портами СОМ оказалось неудачным. Прерывание IRQ 3 предназначено для портов СОМ с четными номерами, а IRQ 4 - для портов СОМ с нечетными номерами. В результате порты СОМ2 и СОМ4 используют одну линию IRQ 3, а порты СОМ1 и СОМ3 - IRQ 4. Следовательно, использовать одновременно СОМ1 и COM3 невозможно; то же самое относится и к портам СОМ2 и СОМ4. Напомним, что, если к одной линии IRQ подключено несколько устройств, ни одно из них не сможет привлечь к себе внимание процессора. При работе в DOS это допускалось, поскольку тогда одновременно могла выполняться только одна задача, но в Windows и OS/2 это совершенно невозможно.
Для того чтобы в компьютере можно было применять более двух параллельных портов COM, необходима многопортовая плата, которая, помимо прерываний с номерами 3 и 4, позволяет использовать дополнительные прерывания.
Если в вашем компьютере какое-либо из перечисленных в таблице устройств отсутствует, например на системной плате нет порта мыши (IRQ 12) или параллельного порта 2 (IRQ 5), то соответствующие им прерывания вы можете использовать как свободные. Так, второй параллельный порт встречается довольно редко и во многих компьютерах IRQ 5 используется в качестве звуковой платы.
Проще всего для проверки бесконфликтности прерываний использовать диспетчер устройств в Windows 9х или Windows NT/2000/XP. Дважды щелкнув на значке Computer Properties (Компьютер) во вкладке Device Manager (Устройства) окна System Properties (Свойства: Система), вы получите краткий список всех используемых ресурсов системы. Microsoft также включила программу HWDIAG в Windows 95B и более поздние версии; эта программа сообщает об использовании ресурсов системы. В Windows XP подробную системную информацию можно получить с помощью программы MSInfo32.

Чтобы обеспечить максимально возможное количество совместных прерываний в современной системе без разъемов ISA, при работе с системной BIOS выполните ряд действий.
1. Отключите все неиспользуемые наследуемые порты в системной BIOS. Например, если вместо последовательного и параллельного портов используются порты USB, отключите последовательные и параллельные порты. В результате высвободится до трех IRQ.
2. Укажите прерывание IRQ, освобожденное при выполнении п. 1, в списке доступных прерываний для устройств PCI/PnP. В зависимости от версии BIOS, соответствующие параметры доступны в разделе PnP/PCI Resource Exclusion или PnP/PCI Configuration.
3. Активизируйте параметр Reset Configuration Data, чтобы очистить таблицы маршрутизации IRQ в памяти CMOS.
4. Сохраните изменения и завершите работу с программой BIOS Setup.

Устройство компьютера   Теги:

Читать IT-новости в Telegram
Информационные технологии
Мы в соцсетях ✉