Как настроить irq в новых материнских платах. IRQ - Interrupt Request: Прерывания это сигналы, которые сообщают процессору, что нужно обработать поступивший от устройства запрос. Действия для изменения приоритета IRQ

Хорошо, когда после сборки или плановой модернизации компьютер с первого раза запускается и работает устойчиво и без глюков. Гораздо хуже, если возникают неожиданные проблемы - спонтанные перезагрузки и зависания, сбои программ, неработоспособность или "невидимость" устройств и т.п. Первая причина, которая обычно приходит в голову в таком случае, - конфликт прерываний. А хорошо ли мы знаем природу этого явления, достаточно ли подготовлены к борьбе с ним?

Что такое IRQ
Прерывания - это базовый механизм реакции системы на возникающие события. Аппаратные прерывания, называемые обычно IRQ (Interrupt ReQuest) - это физические сигналы, с помощью которых контроллер устройства информирует процессор о необходимости обработать некоторый запрос. Условно схема обработки прерывания выглядит следующим образом:
1) процессор получает сигнал прерывания и его номер;
2) по специальной таблице отыскивается адрес программы, ответственной за обработку прерывания с данным номером - обработчика прерывания;
3) процессор приостанавливает текущую работу и переключается на выполнение обработчика (в общем случае это некоторый драйвер);
4) драйвер получает доступ к устройству и проверяет причину возникновения прерывания;
5) запускаются запрошенные действия - инициализация, конфигурирование устройства, обмен данными и др.
6) драйвер завершает работу, и процессор возвращается к прерванной задаче.
Очевидно, что для корректной работы механизма прерываний необходимо выполнение двух условий: во-первых, сигнал запроса должен доходить до процессора и, во-вторых, драйвер-обработчик должен правильно реагировать на этот сигнал. В случае конфликта не соблюдается второе условие: сигнал прерывания приходит, но реакция на него оказывается неправильной, в результате чего мы имеем (в лучшем случае) неработоспособное устройство.

Конфликт
Можно сказать, что конфликт - это ситуация, при которой несколько объектов одновременно пытаются получить доступ к ресурсу, который предназначен только для одного из них. Конфликт прерываний возникает в том случае, если несколько устройств используют одну и ту же линию прерывания для посылки сигнала запроса и нет механизма, позволяющего обрабатывать конкурирующие запросы. Если драйвер, получая управление, работает не с тем устройством, которое послало запрос, то либо происходит сбой, либо одно из устройств попросту не работает.
Возникает вопрос: могут ли несколько устройств использовать одну и ту же линию прерывания, или это в принципе невозможно? Ведь если драйвер сможет определить, от кого именно пришел запрос, то он будет реагировать на сигналы только "своего" устройства, игнорируя все остальные. Но это должно быть каким-либо образом заранее оговорено, иначе конфликт неизбежен.
Локальная шина PCI была спроектирована с учетом совместного использования прерываний. Каждое устройство PCI должно корректно работать на одной линии прерывания с другими PCI-устройствами. Это сделано следующим образом: факт наличия сигнала на линии прерывания определяется не по фронту, т.е. изменению уровня напряжения, а по самому факту наличия определенного напряжения. Изменять напряжение в линии может сразу несколько устройств, становясь как бы в очередь на обслуживание.
Таким образом, совместное использование одного IRQ несколькими PCI-устройствами не является конфликтом по определению. Однако иногда проблемы все-таки возникают. Во-первых, не все устройства PCI корректно работают на одной линии прерывания с другими. Во-вторых, иногда драйверы имеют ошибки, из-за которых они не могут правильно определять источник сигнала, мешая другим драйверам. В-третьих, далеко не все устройства работают на шине PCI; например, ISA-устройства, к которым относятся, например, контроллеры COM/LPT-портов, делить прерывания с другими не умеют. Чтобы четко представлять себе, как можно избежать конфликтов или устранить их, нужно разобраться в механизме управления IRQ.

