Конфликт irq прерываний windows 10

Конфликт irq прерываний windows 10

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

Прерывания — это базовый механизм реакции системы на возникающие события. Аппаратные прерывания, называемые обычно 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-контроллеры).
Давайте рассмотрим, каким образом в системе происходит распределение номеров и как мы можем повлиять на этот процесс.

Читайте также:  Sp4 для windows 2012

Как я уже говорил, большинство номеров 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 нужно воспользоваться стандартной информационной утилитой (Панель управления/Администрирование/Управление компьютером/Сведения о системе/Ресурсы аппаратуры).

Читайте также:  Полное удаление файлов windows

Распределение номеров 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

Что такое IRQ (запрос прерывания)?

Устройства отправляют IRQ процессору для запроса доступа

IRQ, сокращение от Interrupt Request, используется на компьютере для отправки именно этого – запрос на interrupt ЦП другим аппаратным обеспечением.

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

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

Каждое устройство передает запрос по уникальной линии данных, называемой каналом. Большую часть времени вы видите IRQ со ссылкой, он находится рядом с этим номером канала, который также называется IRQ number . Например, IRQ 4 может использоваться для одного устройства, а IRQ 7 – для другого.

Читайте также:  Linux смонтировать сетевую папку windows

Примечание. IRQ произносится как буквы I-R-Q, а не как erk .

Ошибки IRQ

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

Примечание. См. Как исправить ошибки STOP 0x00000008 или Как исправить ошибки STOP 0x00000009, если у вас возникла одна из этих ошибок остановки.

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

Так как программируемый контроллер прерываний (PIC) не поддерживает это, компьютер может зависнуть или устройства перестанут работать должным образом (или перестанут работать полностью).

Еще в первые дни Windows ошибки IRQ были обычным явлением, и для их устранения потребовалось немало проблем. Это было связано с тем, что чаще было устанавливать каналы IRQ вручную, как с DIP-переключателями, что повышало вероятность того, что более одного устройства использовали одну линию IRQ.

Однако IRQ обрабатываются намного лучше в новых версиях Windows, в которых используется технология «включай и работай», поэтому вы редко увидите конфликт IRQ или другую проблему IRQ.

Просмотр и редактирование настроек IRQ

Самый простой способ просмотра информации IRQ в Windows – с помощью диспетчера устройств. Измените параметр меню Просмотр на Ресурсы по типу , чтобы увидеть раздел Запрос прерывания (IRQ) .

Вы также можете использовать Системную информацию. Выполните команду msinfo32.exe в диалоговом окне «Выполнить» ( Ключ Windows + R ), а затем перейдите к Ресурсы аппаратного обеспечения> IRQ .

Пользователи Linux могут запустить команду cat/proc/interrupts , чтобы просмотреть сопоставления IRQ.

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

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

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

  1. Откройте диспетчер устройств.
  2. Дважды щелкните или дважды нажмите устройство, чтобы открыть его окно Свойства .
  3. На вкладке Ресурсы отмените выбор параметра Использовать автоматические настройки .
  4. Используйте раскрывающееся меню «Настройки на основе:» для выбора конфигурации оборудования, которое необходимо изменить.
  5. В Настройки ресурса> Тип ресурса выберите Запрос прерывания (IRQ) .
  6. Используйте кнопку Изменить настройки … , чтобы изменить значение IRQ.

Примечание. Если вкладка «Ресурсы» отсутствует или «Использовать автоматические настройки» неактивны или неактивны, это означает, что либо вы не можете указать ресурс для этого устройства, так как он подключен и работает или что у устройства нет других настроек, которые могут быть применены к нему.

Общие IRQ каналы

Вот для чего используются некоторые из наиболее распространенных каналов IRQ:

IRQ Line Описание
IRQ 0 Системный таймер
IRQ 1 Контроллер клавиатуры
IRQ 2 Получает сигналы от IRQ 8-15
IRQ 3 Контроллер последовательного порта для порта 2
IRQ 4 Контроллер последовательного порта для порта 1
IRQ 5 Параллельный порт 2 и 3 (или звуковая карта)
IRQ 6 Контроллер дискеты
IRQ 7 Параллельный порт 1 (часто принтеры)
IRQ 8 CMOS/часы реального времени
IRQ 9 Прерывание ACPI
IRQ 10 Периферийные устройства
IRQ 11 Периферийные устройства
IRQ 12 Подключение мыши PS/2
IRQ 13 Числовой процессор данных
IRQ 14 Канал ATA (основной)
IRQ 15 Канал ATA (вторичный)

Примечание. Поскольку IRQ 2 имеет предназначенную цель, любое устройство, настроенное для его использования, будет использовать IRQ 9.

Оцените статью
Adblock
detector