Управление запросами на аппаратное прерывание. Аппаратные прерывания IRQ 3 для чего используется номер прерывания irq

Начнем с понятия «прерывание».
Прерывание - это событие, которое говорит системе, что что-то произошло, и требует вмешательства.
Такими событиями могут быть: нажатая клавиша на клавиатуре, сигнал от модема, всевозможные ошибки (вроде деления на нуль) и тому подобное.

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

С программными прерываниями (INT - Interrupt) просто - программа вызывает запрос на прерывание (на языке ассемблера это INT xx, где xx - номер прерывания), после чего процессор сохраняет адрес возврата в программу и флаги состояния процессора, и переходит к обработчику прерывания.
Найти адрес программы-обработчика процессору очень просто (даже думать не приходится) - первый килобайт оперативной памяти содержит адреса этих программ.

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

Аппаратные прерывания организуются немного сложнее - у каждой шины (PCI, ISA и т. д.) существуют определенные линии (читай - контакты), которые отвечают за прерывания, вызываемые устройствами.
Номера аппаратных прерываний не прямо соответствуют адресам программных, то есть аппаратному IRQ 0 соответствует INT 8, и так далее по таблице.

Зачем, спрашивается, нужны эти IRQ?
Во-первых - постоянно опрашивать все устройства на предмет «а не желаете ли Вы нам что-нибудь этакое передать?» просто непозволительно с точки зрения производительности.

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

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

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

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

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

0 (INT 08h) - системный таймер
. 1 (INT 09h) - контроллер клавиатуры
. 2 (INT 0Ah) - сопряжен с видеокартой на XT; на AT и выше используется для каскадирования второй микросхемы контроллера прерываний
. 3 (INT 0Bh) - стандартный для COM2/COM4
. 4 (INT 0Ch) - стандартный для COM1/COM3
. 5 (INT 0Dh) - обычно свободен, но на XT на этом IRQ находился контроллер жесткого диска
. 6 (INT 0Eh) - контроллер FDD
. 7 (INT 0Fh) - прерывание параллельного порта (LPT), однако многими LPT-контроллерами не используется
. 8 (INT 70h) - часы реального времени (RTC - Real Time Clock), прерывание вызывается 18,2 раза в секунду
. 9 (INT 71h) - эмуляция IRQ2 (для совместимости)
. 10 (INT 72h) - свободен
. 11 (INT 73h) - свободен
. 12 (INT 74h) - контроллер PS/2 мыши
. 13 (INT 75h) - математический сопроцессор
. 14 (INT 76h) - первый канал контроллера IDE HDD
. 15 (INT 77h) - второй канал контроллера IDE HDD

Что же это за звери - IRQ2 и IRQ9, которые связаны каким-то непонятным образом?
Дело в том, что на компьютерах XT (помните еще такие?) была всего одна микросхема, отвечающая за обработку аппаратных прерываний.
Возможности этой микросхемы были, мягко скажем, скудны - она могла обслуживать только аппаратные прерывания.

Но в нее был заложен потенциал - при каскадировании одного из прерываний на другую микросхему можно было подключить еще несколько таких наборов логики, и на компьютерах IBM AT таких микросхем было уже две, а аппаратных прерываний - 16.
Так как доступ ко второй микросхеме на аппаратном уровне осуществлялся через IRQ 2 первой (мост IRQ2-IRQ9), то использование в своих нуждах IRQ 2 или IRQ9 имело ряд особенностей.

Когда устройство, работающее на IRQ2, вызывало прерывание, новая логика AT аппаратно отправляла его на IRQ9, после чего BIOS, в свою очередь, перенаправлял сигнал на IRQ2 - чтобы программное обеспечение, рассчитанное на работу с IRQ2, имело возможность нормально работать с девайсом.

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

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

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

Передача данных ведется по так называемым каналам, которых всего семь:

0 - используется для регенерации памяти в некоторых системах
. 1 - свободен
. 2 - обслуживает контроллер FDD
. 3 - свободен (на XT - контроллер жесткого диска)
. 5 - свободен
. 6 - свободен
. 7 - свободен

Следует учитывать, что каналы 0-3 - восьмиразрядные, а каналы 5-7 - шестнадцатиразрядные.
Именно поэтому старый добрый SB 16 требовал два канала DMA - один (обычно первый) восьмибитный, а второй - шестнадцатибитный.

Драйвер AMD Radeon Software Adrenalin Edition 19.9.2 Optional

Новая версия драйвера AMD Radeon Software Adrenalin Edition 19.9.2 Optional повышает производительность в игре «Borderlands 3» и добавляет поддержку технологии коррекции изображения Radeon Image Sharpening.

Накопительное обновление Windows 10 1903 KB4515384 (добавлено)

Бывало ли у вас так: вы включаете сканер или подключаете внешний привод компакт дисков, и в этот момент вся система начинает заметно тормозить и вести себя неадекватно: мышь по экрану двигается рывками, звук начинает заикаться или отключается... Бывают и более тяжелые случаи. Например, после установки новой звуковой платы, при любых попытках вывести звук, даже при старте Windows, компьютер зависает насмерть. Если бывало, то эта статья – о вашем случае. Если нет, то все равно прочтите эту статью – если вдруг это случится, то вы будете знать, что делать.

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

Немного истории

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

Давным-давно, в далекой Америке, был разработан процессор x86, который является прародителем всех процессоров, используемых в персональных компьютерах стандарта IBM PC. То есть все Pentium и Athlon имеют в своей основе старый, добрый процессор x86. Архитектура современных процессоров уже очень сильно отличается от первого x86, тем не менее, некоторые моменты сохранились с тех давних времен, когда x86 процессор находился в начале своего пути, а именно с середины восьмидесятых годов прошлого века. Одним из таких моментов является ограничение количества линий аппаратных прерываний для центрального процессора.

Аппаратное прерывание – это реакция процессора на события, происходящие асинхронно по отношению к исполняемому программному коду. То есть прерывание – это момент когда центральный процессор по запросу от вызвавшего прерывание устройства откладывает выполняемую задачу и переключается на задачу, необходимую для работы устройства. После того, как задача для устройства выполнена, процессор вновь переключается на выполнение основной программы. Звуковую карту прерывание заставляет проиграть следующую микросекунду звука, а видеокарту прерывание заставляет сделать следующий кадр. С помощью прерываний центральный процессор заставляет жить весь компьютер. Линия аппаратного прерывания – это, утрированно говоря, физический провод, соединяющий микросхему контроллера прерываний и устройство. Количество линий аппаратных прерываний центрального процессора ограничено цифрой 16, то есть и устройств, использующих линии аппаратного прерывания, не может быть больше 16. Для организации линий аппаратных прерываний внутри компьютера используется специализированная микросхема - контроллер прерываний (PIC, Programmable Interupt Controller). Эта микросхема совместима по системе программных команд с микросхемой 8259A, которая имела всего 8 входов и использовалась в компьютерах класса IBM PC XT (8086 процессор). С выходом IBM PC AT (процессор 80286) внутренняя структура организации прерываний изменилась. Прерываний стало вдвое больше за счет использования еще одной микросхемы 8259A, которую подключили ко второй линии первой микросхемы. Такая архитектура стандартного контроллера прерываний сохранилась и по сей день, причем никаких изменений на ближайшее будущее не намечается. Даже с приходом на рынок 64-битных x86 совместимых процессоров ситуация не изменится. Линии аппаратных прерываний обозначили значением – IRQ (Interupt ReQuest). Как уже упоминалось, физически у компьютера имеется 16 линий аппаратных прерываний, но эта цифра сильно уменьшается за счет прерываний? уже использованных встроенными устройствами. Некоторые прерывания имеют статус системных, поэтому их использование и переназначение их номера по желанию пользователя невозможно. В таблице они выделены буквой S перед номером. По умолчанию заняты следующие прерывания:

Системность

Устройство

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

Клавиатура

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

Свободно

Свободно

Свободно

Свободно

Сопроцессор

Com Port 1 (Мышь)

Com Port 2 (Модем)

Свободно

Floppy (Дисковод)

LPT (Принтер)

Такая раскладка прерываний очень долго сохранялась на многих бытовых компьютерах. Почти все компьютеры на базе процессоров 386, 486 и Pentium имеют такой список использованных прерываний. При таком раскладе свободных прерываний в компьютере оказывается всего пять (5, 9, 10, 11, 12), но этого количества для большинства случаев было вполне достаточно. Устройств, требующих прерывание и устанавливаемых в компьютер в виде плат расширения, редко было больше трех. Стандартный набор того времени выглядел так: видеокарта, звуковая плата и сетевая карта. При этом было важно, чтобы одно прерывание ни в коем случае не использовалось двумя устройствами одновременно, так как это повлечет конфликт системных ресурсов, и оба устройства, находящихся на одном прерывании, работать не будут. Задачей сборщика компьютера на тот момент было разведение всех устройств по прерываниям таким образом, чтобы ни одно устройство не пересекалось с другим.

Наверное, самое время объяснить, что такое конфликт прерываний. Если два устройства находятся на одной линии прерываний, то драйвер может их спутать и переслать исполняемый кусок программы не той «железке», при этом заставляя ее исполнить этот кусок кода. Например, сетевая плата и звуковая карта находятся на 10 прерывании. Сетевая карта получает пакет из локальной сети с запросом на получение файла и отправляет запрос на прерывание центральному процессору.

Процессор отрабатывает прерывание, останавливает исполняемую задачу и передает управление драйверу сетевой карты, для отработки необходимых для приемки файла действий. Драйвер начинает работу с устройством, от которого пришло прерывание. Вот только работать он начинает не с сетевой платой, а со звуковой картой, находящейся на той же линии, передавая ей команды для приемки файла. Звуковая карта исполняет принятые команды, и полностью завешивает компьютер с BSOD (Blue Screen Of Death).

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

Приоритет прерываний

Исторически сложившаяся архитектура наложила очень сильный отпечаток на приоритеты линий прерываний. Подключенная вторая микросхема контроллера ко второй линии первой микросхемы вклинивается в приоритеты. Поэтому линии второй микросхемы имеют более высокий приоритет, чем линии первой. При этом, обе микросхемы выглядят для пользователя единым модулем контроллера прерываний – PIC (Program Interrupt Controller). Более того, уже давно две микросхемы для этих целей не используется, всё это встроено в северный мост чипсета, но раскладка приоритетов прерываний сохранилась. Чем больше ресурсов от компьютера требует устройство, тем более высокий приоритет должен быть у линии IRQ присвоенной этому устройству. То есть, для видеокарты желательно отдавать девятое или десятое прерывание, если оно свободно. Для звуковой карты тоже желательно найти прерывание, находящееся на втором контроллере. Подробнее об этом вопросе мы поговорим чуть ниже.

Но время не стоит на месте, и ситуация с прерываниями начала ухудшаться одновременно с разработкой новых технологий и развитием всей компьютерной области. Появились новые стандарты портов ввода-вывода, которые требуют собственного прерывания. Например, порты USB или PS/2, которые являются на настоящий момент стандартом де-факто для всех компьютеров. Свободных прерываний становилось всё меньше, а решение системных конфликтов становилось всё более сложным.

Настоящее …

Вся ситуация сильно изменилась с появлением систем ACPI и IRQ Sharing. К сожалению, эти системы никак нельзя описать в одно предложение, поэтому мы рассмотрим их чуть подробнее.

Система ACPI (Advanced Configuration and Power Interface, Расширенный интерфейс конфигурирования и управления питанием) была разработана в 1997 году тремя компаниями Microsoft, Intel и Toshiba. Если ваш компьютер поддерживает ACPI в железе, то при инсталляции операционных систем WindowsXP и Windows 2000 поддержка ACPI автоматически встраивается в ядро операционной системы. Система ACPI занимается менеджментом энергосберегающих функций компьютера, таких, как автоматическое выключение блока питания после успешного завершения работы операционной системы, экономия заряда батарей, перевод компьютера в режим сна и пробуждение его от сна. Если ваш компьютер не - ноутбук, то единственно полезная функция от ACPI в плане управления питанием – это автоматическое отключение блока питания.

Вторая функция ACPI - это автоматическое распределение системных ресурсов внутри компьютера. Пока ACPI в действии, вы не можете изменить никаких параметров, связанных с прерываниями. Более того, система ACPI поддерживает работу расширенного контроллера прерываний APIC.

APIC (Advanced Programmable Interrupt Controller) - усовершенствованный программируемый контроллер прерываний. Для многопроцессорных систем это необходимая система, так как позволяет распределить меж процессорами нагрузку по работе с устройствами. То есть, этот контроллер можно запрограммировать на обработку некоторых линий прерываний первым процессором, а некоторых - вторым. Для однопроцессорных систем эта опция всего лишь включает возможность использования в операционных системах WindowsXP и Windows2000 виртуальных прерываний. Мы не будем приводить алгоритмы работы виртуальных прерываний. Это бессмысленно, их нельзя менять, и они сильно зависят от реальных. Если у вас однопроцессорная система, то отключение этой функции весьма рекомендовано, но об этом позднее.

IRQ Sharing – система? позволяющая двум устройствам одновременно находиться на одном прерывании. Физически получается так, что на одной линии IRQ может висеть несколько устройств, при этом менеджмент между ними обеспечивается операционной системой. IRQ Sharing - неоднозначная система, так как использование её необходимо для нормальной работы ПК, но при этом возможны самые разнообразные проблемы и глюки. На самом деле, использование и укрощение именно этой системы и есть цель этой статьи.

Совокупность вышеописанных систем была признана стандартом и включена в список требований к компьютерному оборудованию - PC2001. После реализации ACPI и IRQ Sharing на всех материнских платах, начиная с материнских плат для Pentium 1 (VX и TX чипсеты от Intel), сложилась раскладка прерываний, которая существует в каждом компьютере и по сей день. Вот она:

Системность

Устройство

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

Клавиатура

Cascad (Вывод на вторую микросхему контроллера линий прерываний)

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

Свободно

Сопроцессор

IDE Primary (Контроллер жестких дисков)

IDE Secondary (Контроллер жестких дисков)

Com Port 1 (Мышь)

Com Port 2 (Модем)

Свободно

Floppy (Дисковод)

LPT (Принтер)

Как видно из таблицы, свободных прерываний практически не осталось. Свободными можно считать только IRQ 5 и 10, всё остальное занято. По логике, как раз их-то и надо использовать для видеокарты и аудиоплаты. Но устройств, требующих собственное прерывание и не описанных в этой таблице, может быть куда больше. В таблицу они не включены, так как являются опциями, то есть могут быть в системе, а могут и не быть. Например: сетевая карта, контроллер RAID или SCSI, ТВ-тюнер, SATA, IEEE1394 (FireWire) и так далее. То есть, может сложиться ситуация, когда на два свободных прерывания будет восемь устройств, требующих собственного прерывания. Есть три способа решения этой проблемы. Каждый способ имеет свои плюсы и минусы.