Организация аппаратных прерываний в персональном компьютере
Как вы знаете, персональные компьютеры начались с IBM PC. Его архитектура предусматривала восемь линий аппаратных прерываний (IRQ), которыми управлял специальный контроллер. Каждой из них назначался номер, который определял приоритет прерывания и адрес его обработчика (так называемый вектор прерывания). Новая архитектура, IBM PC AT, предусматривала еще восемь линий прерываний, для которых использовался второй контроллер, подключаемый к одной из линий прерывания первого контроллера. К сожалению, данная архитектура стала последней после того, как фирма IBM потеряла возможность управлять развитием созданной ею платформы, поэтому все современные компьютеры по-прежнему имеют только шестнадцать прерываний, одно из которых используется вторым контроллером.
У компьютера IBM PC AT была только одна шина, по которой устройства могли общаться с процессором и памятью - ISA. Большинство линий прерываний были закреплены за стандартными ISA-устройствами, оставшиеся были зарезервированы на будущее. Когда это будущее наступило, выяснилось, что новой универсальной шине PCI досталось всего четыре свободных прерывания. Поэтому и был придуман хитрый механизм совместного использования прерываний (IRQ Sharing) и динамического переопределения номеров (IRQ Steering или Mapping).
Суть механизма управления прерываниями PCI-устройств в следующем. В общем случае существует четыре физических линии PCI-прерываний, называемых PIRQ0, PIRQ1, PIRQ2 и PIRQ3. Они подключены к контроллеру прерываний. Каждое PCI-устройство со своей стороны как бы имеет четыре разъема, называемые INT A, INT B, INT C и INT D. Подключать линии к разъемам можно в любом порядке. Например, для первого PCI-слота можно сделать такую разводку: PIRQ0 - INT A, PIRQ1 - INT B, PIRQ2 - INT C, PIRQ3 - INT D. А для второго - по-другому: PIRQ0 - INT B, PIRQ1 - INT C, PIRQ2 - INT D, PIRQ3 - INT A. Обычно устройство требует только одну линию прерывания, подключенную к INT A. Будучи установленным в первый слот, устройство использует линию PIRQ0, а во втором слоте на том же контакте будет линия PIRQ1. Тем самым устройства в разных слотах будут использовать разные физические линии прерываний. Аппаратный конфликт между ними будет исключен.
Шина AGP, являясь по сути специализированной модификацией PCI, тоже использует одну из линий PIRQ - обычно PIRQ0.
Для современных систем четырех линий оказывается недостаточно, поэтому в новых чипсетах часто применяются восемь линий PIRQ, которые точно так же в разных комбинациях подключаются к слотам PCI и встроенным в плату устройствам.
Линии PIRQ подключаются к контроллеру прерываний. Им, как и другим линиям, назначаются логические IRQ-номера. Если на одной физической линии находятся несколько устройств (а это допустимо), то все они будут иметь один и тот же номер IRQ. Если устройства находятся на разных физических линиях, они все равно могут получить одинаковые номера IRQ. Нормальные драйверы позволят им свободно работать без потери производительности, так как шина PCI все равно может захватываться только одним устройством. Главное - распознать, от какого устройства пришел сигнал.
Номера линиям PIRQ назначаются автоматически благодаря пресловутому механизму Plug&Play. Но ведь есть и ISA-устройства, поддерживающие Plug&Play. Они тоже имеют возможность автоматически получить номер IRQ. Но их линия прерывания принадлежит им монопольно, и если такой же номер получит одна из линий PIRQ, возникнет неразрешимый конфликт.
Итак, мы выяснили, что устройства PCI должны быть лишены проблем с конфликтами IRQ. Если они, конечно, правильно работают, а так бывает не всегда. К тому же драйверы должны поддерживать механизм совместного использования прерываний. Устройства ISA не умеют делиться линиями прерываний и потому являются провокаторами конфликтов. Следовательно, задача устранения конфликтов сводится к правильному распределению номеров (источник проблем - ISA-устройства и "кривые" драйверы) или к разведению по разным физическим линиям ("кривые" PCI-контроллеры).
Давайте рассмотрим, каким образом в системе происходит распределение номеров и как мы можем повлиять на этот процесс.

Карта прерываний
Как я уже говорил, большинство номеров IRQ уже заняты стандартными устройствами, точнее, назначены их линиям прерываний. Пройдемся по порядку:
0 - системный таймер (номер всегда занят);
1 - клавиатура (номер всегда занят);
2 - второй контроллер прерываний (всегда занят);
3 - порт COM2 (может быть отключен, а номер - освобожден);
4 - порт COM1 (может быть отключен, а номер - освобожден);
5 - порт LPT2 (обычно номер свободен);
6 - контроллер гибких дисков (может быть отключен, а номер - освобожден);
7 - порт LPT1 (если не в режиме EPP или ECP, то номер свободен);
8 - часы реального времени (всегда занят);
9 - свободен;
10 - свободен;
11 - свободен;
12 - мышь PS/2 (может быть свободен, если нет такой мыши);
13 - сопроцессор (всегда занят);
14 и 15 - контроллер жестких дисков (может быть отключен, а номер - освобожден).
В типичной системе свободны номера 5, 7, 9-11, то есть пять из пятнадцати. Кроме того, можно смело отключить COM2 и LPT1-порты, увеличив число свободных номеров до семи. Свободны - не значит, что не заняты, просто между ними возможна свободная перетасовка.
В любой системе имеется три стандартных PCI-устройства - ACPI-, USB-контроллеры и видеокарта, каждое из которых займет по одному номеру. Сложное устройство (например, звуковая карта) может потребовать несколько линий - INT A, INT B и т.д. для своих компонентов, которые между собой не будут конфликтовать (как-никак разные физические линии), а вот с другими устройствами - запросто.
Узнать, как в данный момент распределены номера прерываний, можно несколькими способами. В самом начале загрузки компьютера появляется текстовая таблица конфигурации. Сразу после нее идет перечень PCI-устройств с указанием назначенного им номера IRQ (см. скриншот). Другой способ работает в Windows 9x. В панели управления есть иконка "Система", в вызываемом апплете - закладка "Устройства". Выбираем свойства устройства "Компьютер", и там будут перечислены все устройства с указанием их IRQ (см. скриншот).
В Windows 2000 у нас нет доступа к управлению прерываниями, поэтому для просмотра списка IRQ нужно воспользоваться стандартной информационной утилитой (Панель управления/Администрирование/Управление компьютером/Сведения о системе/Ресурсы аппаратуры).

Распределение номеров IRQ средствами BIOS
В системе номера IRQ распределяются между физическими линиями дважды. Первый раз это делает системный BIOS при начальной загрузке системы. Каждому Plug&Play-устройству (все PCI, современные ISA, интегрированные устройства), а точнее, его линии прерывания, назначается один номер из десяти возможных. Если номеров не хватает, несколько линий получают один общий. Если это линии PIRQ, то ничего страшного - при наличии нормальных драйверов и поддержки со стороны операционной системы (об этом см. ниже) все будет работать. А если один номер получают несколько ISA-устройств или PCI- и ISA-устройства, то конфликт просто неизбежен, и тогда нужно вмешиваться в процесс распределения.
Прежде всего, нужно отключить все неиспользуемые ISA-устройства (в системах без слотов ISA они тоже присутствуют) - порты COM1, COM2 и дисковод. Также можно отключить режимы EPP и ECP порта LPT, тогда прерывание IRQ7 станет доступно.
В BIOS Setup нам понадобится раздел "PCI/PNP Configuration". Есть два базовых способа повлиять на распределения номеров IRQ: заблокировать конкретный номер и напрямую назначить номер линии PIRQ.
Первый способ доступен для всех BIOS: найдите список пунктов "IRQ x used by:" (в новых BIOS скрывается в подменю "IRQ Resources"). Тем прерываниям, которые должны быть назначены исключительно ISA-устройствам, нужно поставить "Legacy ISA". Тем самым при раздаче номеров PCI-устройствам данные прерывания будут пропущены. Поступать так следует в том случае, если какое-либо ISA-устройство упорно становится на одно прерывание с PCI-устройством, из-за чего оба не работают. Тогда мы находим номер этого IRQ и блокируем его в BIOS Setup. PCI-устройство переходит на новый номер IRQ, а ISA-устройство остается. Конфликт разрешен.
Второй, более удобный способ управления номерами IRQ - прямое назначение. В том же подменю BIOS Setup могут быть пункты вида "Slot X use IRQ" (другие названия: "PIRQx use IRQ", "PCI Slot x priority", "INT Pin x IRQ").
С их помощью каждой из четырех линии PIRQ можно назначить конкретный номер. Кстати, в новых AwardBIOS 6.00 можно наблюдать, какие именно устройства (включая встроенные) используют ту или иную линию. Просто посмотрите на правую часть экрана BIOS Setup: на фото показано, как я навел курсор на пункт "Slot 1/5 use IRQ no.", а справа появилась надпись "Display Contr.". То есть первая линия PIRQ используется видеокартой. Если я сейчас поставлю какой-либо определенный номер вместо "Auto", видеокарта будет переведена на это прерывание.

Распределение номеров IRQ средствами Windows
Второй раз номера прерываний распределяются операционной системой. Как показали проведенные мной эксперименты, Windows"98 начинает вмешиваться в произведенные BIOS"ом действия только в крайних случаях. При наличии нормального BIOS описанные здесь приемы не понадобятся.
Следует заметить, что для правильной работы механизмов совместного использования IRQ и динамического распределения необходимо, чтобы Windows распознала чипсет материнской платы и загрузила IRQ Miniport. Чем более свежая версия у Windows, тем больше чипсетов поддерживает ее собственный минипорт (PCIIMP.PCI). Однако всегда лучше перестраховаться и установить самые свежие драйверы чипсета.
В Windows 98 управление системой распределения IRQ осуществляется с помощью стандартного менеджера устройств. В списке системных устройств нужно найти шину PCI. В ее свойствах есть особая закладка (см. скриншот). Если все настроено правильно, там будет упомянут минипорт ("успешно загружен"), а управление шиной PCI (Steering) будет включено. Таким образом, Windows"98 имеет средства для управления распределением номеров прерываний между физическими линиями. Но поскольку и BIOS чаще всего с этим хорошо справляется, этот механизм не задействуется.
Но иногда он просто необходим. Как я уже говорил, PCI-устройства не должны конфликтовать в случае, если они используют одно и то же логическое прерывание. Другое дело - ISA-устройства, к которым относятся также и COM- и LPT-порты. Если устройство не-Plug&Play, BIOS может его и не заметить, отдав занятое им прерывание PCI-устройству. Тогда нужно прерывание зарезервировать. Это делается в диспетчере устройств Windows"98: выбираем устройство "Компьютер", вызываем его свойства, переключаемся на вторую закладку. Дальше все понятно.
Кроме резервирования, можно непосредственно задать номер прерывания для устройства. Для этого нужно в его свойствах найти закладку "Ресурсы", отключить автоматическую настройку и попытаться изменить назначенный номер прерывания.
К сожалению, это работает далеко не всегда.
Windows 2000 - система особая. Если у вас современный компьютер, то он наверняка поддерживает интерфейс конфигурирования ACPI. Windows 2000 в таком случае вообще проигнорирует действия BIOS и "повесит" все PCI-устройства на одно логическое прерывание. В общем случае это будет отлично работать (когда нет ISA), но иногда случаются проблемы. Чтобы получить возможность изменять номера прерываний, нужно либо поменять HAL-ядро, либо переустановить Windows 2000 с отключенным в BIOS ACPI. Замена ядра производится так: в диспетчере устройств выбирайте "Компьютер"/"Компьютер с ACPI", меняйте драйвер на "Стандартный компьютер", перезагружайтесь. Если это не поможет, придется переустановить Windows 2000 заново.
Надеюсь, приведенная выше информация поможет вам в борьбе с глюками "железа". И помните: большинство возникающих проблем связано с низким уровнем компьютерной грамотности хозяина компьютера. Поэтому нужно всегда стремиться к самообразованию, тогда и проблем будет поменьше, а те, что все-таки возникнут - не будут казаться неразрешимыми.

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