Первый способ – это полноценное использование систем ACPI и IRQ Sharing. Если системы ACPI, а соответственно и APIC, включены, то операционная система считает, что у неё 256 прерываний, при этом реальных прерываний как было 16, так и осталось. Оставшиеся 240 прерываний – это виртуальные прерывания, которые являются клонами реальных. ACPI автоматически распределяет прерывания и не позволяет пользователю их менять. Если устройство соглашается работать в режиме кооперации с другим устройством, то есть все шансы, что ACPI посадит их на одну физическую линию. Если не контролировать данную ситуацию, то на одном физическом прерывании могут оказаться практически все устройства, установленные в компьютере, даже если есть свободные прерывания. Это приведет к сильнейшему торможению всей системы и серьезным сбоям в работе.

Решение:
Плюс данного подхода в отсутствии потребности вмешательства со стороны пользователя. То есть, делать ничего не надо. Просто воткнуть в материнскую плату видеоадаптер, процессор, память и так далее, а затем поставить операционную систему, которая нормально поддерживает ACPI. А это Windows XP или Windows 2000. Всё. Компьютер заработает. Именно в таком виде продаются почти все компьютеры, собранные в России. Подход прост: если работает и тормозит – то это не гарантийный случай, а проблема пользователя.

Второй способ заключается в отказе от использования ACPI и APIC, но с параллельным использованием IRQ Sharing. Отказ от систем ACPI и APIC означает, что операционная система знает о наличии у неё только 16 прерываний, а не 256, но система IRQ Sharing позволяет находиться на одном прерывании нескольким устройствам. При этом отслеживать картину прерываний уже можно, и выбирать соседей по своему усмотрению - тоже. То есть, если у вас есть сетевая плата и звуковая карта, и при этом нужны все порты ввода-вывода установленные в материнскую плату, то от IRQ Sharing уже никак не отделаться.

Решение:
Современные материнские платы обладают некоторыми особенностями, которые необходимо знать для корректного разведения линий прерываний по устройствам. Так, все встроенные в материнскую плату устройства чаще всего имеют жесткую привязку к слотам расширения PCI, а некоторые слоты жестко привязаны друг к другу. К примеру, у вас есть встроенная в материнскую плату звуковая карта, при этом она автоматически кооперируется с устройством в третьем слоте PCI. Если вы вставите сетевую плату в третий слот, то встроенная звуковая карта и сетевая плата будут висеть на одном прерывании, чтобы вы ни делали. Решить этот конфликт можно, переставив сетевую карту в другой слот. Или другой пример: пятый и первый слот PCI привязаны друг к другу, и установив два устройства в эти слоты, вы автоматически вешаете их на одну линию прерывания. Опять же, это лечится переустановкой одного из устройств в другой слот. К сожалению, современные материнские платы имеют столько встроенных устройств, что найти свободный слот PCI без запаралеленных устройств бывает невозможно. В этом случае всё зависит от устройства.

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

К первой группе можно отнести видеокарту и контроллеры жестких дисков. Эти устройства должны иметь выделенное прерывание и ни в коем случае не должны его делить с чем бы то ни было. То есть, на одном прерывании с видеокартой не должно находиться ни одного устройства, в противном случае страшные глюки и тормоза гарантированы. Ко второй группе можно отнести менее ресурсоемкие устройства, например аудиоплату, ТВ-тюнер, софтверный внутренний модем (WinModem) или сетевую карту. Эти устройства могут сосуществовать на одном прерывании с устройствами из групп, которые мы опишем ниже. Тем не менее, если есть возможность, устройства, относящиеся ко второй группе, тоже желательно разместить на отдельном прерывании, так как при серьезной нагрузке возможны различные сбои. Вторая группа - эта зона риска, так как абсолютно непонятно, какое устройство с каким может войти в конфликт при использовании уже задействованных ими прерываний. Стабильность в этом случае достигается методом проб и ошибок. Единственное, что можно сказать однозначно – на одном прерывании не стоит размещать два устройства второй группы, это приведет к сбоям в работе. Третья группа - это все порты ввода вывода, USB, COM-порты, возможно LPT, IEEE1394 (FireWire), аппаратные внутренние модемы и прочие устройства не сильно загружающие компьютер. Устройства из третьей группы могут присоединяться к устройствам из второй и к самим себе. То есть, на одном прерывании могут висеть все порты USB или же один порт USB висит вместе с аудиокартой или ТВ-тюнером. Также можно повесить контроллер FireWire вместе с USB или СOM портом. Ну а четвертая группа - это устройства, не требующие прерываний. Это довольно редкая группа, и тем не менее, она существует. Например, к этой группе относились ускорители трехмерной графики от 3dfx – Voodoo и Voodoo 2. Да, кстати, если вдруг вы видите что у вашей видеокарты или USB-портов прерывание отсутствует (буковки NA - то есть Not Available), то это не значит что у вас такая редкая, хорошая видеокарта. Это с большой долей вероятности значит, что у вашего компьютера проблемы, которые надо решать немедленно. У устройств, не требующих прерывания, в инструкции об этом написано большими буквами.

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

Пожалуй, второй способ - самый часто используемый. При некотором понимании вопроса можно создать практически безглючный компьютер, в котором все устройства, установленные в него, будут функционировать. Минусом второго способа является потеря функций ACPI и наивысшая из всех способов сложность. Для рядового пользователя достижение нормальных результатов может занять долгое время и вызовет сильный перегруз мозгов. Плюс к этому, компьютер больше не будет сам выключаться (его придется выключать кнопкой «Power») и не будет засыпать. Что же касается режима Hybernate, то он полностью сохранит свою функциональность.

Третий способ - самый правильный, но требует жертв.

Суть способа в полном отказе от систем ACPI и IRQ Sharing. А устройства, которые лезут на одну линию IRQ нужно просто отключать. Must be only one!, как говорил товарищ из фильма «Горец».

Решение:
Для начала нужно отключить все порты, которые не используются. Не пользуетесь LPT – отключить. Не пользуетесь вторым COM-портом и дополнительными USB-каналами – та же судьба, отключить. Каждое устройство должно иметь отдельное прерывание и ни с кем не пересекаться. Это вопрос приоритетов и потребностей, потому что при использовании данного способа половина компьютера оказывается «в отключке», зато всё остальное работает как часы. Плюс этого способа в возможности использования устаревших операционных систем и сложных программ. Например, для установки WindowsNT 4.0 на достаточно сложную машину этот способ просто необходим. Также плюс такого подхода - максимальное быстродействие всей системы без проблем со стабильностью. Если есть возможность, желательно идти именно этим путем.

Как понять, есть ли конфликты в вашем компьютере, и что делать

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

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

Например, можно использовать стандартный диспетчер устройств, переключив его вид на «ресурсы по подключению» и раскрыв раздел «запрос на прерывания (IRQ)», или воспользоваться сторонними программами типа SiSoft Sandra.