Аппаратные ресурсы системы

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

Гораздо реже используются каналы прямого доступа к памяти (DMA - Direct Memory Access). Данный тип взаимодействия предназначен для устройств, обменивающихся большими блоками данных с оперативной памятью, например, дисковые накопители или принтеры. Весь обмен идет в обход центрального процессора, который лишь инициирует операцию обмена и сразу же приступает к выполнению другой работы. Такой подход способен значительно увеличить производительность всей системы.

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

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

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

Распределение прерываний

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

  • IRQ 0 - прерывание системного таймера. Генерируется 18,2 раза в секунду. Применяется в данном качестве с момента создания первого компьютера IBM PC (для другого использования этот номер недоступен);
  • IRQ 1 - прерывание клавиатуры. Генерируется контроллером клавиатуры при каждом нажатии на клавишу (для другого использования номер недоступен);
  • IRQ 2 в компьютерах класса XT, использовавших только 8 линий прерываний, был зарезервирован для дальнейшего расширения системы и, начиная с машин класса AT, стал использоваться для подключения второго контроллера. Сегодня IRQ 2 используется системой для совместимости со старым программным обеспечением, для другого использования номер недоступен;
  • IRQ 3 - прерывание асинхронного порта COM 2. Этим же прерыванием пользуются еще и устройства, работающие через порт COM 4. При желании их можно отключить, но присвоить IRQ 3 все равно больше никому не удастся;
  • IRQ 4 по аналогии с предыдущим, это прерывание используется устройствами, занимающими порты СОМ 1/COM 3;
  • IRQ 5 изначально предназначалось для использования вторым параллельным портом LPT2, но потом, когда от второго параллельного порта отказались, IRQ 5 перешло в разряд свободных. Позже активно использовалось большинством звуковых карт ISA. современные PCI-звуковые карты используют это прерывание исключительно для совместимости со старыми играми, подавляющее большинство которых поддерживают SB Pro. IRQ 5 можно использовать для других целей и привязать к слоту PCI;
  • IRQ 6 , начиная с первых PC, используется флоппи-контроллером (для другого использования номер недоступен);
  • IRQ 7 - по умолчанию прерывание первого параллельного порта LPT 1. При отключенном порте (если принтер отсутствует или рассчитан на USB) может использоваться различными устройствами. IRQ 7 можно привязать к слоту PCI;
  • IRQ 8 - прерывание часов реального времени, впервые появившихся в IBM AT. Другое использование невозможно;
  • IRQ 9 и IRQ 10 свободны;
  • IRQ 11 обычно резервируется для шины USB, однако может применяться и в других целях (для этого следует отключить поддержку USB в BIOS);
  • IRQ 12 используется для мыши типа PS/2, однако может применяться в других целях (если мышь PS/2 отсутствует или отключена);
  • IRQ 13 изначально применялось арифметическим сопроцессором, и теперь оно зарезервировано для совместимости со старым программным обеспечением (для другого использования номер недоступен);
  • IRQ 14 и IRQ 15 применяются, соответственно, первичным и вторичным IDE-контроллерами.

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

Или, если Вы все еще работаете с Windows 9x, то в панели управления есть иконка Система, щелкните на ней - и выбирайте закладку "Устройства". В свойствах устройства "Компьютер" можно найти перечень всех устройств с указанием их IRQ. В Windows 2000/ХР у нас нет непосредственного доступа к управлению прерываниями, поэтому для просмотра списка IRQ нужно воспользоваться стандартной информационной утилитой (Панель управления/Администрирование/Управление компьютером/Сведения о системе/Ресурсы аппаратуры). Ну и, наконец, никто не отменял использование утилит, тестирующих аппаратные и программные возможности компьютера.


Среди них, без сомнения, самой популярной является SANDRA, способная предоставить пользователю исчерпывающую информацию, в том числе и о прерываниях.

Конфликты устройств

Не вдаваясь в излишние детали, можно сказать, что конфликт - это ситуация, при которой несколько объектов одновременно пытаются получить доступ к одному и тому же системному ресурсу. Конфликт прерываний возникает в том случае, если несколько устройств используют одну и ту же линию прерывания для посылки сигнала запроса и отсутствует механизм, позволяющий ранжировать эти запросы, в результате чего происходит либо сбой, либо одно из устройств попросту перестает работать. Чтобы четко представлять себе, как можно избежать конфликтов или устранить их, нужно разобраться в механизме управления IRQ.

Как Вы знаете, персональные компьютеры начались с IBM PC ХТ. Его архитектура предусматривала всего восемь линий аппаратных прерываний, которыми управлял специальный контроллер. Каждой из них назначался свой уникальный номер, который определял приоритет прерывания и адрес его обработчика (так называемый вектор прерывания). Следующий вариант архитектуры, IBM PC AT, дополнил существующие линии еще восемью, для управления которыми использовался второй контроллер, подключаемый к одной из линий прерывания первого контроллера. К сожалению, на этом данная архитектура остановилась в своем развитии, поэтому все современные компьютеры, несмотря на значительно возросшее число используемых в них дополнительных устройств, по-прежнему имеют только шестнадцать линий прерываний, одно из которых резервируется для эмуляции второго контроллера.

Изначально у компьютера IBM PC AT была только одна шина, по которой устройства могли общаться с процессором и памятью - ISA. Большинство линий прерываний были закреплены за стандартными ISA-устройствами, поэтому, когда появилась новая универсальная шина PCI, выяснилось, что на ее долю осталось всего четыре свободные прерывания, обозначаемые как INT A, INT B, INT C, INT D, поэтому всего только четыре PCI устройства могут получить в системе независимые прерывания. Но при этом необходимо учитывать, что на особенном положении находится контроллер IDE, который не входит в число тех четырех устройств только потому, что, хотя по способу передачи данных он и является PCI-устойством, но за ним жестко закреплены свои прерывания IRQ 14 и IRQ 15, как для старых устройств ISA. Для шины AGP, которая является разновидностью шины PCI, "пожертвован" INT A, а шина USB, как один из системных компонентов, подключается к PCI, используя INT D, что уменьшает число "честных" PCI устройств всего до двух. Не следует забывать и о подсистеме управления питанием Power Management/System Management, которая так же требует своего прерывания. Таким образом, в реальной жизни, при наличии нескольких устройства PCI, использующих прерывания, невозможно обеспечить им уникальные аппаратные IRQ, и в таких случаях используются аппаратно-программный способ, основанный на базе технологии Plug & Play, что теоретически позволяет избежать возникновения конфликтов. Хотя в реальной жизни может случиться все, что угодно, да и оставшиеся до сих пор устройства ISA не умеют делиться линиями прерываний, потому являются основными провокаторами конфликтов. Таким образом, задача устранения конфликтов сводится к правильному распределению номеров прерываний в случае возникновения проблем с устройствами ISA или "глючными" драйверами.

В системе номера IRQ распределяются между физическими линиями дважды. Первый раз это делает системный BIOS при начальной загрузке системы. Каждому Plug & Play-устройству (а к ним относятся все PCI, современные ISA и все интегрированные на системной плате устройства) назначается один номер из числа доступных. Если номеров не хватает, несколько линий получают один общий. Для устройств PCI это не страшно - при наличии нормальных драйверов и поддержки со стороны операционной системы все должно нормально работать. А вот если один номер получают несколько ISA-устройств или не менее "гремучая" смесь из PCI- и ISA-устройств, то конфликт попросту неизбежен, и тогда придется вмешиваться в процесс автоматического распределения прерываний. В этом случае необходимо отключить все неиспользуемые ISA-устройства (в системах без слотов ISA они, тем не менее, присутствуют: это порты COM1, COM2 и дисковод). Также можно отключить режимы EPP и ECP порта LPT, освободив при этом прерывание IRQ7. Все операции по изменению прерываний в BIOS Setup осуществляются в разделе "PCI/PNP Configuration". Есть два способа повлиять на распределения номеров IRQ: заблокировать конкретный номер и напрямую назначить номер линии. Первый способ доступен для всех BIOS, корректируются пункты меню "IRQ x used by:" (в новых BIOS скрывается в подменю "IRQ Resources"). Тем прерываниям, которые должны быть назначены исключительно ISA-устройствам, нужно поставить "Legacy ISA". Тем самым при раздаче номеров для PCI-устройств данные прерывания будут пропущены. Поступать так следует в том случае, если какое-либо ISA-устройство упорно становится на одно прерывание с PCI-устройством, из-за чего оба они не работают. В таком случае необходимо найти номер этого IRQ и заблокировать его. PCI-устройство переходит на новый номер IRQ, а ISA-устройство остается "при своих". Второй способ управления номерами IRQ - прямое назначение, хотя и несколько сложнее первого, но гораздо более эффективный. Очень прискорбно, что далеко не все современные системные платы позволяют осуществлять эту операцию. В том же подменю BIOS Setup могут быть пункты вида "Slot X use IRQ" (другие названия: "PIRQx use IRQ", "PCI Slot x priority", "INT Pin x IRQ"). Эта опция позволяет устанавливать прерывания индивидуально каждому устройству на PCI и AGP шине. При этом необходимо соблюдать следующие правила:

  • Каждый PCI слот может активизировать до четырёх прерываний - INT A, INT B, INT C и INT D;
  • AGP слот может активизировать два прерывания - INT A и INT B;
  • Нормально когда каждый слот назначен как INT A. Остальные прерывания зарезервированы, если PCI/AGP устройство потребует больше, чем одно прерывание или если запрашиваемое прерывание занято;
  • AGP слот и PCI слот 1 распределяют одинаковые прерывания;
  • PCI слоты 4 и 5 так же распределяют одинаковые прерывания;
  • USB использует PIRQ_4.

Ниже приведена таблица, показывающая связь между PIRQ (Programmable Interrupt Request - программируемый запрос прерывания) и INT (Interrupt - прерывание):

Сигнал AGP Slot
PCI Slot 1
PCI Slot 2 PCI Slot 3 PCI Slot 4
PCI Slot 5
PIRQ_0 INT A INT D INT C INT B
PIRQ_1 INT B INT A INT D INT C
PIRQ_2 INT C INT B INT A INT D
PIRQ_3 INT D INT C INT B INT A