Единственный минус их использования состоит в том, что они видят номера прерываний через призму операционной системы. Если используется система ACPI и APIC, то получить корректную информацию об аппаратных прерываниях будет весьма непросто, так как номеров будет не 16, а 256. Нас интересует ситуация, когда цифры не повторяются. Если одна и та же цифра стоит напротив USB Cntrlr, Display Cntrlr и Multimedia Device (аудиоплата или TB-тюнер), то дело совсем плохо. Например, данное окно говорит о следующем:

В компьютере используется система ACPI, APIC и IRQ Sharing, так как прерываний больше 15, и они пересекаются. Есть конфликт меж сетевой картой и звуковой платой, которые находятся на 18 прерывании. Также есть совсем несущественный конфликт меж всеми ветками USB на 21 прерывании, но это скорее норма. В целом - система стабильна, но для обеспечения большей стабильности требуется отключить ACPI и развести на разные прерывания сетевую и звуковую плату.

Как решать и что делать

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

Шаг первый: изучаем BIOS

Для начала нужно посмотреть на опции в BIOS вашего компьютера. И ничего там не трогать, в противном случае шансы на загрузку уже установленной операционной системы сильно падают. Вне зависимости от производителя BIOS и материнской платы, необходимые для работы опции могут присутствовать, а могут и отсутствовать. Стандарта для этих опций не существует, поэтому они могут иметь разные названия и находится в разных разделах BIOS. Но, применяя дедуктивный метод Шерлока Холмса, их все же можно найти. Для примера мы приведем названия этих опций в Award BIOS материнской платы GigaByte. Самые важные для нас опции находятся в разделе PnPPCI Configuration и выглядят как номера слотов и привязанные к ним номера прерываний, которые можно менять.

С помощью этих опций можно добиться правильного распределения приоритетов линий прерываний к устройствам:
PCI 1 IRQ Assigment: Auto (Auto, 3,4,5,7,9,10,11,14,15)
PCI 2 IRQ Assigment: Auto (Auto, 3,4,5,7,9,10,11,14,15)
PCI 3 IRQ Assigment: Auto (Auto, 3,4,5,7,9,10,11,14,15)
PCI 4 IRQ Assigment: Auto (Auto, 3,4,5,7,9,10,11,14,15)

То есть, можно руками менять прерывания для слотов и привязанных к ним устройств. Если все опции выставлены в Auto, то распределением прерываний занимается автомат с алгоритмом, очень схожим с алгоритмом системы ACPI. Иногда бывает указание прерываний не цифрами, а буквами – A,B,C,D. Так же, как в случае с цифрами, буквенные прерывания позволяют собой управлять, при этом наивысший приоритет – у буквы А.

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

PnP OS Installed: Yes (No)

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

ACPI Function: Enable (Disable)

Понятное дело, эта опция включает и отключает поддержку ACPI в BIOS. Если отключить эту опцию перед инсталляцией операционной системы, то, возможно, ядро ACPI и не будет инсталлировано (сильно зависит от версии и типа BIOS).

Interrupt Controller: APIC (PIC)

Как уже описывалось ранее, эта функция имеет разное значение на однопроцессорным и многопроцессорных системах. На однопроцессорных системах она разрешает операционной системе использование виртуальных прерываний. Если опцию поменять на PIC при инсталлированной операционной системе с ACPI ядром, то операционная система больше не загрузится, до исправления этого значение обратно на APIC. Если выставить опцию в PIC до инсталляции операционной системы, то ACPI-ядро не будет использовать виртуальные прерывания и нбудет слушать предписания BIOS при сохранении энергосберегающих функций. Полезная вещь, так как при присутствии этой опции и возможности реинсталлировать операционную систему есть возможность сохранить функции ACPI при отключении проблемной части ACPI с самостоятельным разведением прерываний. Минус - крайне редко встречается на однопроцессорных системах.

Также полезны опции по отключению устройств:
Midi Port Adress – можно отключить Миди порт
Onboard Parallel Port – можно отключить LPT порт
Onboard Audio – можно отключить встроенную звуковую плату
Onboard LAN Control – можно отключить встроенный сетевой адаптер
USB Host Controller – можно отключить USB порты
Onboard Serial ATA – можно отключить Serial ATA
Onboard RAID – можно отключить RAID-контроллер.

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

Шаг второй – Карта прерываний

Ищем документацию от материнской платы. Если повезет, то в ней вы найдете карту прерываний для вашей материнской платы, которая выглядит следующим образом:

Буквами вверху обозначены линии прерываний IRQ, левый столбец - это список устройств и слотов, установленных на вашей материнской плате. Указание shared означает, что устройство может работать в режиме кооперации с другими устройствами, used означает невозможность режима кооперации. Обратите внимание: линий прерываний целых 7, а раньше мы говорили, что полностью свободных линий всего пять. Это означает, что буквенные индексы тоже могут кооперироваться при нехватке ресурсов. После расшифровки информации в этой таблице получается вот что. Если у вас есть графический акселератор, установленный в AGP слот, то установка устройств во второй и шестой PCI-слоты строго запрещена, так как они используют идентичную физическую линию IRQ. Одновременная установка плат расширения в 1 и 5 слот также запрещена. У вас есть выбор: 1 или 5 слот, в противном случае оба устройства будут висеть на одном прерывании. Установка устройства в третий слот вызовет конфликт прерываний с портом 1394 и контроллером SerialATA. Если эти порты не используются, то их отключение освободит третий слот. К тому же, если вы используете SerialATA, который относится к устройствам первой группы, то просто необходимо отключить порт 1394 и не пользоваться третьим слотом. Все USB контроллеры висят на одном прерывании и вы с этим ничего не сделаете, впрочем, и не надо. Встроенная сетевая карта разделяет четвертый слот. Если используется, то четвертый слот тоже не занимать. Отключив сетевую карту, можно использовать четвертый слот по своему усмотрению. Вывод прост: в компьютер безболезненно можно установить одну плату расширения в 1 или 5 слот и видеоакселератор в слот AGP. Если нужны еще слоты, то нужно что-то отключать.

Более того, прерываний на все эти устройства всё равно не хватит, поэтому нужно освободить неиспользуемые линии IRQ. Радует только одно: типов установленных устройств не так много. Редко бывают нужны в компьютере две сетевые платы или две звуковые карты. Если используется SerialATA, то чаще всего не нужны оба канала контроллера UATA, занимающий 14 и 15 прерывание. Одно из них можно освободить, учитывая, что второе занимает CD-ROM. И так далее.

Если вы обратили внимание, не все буквенные индексы в таблице привязаны к слотам расширения PCI. Например, линия F, на которой висит USB, не привязана к слотам, в то время как из BIOS контролируются только номера прерываний для слотов. Линией F управляет внутренняя автоматика BIOS. А эта автоматика будет кооперировать эту линию IRQ с чем попало. Чтобы разрешить конфликты с этой веткой? вам потребуются шаманский бубен, кроличья лапка и большая подкова. На самом деле вам придется менять конфигурацию раскладок прерываний для слотов до тех пор, пока линия F не встанет на устраивающее вас значение. Каждым изменением вы заставляете автоматику пересчитать всю конфигурацию, и каждый раз автоматика будет назначать новое значение для линии F. Если таких бесконтрольных линий больше чем одна, задача усложняется. В нашем случае бесконтрольной осталась линия G. Но терпение и труд, как известно, всё перетрут.

Мы описали карту прерываний от материнской платы Asustek A7V8X, конкретные же карты прерываний у каждой материнской платы свои. Но основные принципы вычисления зависимостей по этому описанию можно понять.