Обычно следует оставить опцию в положении AUTO. Но, если возникла необходимость установить индивидуальное IRQ устройству на AGP или PCI шине, прежде всего, необходимо определить, в каком слоте установлено устройство. Потом, сверившись с таблицей, можно установить основной PIRQ. Например, если сетевая карта установлена в слот 3, то основной PIRQ будет PIRQ_2, потому как все слоты назначаются, по возможности, на INT A. После этого выбирается желаемое IRQ, присваивая ему соответствующее значение PIRQ. Только необходимо помнить, что BIOS будет пытаться назначить PIRQ в INT A для каждого слота. Так что, для AGP и PCI 1 слотов основной PIRQ это PIRQ_0, тогда как для PCI слота 2 основной PIRQ это PIRQ_1 и так далее. Второй раз номера прерываний распределяются операционной системой, хотя Windows 9х начинает вмешиваться в произведенные BIOS-ом действия только в крайних случаях. В Windows 98 управление системой распределения IRQ осуществляется с помощью стандартного менеджера устройств. В списке системных устройств нужно найти шину PCI.


В ее свойствах есть особая закладка. Если все настроено правильно, там будет упомянут минипорт ("успешно загружен"), а управление шиной PCI (Steering) будет включено. Таким образом, Windows"98 имеет средства для управления распределением номеров прерываний между физическими линиями. Но поскольку и BIOS чаще всего с этим хорошо справляется, этот механизм не задействуется. Но иногда он просто необходим. При использовании устаревших ISA-устройств, не поддерживающих технологию Plug & Play, BIOS может его и не заметить, отдав занятое им прерывание PCI-устройству - опять конфликт. Для его разрешения необходимо нужное прерывание зарезервировать в диспетчере устройств Windows"98.

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

А вот о Windows 2000 (а равно и ХР) - разговор отдельный. Если у Вас достаточно современный компьютер, то он наверняка поддерживает интерфейс конфигурирования ACPI. Windows 2000 в таком случае вообще проигнорирует действия BIOS и "повесит" все PCI-устройства на одно логическое прерывание. В общем случае это будет отлично работать (когда нет устройств ISA), но иногда могут возникнуть проблемы. Чтобы получить возможность изменять номера прерываний, нужно либо поменять HAL-ядро, либо переустановить Windows 2000 с отключенным в BIOS ACPI. Замена ядра производится так: в диспетчере устройств выбирается "Компьютер/Компьютер с ACPI", после этого необходимо изменить драйвер на "Стандартный компьютер" и перезагрузиться. Если это не поможет, придется переустановить Windows 2000 заново.

Заключительные советы

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

Управление приоритетами IRQ

Управление запросами на аппаратное прерывание

Большинству компонентов, непосредственно присоединенных к системной плате, включая PCI-слоты, IDE-контроллеры, последовательные порты, порт клавиатуры даже CMOS системной платы, присвоены отдельные IRQ. Запрос на аппаратное прерывание, или IRQ, прерывает нормальный ход работы процессора, позволяя устройству функционировать. Windows 7 позволяет расположить по приоритету один или более IRQ (которые преобразовываются в одно или более устройств), потенциально улучшая произво­дительность этих устройств.

Действия для изменения приоритета IRQ

  1. Начните с запуска утилиты информации о системе (msinfo32.exe) и откройте ветвь Сведения о системе Аппаратные ресурсы Прерывания (IRQ), чтобы про­смотреть, какие IRQ и для каких устройств используются.
  2. Затем откройте редактор реестра (см. главу 3) и перейдите к ветви HKEY_LOCAL_ MACHINE\SYSTEM\CurrentControlSet\Control\PriorityControl.
  3. Создайте новое значение DWORD в этом разделе и назовите параметр IRQ#Priority, где # - номер IRQ-устройства, для которого вы хотите задать приоритет (напри­мер, IRQ13Priority соответствует IRQ 13, то есть арифметическому сопроцес­сору).
  4. Дважды щелкните на новом значении и укажите номер приоритета. Введите 1 для высшего приоритета, 2 для второго и т. д. Удостоверьтесь, что не ввели одно и то же число для двух записей, и не пытайтесь сделать все сразу, лучше поэкспериментируйте с одним или двумя значениями.
  5. По окончании закройте редактор реестра и перезагрузите компьютер.

Прерывания подразделяются на аппаратные (маскируемые и немаскируемые) и программные. Программные прерывания, собственно, прерываниями не являются, это способ вызова определенных процедур. Но процессором программные прерывания обрабатываются как один из типов прерываний.

То, что в соответствии с PCI-спецификациями должны уметь все PCI-карты, но в действительности очень редко реализуется, называется "IRQ-Sharing". Теоретически это означает, что несколько компонент должны довольствоваться одним и тем же IRQ. Но поскольку лишь немногие PCI-карты общаются друг с другом столь гармонично, "Windows 9x" ставит в соответствие каждой карте, насколько это возможно, собственный IRQ. Сложности конфигурирования системных ресурсов, их распределения между сетевыми и звуковыми картами, 3D-ускорителями, стандартными последовательными и параллельными устройствами, а ныне еще видео — и DVD-декодерами постепенно ослабляются с массовым внедрением USB-шины, точнее массовым распространением USB-периферии. Правда, шина USB сама занимает один IRQ. Но зато она обязана включить в систему без дальнейшего расходования ресурсов все периферийные устройства, будь то мышь, клавиатура, сканер или видеокамера.

Еще один термин. "Polling mode" — работа устройства без использования прерываний. Это встречается при работе с простыми SCSI-контроллерами на шине ISA.

Устройство

Комментарии

Системный таймер

Системное прерывание. Генерируется 91 раз за 5 сек. В данном качестве применяется со времени первого PC.

Клавиатура

Системное прерывание, генерируемое контроллером клавиатуры.

Контроллер прерываний

Каскадировано (связано) с IRQ9. Могут возникнуть конфликты, когда одновременно на IRQ2 и IRQ9 должны работать различные устройства. Его использование системой сохраняется для совместимости.

Используется вторым коммуникационным адаптером (UART2). Какое же устройство будет его генерировать? Это может быть второй последовательный порт COM2 (интегрирован на материнской плате), внутренний модем, настроенный на COM2 или COM4, или инфракрасный адаптер. Можно отключить UART2, но присвоить IRQ3 ничему не удастся. Делит одно и то же IRQ3 с COM4 (при наличии последнего). Возможен конфликт при одновременном использовании.

Устройство

Комментарии

Используется первым коммуникационным адаптером. Все практически идентично: генерируется первым последовательным портом COM1, модемом на COM1 или COM3 (за исключением инфрапорта). Делит одно и то же IRQ4 с COM3 (при наличии последнего). В системах с подключенной к COM1 мышью использовать COM3 не следует.

свободен

Прерывание изначально предназначалось для использования вторым параллельным портом LPT2. Практического применения такое решение не нашло, поэтому IRQ5 перешло в разряд свободных. В IBM XT на IRQ5 "висел" жесткий диск. Через некоторое время "Creative Labs", создавая звуковую карту "Sound Blaster Pro", нашла применение прерыванию. С тех пор IRQ5 стало излюбленным для большинства звуковых ISA-карт. Звуковые PCI-карты также иногда используют это прерывание для эмуляции "SB Pro". IRQ5 можно привязать к слоту PCI.

Устройство

Комментарии

Контроллер FDD-дисковода

Прерывание используется контроллером флоппи-дисковода, начиная с первых ПК. Однако прерывание все равно не может быть использовано: ISA-карты на работу с ним не рассчитаны, и к слоту PCI привязать его нельзя.

По умолчанию прерывание первого параллельного порта LPT1. При отключенном порте (если принтер отсутствует или рассчитан на USB) может использоваться различными устройствами: сетевыми, ISDN-картами. Это также "запасное" место для звуковых карт.

Часы реального времени (RTC)

Системное прерывание со времени первых IBM AT.

свободен

Каскадировано с IRQ2. В остальном может использоваться по усмотрению.

свободен

Может быть использовано по усмотрению. Устаревшие IDE-контроллеры на старых звуковых картах иногда используют это IRQ.

Устройство

Процессор перегружен? Виноваты системные прерывания.

Виной тому, что процессор перегружен практически в течение всего сеанса, могут быть так называемые системные прерывания, а это, в свою очередь, означает, что проблема кроется в области установленного на компьютере оборудования или драйверах для этих устройств. Но предупреждаю сразу: даже объёма всей этой статьи не хватит, чтобы вычленить все причины (и тем более варианты их решений) почему системные прерывания просто убивают Windows. Ибо подход к поиску проблем усложняется использованием куда более сложного инструмента, чем тот, что описывается здесь.

Что такое системные прерывания и как попробовать справиться с перегрузкой процессора?

Системные прерывания появляются в Диспетчере задач в качестве системного процесса, однако по сути они таковым не являются. Эта « » носит лишь репрезентативный характер, отображая загруженность процессора при работе с прерываниями на низком уровне. Она – неотъемлемая часть Windows, убить процесс нельзя. Несмотря на зловещее название, системные прерывания – обязательная и нормальная часть процесса взаимодействия ЦПУ и остального оборудования.

Причиной прерываний (точнее, слишком медленной время от времени работы) могут служить девайсы внутри вашего компьютера, установленные программы, а иногда и сам процессор. Ведь системные прерывания – есть некая форма взаимодействия между программой/«железом» и самим процессором. Всякий раз, когда новому процессу нужно появиться в системе, процессор бросает все дела и выполняет задачу. Неважно, нажал ли пользователь мышку или процесс запущен по расписанию, задача сразу добавляется в очередь на исполнение. По её выполнению процессор возвращается к предыдущему состоянию.

Как понимаете, системные прерывания вполне могут сигнализировать системе и пользователю, что в данный момент некоторые вычисления идут с ошибкой, что и выражается в серьёзных потреблениях ресурсов процессора этим «процессом». В здоровой системе системные прерывания «потребляют» НЕ БОЛЕЕ 2% от общего объёма работы процессора. Хотя мне встречались и процессоры с показателем прерывания от 3 до 10 %% – всё зависит от конфигурации. Но если вы заметили, что процессор тратит на прерывания хотя бы 5 – 10 %% от своей вычислительной мощности от сеанса к сеансу, это сигнал того, что у компьютера проблемы.