Если же у вас нет карты прерываний в документации, то это просто осложняет задачу. Вам придется составить эту карту самостоятельно. Для опытных людей, занимающихся железом, составить эту карту в голове, ничего не записывая, не очень сложно. Для новичков может потребоваться бумага и ручка. Нарисуйте таблицу, схожую с приведенной выше. Слева перечислите устройства, сверху - линии IRQ. Зайдите в BIOS, выставите для каждого слота разное прерывание, а затем устанавливайте плату расширения в слоты PCI по порядку и смотрите номер прерывания во втором экране BIOS. Номер IRQ у переставляемой вами платы будет меняться в зависимости от слота. Также изменятся номера прерываний у скооперированных со слотами PCI встроенных в материнскую плату устройств, причем изменятся в соответствии с выставленными вами номерами IRQ для слотов PCI в BIOS. Если же устройство обладает собственной линией, как, например линия F для USB, то оно будет менять значение совсем нелогично, например перескакивая номером IRQ с одного слота на другой.

Шаг третий – Изменения в операционной системе

Самым первым изменением, с которого мы начнем настройку системы, будет замена ядра операционной системы для отключения функций ACPI. Как уже упоминалось ранее, после этого компьютер потеряет все энергосберегающие функции и перестанет сам выключаться после завершения работы операционной системы. Для этого нужно зайти в контрольную панель, выбрать иконку «Система», затем перейти в закладку «Оборудование» и нажать на «Диспетчер устройств». Затем открыть раздел «Компьютер» и двойным кликом нажать на «Компьютер с ACPI». Выбрать закладку «Драйвер» и нажать на кнопку «Обновить».

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

После нажатия на кнопку «Далее» компьютер скопирует необходимые файлы и уйдет на перезагрузку. После перезагрузки компьютер начнет находить ВСЕ устройства заново, включая системные устройства, но будет находить драйверы для них в автоматическом режиме. Некоторые устройства не проходят автоматическую установку, но для них достаточно выбрать автоматический поиск драйверов. После этого компьютер еще раз перезагрузится и после этого заработает в нормальном режиме. Всё, система ACPI отключена. Для того, чтобы снова включить ACPI, нужно повторить все вышеописанные действия, только выбрать «Компьютер с поддержкой ACPI».

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

Так выглядит раскладка прерываний после отключения ACPI и с сохранением IRQ Sharing. Кстати сказать, на скриншоте приведена раскладка прерываний с разрешенными основными конфликтами. Только RAID массив конфликтует с SMBus, но этот конфликт разрешить нет возможности, так как встроенный RAID-контроллер связан с SMBus картой прерываний. Приоритеты линий прерываний соответствуют типу устройств. В этом компьютере конфликты решены вторым способом, никаких доработок и изменений не требуется.

Шаг четвертый – Изменения в BIOS

Фактически, этот шаг является обобщением действий, описанных выше, только если выше были описания, то сейчас нужно предпринимать реальный действия, поэтому прошу прощения за некоторые повторения. Первым делом меняем опции в BIOS, если они конечно присутствуют:
PnP OS Installed: NO
ACPI Function: Disabled
Interrupt Controller: PIC

Далее отключаем ненужные порты и устройства, использовать которые вы в ближайшее время не собираетесь, за счет этого освобождаете дополнительные ветви прерываний. Из получившейся картины с помощью карты прерываний вычисляем свободные слоты PCI. Если таковых нет, то ищем слоты PCI, которые делят прерывание с устройствами из третьей группы (порты ввода-вывода). Переставляем платы расширения именно в эти слоты, соблюдая правила описанные во втором способе (ссылка). Далее снова заходим в BIOS и с помощью опций назначения номера IRQ определенному слоту выставляем приоритеты для устройств, располагая их следующим образом. Чем выше группа, к которой принадлежит устройство, тем выше приоритет линии прерывания для него. То есть, для видеокарты это 9, 10 или 11, то же самое для контроллера жесткого диска (RAID, SATA, SCSI) и аудиоплаты. ТВ-Тюнер и сетевую карту можно повесить на 3, 4 или 5 прерывание. А для USB подойдет 7. Естественно, вы знаете лучше свой компьютер и свои потребности. Возможно, для вас наибольшее значение будет иметь как раз USB, и тогда вы будете стараться повесить USB на 10 или 11 прерывание. Все это вы должны решить для себя сами. Далее, нужно настроить устройства, которые не имеют контроля номера линии прерывания из BIOS. Для этого нужно менять прерывания для устройств в пределах приоритетов прерываний для них, то есть, погонять видеокарту с 9 по 11, так же аудио и остальные устройства. Методом перебора вы загоните автоматическую линию на требуемое значение. Скорее всего, это окажет некоторые воздействие на конечную раскладку прерываний. То есть, вы хотели повесить видео на 10, но в результате повесили на 11, только для того, чтобы USB ушло на 7. Как только вы добьетесь результата, который вас устроит, загружайте операционную систему и наслаждайтесь скоординированной работой компьютера. Только помните, включение в BIOS или физическое добавление еще одного устройства приведет снова всю систему прерываний в ХАОС, который придется решать заново.

Выводы

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

В этой статье я хотел бы рассказать о том, что может никогда не напоминать о себе, а может и стоить нервов после сборки или апгрейда компьютера: зависания, самопроизвольные перезагрузки, упорное нежелание грузиться, постоянные "синие экраны смерти", невозможность обнаружения устройств, неверная работа… Список можно продолжать еще долго. Очень часто такие "глюки" происходят именно по вине прерываний, а если Вы интересуетесь компьютерами, то обязательно должны знать, откуда и почему появляются подобные проблемы и, самое, наверно, главное, как с этим бороться.

Что это такое?

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

Так уж сложилось, что при разработке какой-нибудь технологии создаются некоторые ограничения, не специально, конечно, а из-за какой-нибудь особенности этого новшества или просто недочета. Так случилось и с прерываниями. Первоначально, когда IBM разрабатывала архитектуру IBM PC (аж в 1980-81 годах прошлого тысячелетия), их было заложено не так много (8), потом, правда, добавили еще столько же, забрав одно "старое" прерывание под контроллер новых, но я бы не сказал, что и этого оказалось достаточно. А потом фирма IBM перестала быть единственной, кто занимался платформой PC, и, во избежание несовместимости с другими, никто больше прерываний и не добавил.

Какие могут быть проблемы?

Когда архитектуру IBM PC только создавали, прерываний было создано немного, всего восемь, как я уже писал, и отдавали их на всякую "ерунду", вроде портов COM, хотя оправдывает инженеров IBM то, что выбора особого не было, его пришлось искать позже. Очевидно, никто не пророчил платформе такое будущее, поэтому для ее изюминки, то есть возможности расширения, было оставлено только одно прерывание, которое потом было занято контроллером второй "восьмерки" IRQ. Правда, стоит заметить, что дополнительные прерывания могли (и могут) быть высвобождены путем отключения различных занимающих их ISA-устройств: портов, флоппи-дисковода. Так вот, ошибки, или конфликты, возникают когда несколько устройств пытаются работать на одном прерывании. Это очень проблематично, потому что многие современные устройства, особенно звуковые карты и всевозможные мультимедийные комбайны несут на себе сразу несколько устройств. Даже самые простые "звуковухи" имеют на борту не менее четырех девайсов. Вот так выглядит карта прерываний в современном компьютере:

IRQ Описание
0 Таймер
1 Клавиатура
2 Контроллер IRQ 8-15
3 COM2
4 COM1
5 LPT2
6 Контроллер FDD
7 LPT1
8 Real Time Clock
9 Свободен
10 Свободен
11 Свободен
12 PS/2 (для мыши)
13 Сопроцессор
14 Контроллер HDD
15 Контроллер HDD

Так что же это получается? На современный компьютер можно установить только три дополнительных устройства? Судя по таблице, да, но не все так страшно. У Вас, например, есть порт LPT2? Очень сомневаюсь. Значит, если порта нет, то и прерывание свободно. Итак, теоретически можно освободить следующие прерывания:

IRQ Описание
3 Порт вполне можно освободить, отключив его в BIOS. Я думаю, в большинстве случаев он и так свободен.
4 Тоже можно отключить. Но он используется значительно чаще: мыши, модемы, сканеры.
5 Про это я уже писал. Почти всегда свободен.
6 Если будете собирать новый компьютер, тем более домой, польза от старого доброго флопика, значительно меньше, чем даже пару лет назад. Очень у многих уже есть дисководы CD-RW. Больше места, надежнее, быстрее, хотя, хоронить FDD еще рано… Флоп можно отключить и освободить IRQ.
7 Если у Вас принтер на USB, можете хоронить…
12 В большинстве современных компов мыши именно такие. Можете поставить грызуна на COM, но забьете другое прерывание, мышку можно купить и на USB, но это будет уже маниакальной борьбой за IRQ:)
14 Слабо без винта? Хотя, теоретически, можно…
15 Даже если у вас только два IDE-устройства, их лучше развести на два разных канала. Работать будет быстрее. Но прерывание можно и освободить.

Уже проще. Но хватает ли этого? Лезу в свойства системы (у меня Windows XP Professional). Пуск -> Все программы -> Стандартные -> Служебные -> Информация о системе. Дальше в окне программы: Ресурсы аппаратуры -> Прерывания (IRQ). Вот, что я там вижу:

IRQ Описание
0 Системный таймер
1 Стандартная (101/102 клавиши) или клавиатура PS/2 Microsoft Natural
3 Последовательный порт (COM2)
4 Последовательный порт (COM1)
5 Conexant SoftK56 Data Fax Voice Speakerphone
5
5 VIA Rev 5 USB универсальный хост-контроллер
6 Стандартный контроллер гибких дисков
8 CMOS и часы
9 Microsoft ACPI-совместимая система
10 Avance AC"97 Audio for VIA (R) Audio Controller
11 ATI RADEON VE DDR
12 PS/2-совместимая мышь
13 Процессор числовых данных
14 Первичный канал IDE
15 Вторичный канал IDE

Спрашивается: что делает мой внутренний модем, который, кстати, несет на себе несколько устройств, на одном прерывании (из-под отсутствующего LPT2) со сразу двумя контроллерами USB? А вот что.

Выход был найден

Наступило начало девяностых. Системная шина (ISA - Industrial Standard Architecture), которая работала на частоте процессора, уже исчерпала себя. А все потому, что она могла нормально передавать данные только на частоте 8 МГц, чего вполне хватало для всяких там PC/XT/AT/286/386. А такой продвинутый процессор как 486 работал на значительно большей частоте. Пришлось эту шину замедлять, что отрицательно сказывалось на частоте. В 1989 году была разработана 32-битная шина EISA - Extended Industrial Standard Architecture, которая работала на частоте 10 МГц, но это была всего лишь попытка сделать из телеги велосипед, просто исправление ошибок ISA. Примерно в это время IBM создала шину MCA, которая не прижилась. Была создана и шина VESA (или VL-bus), но она могла работать только с Intel 486. И вот в 1991 году, в качестве своего внутреннего проекта, Intel приступила к разработке абсолютно новой локальной шины PCI - Personal Component Interconnect. Она разрабатывалась можно сказать с нуля, а не была очередной заплатой к ISA, что дало ей большие преимущества. Например, она работала на фиксированной частоте в 33 МГц, плюс у процессора была собственная быстродействующая шина, что позволяло ему обращаться к кэшу и оперативной памяти на той частоте, на которой ему надо, и не опираться на технические ограничения локальной шины. Новая шина PCI могла нести приличную нагрузку: до десяти слотов. Именно к PCI подключаются все видеоадаптеры, ведь шина AGP это всего лишь "прикрученная" PCI с большей тактовой частотой - 66 МГц. К ней же подключается (через контроллер) и системная шина ISA, которая присутствует на всех современных компах в виде портов COM и LPT, гибких дисков. Правда, необходимости в ней становится все меньше: флопики простаивают по вине CD-R/RW, COM/LPT - по вине USB… Так вот эта шина PCI, без которой не обходится ни одна современная материнская плата, стала решением проблемы прерываний.

Как известно, компьютеры могут оперировать только с "1" и "0" или "есть сигнал" и "нет сигнала". Если устройство ISA выставит на линию сигнал "1", то другому устройству на этой же линии свои единицы как не выставляй, контроллер на них не отреагирует. В случае с PCI контроллер проверяет источник сигнала и только потом обрабатывает его. Это и позволяет помещать несколько устройств на одно прерывание. Теоретически да, но имейте ввиду, что не стоит "вешать" устройства постарше и поновее на один канал IRQ. Есть также мнение, что не стоит ничего ставить на одно прерывание со звуковой картой, могут появляться ошибки. Это, конечно, происходит далеко не всегда, но лучше сообразить что-нибудь понадежнее.

Приехали…

Хороший Вы человек, для своего компа ничего не жалко. Вот купили Вы крутейшую видеокарту, принтер, сканер, профессиональный звук, усугубили это дело модемом, сетевухой, да еще и TV-тюнером. Вот "глюки" и пошли. Как ни меняй их местами в слотах, ничего не работает, хоть вон выкинь. Что делать?

Настройка прерываний из BIOS

Так по какому же принципу распределяются прерывания? При загрузке системы BIOS раздает прерывания следующим образом: линии IRQ всех устройств, которые поддерживают технологию Plug"n"Play, а это все современные устройства, получают по одному свободному прерыванию. Если прерывания кончились, а неохваченные девайсы еще есть, BIOS раздает их по второму кругу, потому и получается, что несколько устройств получили одно прерывание. Все будет чудесно работать, если одно прерывание получили два PCI устройства, а если PCI + ISA или ISA + ISA? Все, конфликт. Надо бы это процесс прибрать к рукам.

Далее стоит заметить, что я использую материнскую плату Epox 8K3AP с Award BIOS 6.00PG. Наиболее удобный и логичный способ настройки IRQ - назначить их "ручками". Заходим в PCI/PnP Configurations. Там есть настройки INT Pin n Assignment (это у меня, а у Вас может быть и это, и такие названия как Slot n Use IRQ (точно помню, так было в Award BIOS v. 4.51 PG); PCI Slot n Priority или что-нибудь подобное). Каждый пункт этого меню соответствует одной из четырех линий IRQ, так что вы можете назначить каждой линии свое прерывание.