Системные прерывания. Как бороться с высокими показаниями?

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

  • ДРАЙВЕРЫ И ЕЩЁ РАЗ ДРАЙВЕРЫ

Самое первое средство, которое поможет определить, виноваты ли битые драйверы в том, что системные прерывания нагружают процессор, это немецкая утилита DPC Latency Checker . Скачайте её по этой ссылке:

Установки не потребуется. Суть утилиты проста. Запускаем и начинаем работу в Windows до тех пор, пока системные прерывания не начнут нам мешать. Вот окно нормально работающей сборки:

А вот они начинают себя проявлять:

Утилита в поле комментария на английском языке советует вам перейти в Диспетчер устройств и приступить к поэтапному отключению сетевых устройств, звуковых карт, USB контроллеров, устройств bluetooth . Советую прислушаться. После каждого отключения всматривайтесь в Диспетчер задач и окно утилиты, посмотрите, как система реагирует на временное отключение оборудования. Продолжите отключением всех внешних устройств: модемы, внешние диски, флешки. И если в какой-то момент наметятся изменения к лучшему, примите решение об обновлении драйвера к устройству. Но чтобы не было проблем с запуском Windows, вот эти устройства лучше не отключать (эти драйверы жизненно необходимы, но это тоже драйверы, и вполне возможно придётся переустановить дрова на материнскую всем пакетом как при установке Windows начисто):

На такой же манер действует и программа LatencyMon

http://www.resplendence.com/downloads

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

http://www.resplendence.com/latencymon

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

СКАЧАТЬ БЕСПЛАТНО ПРОГРАММУ

Запустившись, та сразу сообщила мне о возможных проблемах с DVD приводом – драйвер atapi.sys отвечает именно за него (а кстати, привод не работает уже почти 3 месяца…) . Предупреждает, что возможно потребуется перепрошить BIOS:

Переходим во вкладку Drivers и отсортируем их по наиболее уязвимым показаниям, нажав на колонку DPC count :

К первым в строчке присмотритесь: они и могут быть причиной ваших проблем.

  • ВСЁ ПРОИЗОШЛО КАК-ТО ВДРУГ, ПОСЛЕ ПЕРЕЗАГРУЗКИ

Был один момент, когда ну никак не удавалось вычленить причину тормозов. Помог случай: пользователь “хапнул” вирус, который совершенно уничтожил DirectX, причём действовал крайне избирательно, убивая именно системные файлы Windows, оставляя DirectX игровые . Пришлось ремонтировать систему обновлением, и – о чудо! – вместе с дрянью пропали и системные прерывания. Я не пожалел немного времени, но результат оказался неожиданный. Виновниками оказались не вирусы и не драйверы, а пакеты обновлений. Вот их имена:

  • KB3199986
  • KB4013418
  • KB3211320

Я настаиваю, что именно ПОСЛЕ УСТАНОВКИ ИМЕННО ЭТИХ ОБНОВЛЕНИЙ конкретный пользователь начинал мучиться от перегрузки системными прерываниями. Как-то так… вам информация к размышлению.

  • ИСКЛЮЧАЕМ НЕИСПРАВНОЕ ОБОРУДОВАНИЕ

Тоже может послужить причиной того, что системные прерывания нагружают процессор донельзя. Приступайте к проверке, если предыдущий поиск битых драйверов успеха не принёс. А поможет вам в поиске проблем с “железом” сама Windows и встроенные утилиты самодиагностики. О них я писал уже в статье . Пробегите глазами, информация окажется полезной, не сомневайтесь. Знайте – отошедшие от разъёма шлейфа также могут быть виновниками злоключений. Я лично сталкивался с проблемами и перегрева процессора, и “забывчивости” про-апгрейдить BIOS для новенькой Windows 10 (об этом ниже) – везде итогом были заметные системные прерывания.

ПРИМЕЧАНИЕ . Если системные прерывания одолели ваш ноутбук, вам придётся убедиться, что у вас нет проблем с умирающим аккумулятором. Прочтите статью, собственными силами.

  • ПРОВЕРЬТЕ ЗВУКОВУЮ СХЕМУ WINDOWS

Собственно, речь идёт о том, чтобы сбросить звуковые эффекты в Windows до установленных по умолчанию. Щёлкните по иконке звука правой мышкой и нажмите на Устройства воспроизведения :

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

  • ВИНОВАТА BIOS ?

Не исключено. BIOS – первая программа, которая запускается после нажатия на кнопку включения компьютера. Так что время проверить обновления для вашей BIOS. А чтобы поиски нужной версии не затягивались во времени, проверьте версию вашей BIOS прямо сейчас. В консоли команд cmd наберите последовательно две команды:

Systeminfo | findstr /I /c:bios wmic bios get manufacturer, smbiosbiosversion

I в первой команде – это большая латинская i .

Причина в жёстком диске?

“Вполне себе и даже очень”. Самый простой способ – проверьте диск на ошибки с помощью встроенных средств типа chkdsk . Если после “прогона” системные прерывания поутихли, причина обнаружена. Однако в случае, когда проблема появляется вновь и вновь, при всём том chkdsk неизменно обнаруживает ошибки, у вас проблемы (с жёстким, БП или материнской платой) – готовьтесь к худшему.

P.S. Ну, судя по отзывам проблема народ теребит. Обещаю тему развить в следующих статьях.

Успехов вам.

Прочитано: 1 275