Есть еще один способ переназначения IRQ. Заходите в тот же PCI/PnP Configurations, там есть пункт IRQ resources (чтобы туда зайти надо поставить значение параметра Resources controlled by равным Manual), а именно он и нужен нам сейчас. Там будут настройки каждого возможного прерывания. Я почти уверен, что на всех номерах будет стоять вариант, связанный с шиной PCI, например, PCI/ISA или PCI device, это зависит от вашей версии BIOS. А нам ведь надо, чтоб одно или несколько прерываний оставались пропущенными, то есть резервировались для ISA устройств. Так вот, на том прерывании, которое хотите оставить, просто выставляете значение вроде Legacy ISA. В более современных компьютерах все стало значительно проще из-за отсутствия слотов ISA, а это значит, что вы не можете добавить свои ISA устройства, а уж с системными, вроде флопика или последовательных/параллельных портов система сама разберется сносно. В таких системах вместо значения Legacy ISA появляется значение Reserved, то есть можно просто оставить прерывание свободным. Это может понадобиться в скорее теоретическом случае, если к Вам попало устройство не поддерживающее Plug"n"Play, тогда BIOS его просто не увидит.

В том же меню есть еще один полезный пункт. Информация об установленном оборудовании хранится в ESCD (Extended System Configuration Data). Эта информация проверяется каждый раз перед обращением к жесткому диску для запуска операционной системы. Естественно, при изменении конфигурации ESCD обновляется, а когда происходит обновление, изменяются и IRQ. Установив значение опции Reset Configuration Data в Enabled, Вы сбросите ESCD при следующем перезапуске.

В Award 6.00, а именно это BIOS установлен на большинстве материнских плат, есть еще одна интересная "фича". Если зайти в Power Management Setup " IRQ/Event Activity Detect " IRQs Activity Monitoring, то там можно настраивать, от устройств на каких прерываниях компьютер будет просыпаться. Там же можно посмотреть и текущее распределение номеров IRQ, но не всегда на это можно положиться, а вот почему:

Настройка прерываний из Windows

После BIOS в процесс распределения номеров IRQ сует свой нос Windows. Для того чтобы она правильно все сделала, хоть вмешивается винда в оный процесс далеко не всегда, надо ВСЕГДА иметь самые свежие драйверы материнской платы. Это очень важно, особенно, если вы собрали/купили современный компьютер, с материнской платой на новом или относительно новом чипсете и поставили на все это какой-нибудь Windows 98… Лично я знаю много таких людей, которые считают примерно так: у меня на материнской плате никаких наворотов нет, все там по стандарту, никаких "дров" не надо… Это совсем неправильно. Для нормальной работы системы, особенно когда прерывания используются совместно, нужно, чтобы Windows распознала чипсет и загрузила IRQ Miniport. Не забывайте также поставить свежие или хотя бы "родные" драйверы всех устройств, это поможет системе правильно работать.

Если Вы используете Windows 9x, то для того, чтобы узнать, правильно ли распределены прерывания или поправить их, зайдите в свойства системы, для этого на вкладке Устройства найдите свиток Системные устройства, а там Шину PCI. Если IRQ Miniport загружен, то все в порядке. В Win 9x вы можете, как и в BIOS резервировать прерывания. В том же диспетчере устройств найдите Компьютер и вызовите его свойства. А вот для того, чтобы установить конкретное прерывание определенному устройству, надо зайти в его свойства и на вкладке Ресурсы выставить нужное прерывание. К сожалению, это возможно только в Win 9x, в Win XP я как не искал, так и не нашел, как отменить автоматическую настройку.

Если Вы используете более новые Win 2000 или XP, что, на мой взгляд, является более оправданным выбором, то Вы можете столкнуться с некоторыми проблемами. Вы знаете, что такое ACPI (Advanced Configuration and Power Interface)? Это специальный интерфейс конфигурирования. Он несет в себе массу полезностей, но в Win 2K/XP может Вам здорово насолить. Особенно, если в системе есть ISA платы. Из-за него винда распределяет все PCI устройства, которые сидят в одноименных разъемах, на одно прерывание (вот почему у меня USB с модемом на IRQ 5, а остальное - на других), хорошо, хоть содержимое AGP слота и AC"97-кодек туда не спихнули;). Из-за этого, если не выключать ACPI в BIOS перед установкой Windows, переназначить IRQ не удастся. Как посмотреть их распределение, я уже писал выше. А чтобы изменить ситуацию, придется выключать ACPI в BIOS (пункт ACPI Functions в разделе Power Management Setup) и изменять драйвер устройства Компьютер в диспетчере устройств с Компьютер с ACPI на Стандартный Компьютер. Хотя, лично мне бы не особо хотелось терять такие функции, напрямую связанные с ACPI, как автоматическое выключение компьютера или включение с клавиатуры. Кстати говоря, иногда и этот прием отмены ACPI не срабатывает, потому приходится выключать в BIOS и переставлять Windows.

  • Articles
  • IRQ - как решить проблему с прерываниями

    Представим например такую ситуацию, что у вас установлен Dial-Up модем на ПК, всё работает нормально до тех пор, пока модемом не подключаетесь к Интернету, курсор мышки сидящей на PC/2 порте начинает самопроизвольно двигаться. После этого (через некоторое) время ПК перезагружался. При том ни переустановка драйверов, ни установка заново Windows не помогает.
    Такая проблема присуще IRQ, когда несколько устройств мешают друг-другу работать.
    Итак, прерывания или IRQ (Interrupt Request) - это сигналы, которые сообщают процессору, что нужно обработать поступивший от устройства запрос, а посылает процессору оные сигналы контроллер этого самого устройства, т.е. при помощи IRQ процессор реагирует на различные события.
    Так вот, ошибки или конфликты возникают, когда несколько устройств (если драйвер хотя бы к одному устройству написан “криво”) пытаются работать на одном прерывании.
    Это очень проблематично, потому что многие современные устройства, особенно звуковые карты, контроллеры, TV-тюнеры, ... несут на себе сразу несколько устройств. Даже самые простые звуковые карты имеют на плате не менее четырех устройств.
    В таблице ниже показано, как выглядит карта прерываний в современном компьютере.

    IRQ

    Описание

    0
    1

    Клавиатура

    2

    Контроллер IRQ 8-15

    3
    4
    5

    LPT2, звуковые платы ISA и PCI или сетевая карта. Современные звуковые платы занимают это прерывание исключительно ради совместимости со старыми программами. Также доступно для использования другими устройствами

    6

    Контроллер FDD

    7
    8
    9

    Звуковая или сетевая карты, или свободен

    10

    Свободен

    11

    Шина USB или SCSI. Для других устройств это прерывание может стать доступным только после отключения этих шин в BIOS

    12

    PS/2 (для мыши)

    13

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

    14

    Основной контроллер HDD

    15

    Дополнительный контроллер HDD


    Стоит заметить, что дополнительные прерывания могли (и могут) быть высвобождены путем отключения различных занимающих их устройств. Чтобы убедится в правоте зашел в “Сведения о системе” (Пуск > Все программы > Стандартные > Служебные > Сведения о системе).
    Выбрал слева в окне “Ресурсы аппаратуры” и пункт “Прерывания IRQ” и точно модем не на своем прерывании (IRQ отвечающее за СОМ-порты).
    При загрузке системы BIOS раздает прерывания следующим образом: линии IRQ всех устройств, которые поддерживают технологию Plug and Play, а это все современные устройства, получают по одному свободному прерыванию. Если прерывания кончились, а неохваченные устройства еще есть, BIOS раздает их по второму кругу, потому и получается, что несколько устройств получили одно прерывание.
    После распределения BIOS номеров IRQ для устройств, в раздаче начинает участвовать Windows. Для этого надо всегда иметь самые свежие драйверы материнской платы.
    Это очень важно, особенно, если вы собрали/купили современный компьютер с материнской платой на новом или относительно новом чипсете. Для нормальной работы системы, особенно когда прерывания используются совместно, нужно, чтобы Windows распознала чипсет и загрузила IRQ Miniport.
    После этого я перегрузил ПК и зашел в BIOS. Нашел специальный раздел “PnP/PCI Configurations”, в котором собраны настройки ресурсов (может иметь похожее название) в разделе “Advanced”.
    Кроме параметров, распределяющих IRQ, DMA и другие ресурсы, в этом разделе могут присутствовать настройки, влияющие на работу видеосистемы и некоторых других устройств.
    В современных системных платах все ресурсы распределяются автоматически, а количество параметров в разделе PnP/PCI Configurations может быть сокращено до двух-трех наиболее важных параметров. В нем несколько пунктов:
    “Plug and Play OS” или “PNP OS Installed” - этот параметр определяет, кто будет распределять ресурсы: BIOS или операционная система. Возможные значения:
    Yes - BIOS будет конфигурировать устройства, необходимые для загрузки, а остальные настроит операционная система, которая должна поддерживать Plug and Play;
    No - настройка всех устройств и распределение ресурсов будут выполнены с помощью BIOS.
    Начиная с Windows ХР, операционные системы Windows имеют специальный интерфейс конфигурирования - ACPI (Advanced Configuration and Power Interface), который позволяет показывать в системе до 256 IRQ (240 адресов, как бы сказать по мягче: “виртуальные”, т.е. действительно они “раскиданы" на адресах IRQ 0-15).

    Михаил Тычков aka Hard

    Доброго времени суток.

    Давайте рассмотрим такую вот ситуевину: процессор обрабатывает какие-то данные, не важно какие. В этот момент у какого-нить устройства тоже появились данные для обработки. Че делать? Надо просить процессор, что бы тот соизволил обратить на просьбу внимание и решил бы, сейчас обрабатывать эти данные или потом. Так вот эта просьба и есть IRQ или прерывания (вообще-то существуют два типа прерываний: аппаратные (внешние) и программные (внутренние), но поскольку мой раздел называется «Железо и сети», то разговор я буду вести только об аппаратных прерываниях). Строго говоря IRQ – это каналы запросов прерывания, которые используются всевозможными девайсами для того, что бы сообщить процессору о том, что необходимо обработать определенный запрос. Физически, IRQ представляют собой отдельно проложенные линии (проводники) и соответствующие этим линиям контакты в интерфейсах. Все это находится, ессесно на материнской плате. Линии IRQ предназначены только для передачи запросов прерывания.

    А ну-ка разберемся, как вся эта фигня с IRQ происходит. Итак, после получения запроса прерывания, камень сохраняет в стеке содержимое регистров. Затем он обращается к таблице векторов прерываний, где есть список адресов памяти программ, соответствующих определенным номерам прерываний. От номера прерывания зависит, какая программа будет запущена. В основном этими программами являются драйвера, относящиеся к устройствам, пославшим запрос (а уж драйвера туго знают свое дело и разберутся, что дальше делать). После всего этого, процедура обработки возвращает из стека то, с чем работал камень, а проще говоря, отдается управление системой той программе, что работала до запроса прерывания. И так постоянно. Сама таблица находится в оперативной памяти и состоит из 256 элементов по 4 байта и начинается с адреса 0000:0000. Занимает она 1024 Кбайт. Надеюсь, что Вы усвоили простую истину: если необходимо обработать хотя бы один новый байт от какого-либо устройства, необходимо сначала обработать IRQ этого устройства.

    Что бы не было путаницы у IRQ есть иерархия или говоря другим языком – приоритеты. Чем меньше номер прерывания, тем выше приоритет и наоборот, чем больше номер прерывания, тем ниже приоритет. IRQ всего 16. Самый высокий приоритет у IRQ 0, а самый низкий у IRQ 15. Приведу таблицу иерархии:

    Стандартная функция

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

    Контроллер клавиатуры

    Программируемый контроллер прерываний

    Последовательный порт COM 2

    Последовательный порт COM 1

    Стандартный контроллер гибких дисков

    Параллельный порт LPT

    CMOS и часы

    Звуковая или сетевая карты или свободен

    Свободен

    USB или SCSI или свободен

    PS/2 совместимый порт мыши

    Сопроцессор

    Основной контроллер IDE

    Дополнительный контроллер IDE

    А хотите посмотреть свои прерывания? Выберите «Пуск – Выполнить», наберите «msinfo32». В появившимся окне «Сведения о системе», слева, выберите вкладку «Ресурсы аппаратуры – Прерывания IRQ».

    С прерываниями случаются и геморрои. Если произойдет генерация большого количества IRQ, то стек может переполниться и тогда…. тогда Вы потянитесь к кнопочке . Ежели такая фигня будет происходить часто, то необходимо в файле Config.sys увеличить параметр Stacks. Кроме, этого двум различным устройствам PCI может быть назначено одно и то же прерывание. Теоретически такое не должно происходить, но вот на практике случается. В этом случае Вам придется самому назначить прерывание одному из заглючивших устройств. Как это сделать? Жмем . Выскакивает окно «Свойства: Система». Выбираем вкладку «Устройства», ищем в списке то устройство, IRQ которого будем подправлять и жмем на него пару раз мышью. Выскочит окно его свойств, где выберем вкладку «Ресурсы» и снимем галку «Автоматическая настройка». Затем чуть ниже выбираем «Запрос на прерывания» и кликаем опять два раза мышью. Появится окно, где можно изменить номер IRQ. Ни фиг себе и сложно. Но… Назначать прерывания надо с умом. Сверьтесь с таблицей: какие IRQ для чего предназначены. Посмотрите у себя, какие свободны. Может так случится, что свободных прерываний у Вас и не будет. Думаете – все, жопа? Нет! Новых IRQ Вы конечно не добавите, но подумайте, все ли устройства Вам необходимы. Например, как часто Вы используете порты COM. Я ими последние года три не пользуюсь вообще. Ну и на фиг их из системы. Это можно сделать из BIOS. И вот Вам свободные IRQ. Короче, в решении подобной проблемы надо приложить голову и все у Вас получится. А всяких там кулых спецов хочу предупредить сразу - не пишите мне письма типа: «После твоей статьи клиенты пачками стали нести к нам в магазин компы с развороченными настройками!». Я не отвечаю за действия людей, у которых голова и руки растут из того же места, что и ноги. Когда-то я и сам в этом ни черта не смыслил, но ведь разобрался же. Причем мне никто ничего не объяснял. Дорогу осилит идущий!

    Двигаемся дальше. Вообще, следует отметить, что каналы запросов прерывания относятся к системным ресурсам. Дам короткое но очень меткое определение: системными ресурсами называются коммуникационные каналы, адреса и сигналы, используемые узлами компьютера для обмена данными с помощью шин. Вот так вот просто и понятно. К системным ресурсам кроме IRQ относятся: адреса памяти, каналы прямого доступа к памяти и адреса портов ввода/вывода. Но об этом в других статьях. А на сегодня все. Удачи в Ваших начинаниях.