Поговорим об IRQ

advertisement
Поговорим об IRQ
Дмитрий Паринов
Даже ребенок знает, что персональный компьютер представляет собой агрегат из
множества компонентов, обменивающихся друг с другом информацией тем или иным
способом. Об этом можно и не думать, если приобретая готовый компьютер
самостоятельно больше не копошиться в его системном блоке: настроенный перед
продажей компьютер будет нормально работать в течение долгого времени. Однако такая
ситуация встречается достаточно редко. Современная техника довольно быстро
устаревает, а значит, нуждается в постоянной модернизации. Для выполнения этой
процедуры можно, конечно, обратиться в специализированную фирму, но соблазн сделать
все своими руками очень велик (дополнительных денег не надо платить, да и
комплектующие можно подешевле купить). Насколько это оправдано?
В 90% случаев модернизация компьютера в домашних условиях не вызывает никаких
проблем. Но примерно в 10% компьютер доводится до нерабочего состояния: начинает
часто зависать, отказывается выполнять какие-либо функции и т. п. Как правило, наиболее
частая причина таких неполадок кроется в конфликтах оборудования (нового и старого)
из-за каких-либо аппаратных ресурсов. Хорошо тому, кто способен своими силами
решить возникающие проблемы, а если нет? Однако поводов для паники нет: не так все и
сложно и не так уж много нужно знать, чтобы не наступить на заботливо подложенные
еще в середине 80-х грабли.
Предлагаемая статья поможет пользователю разобраться с одним из видов аппаратных
ресурсов, требующихся для оборудования, - с аппаратными прерываниями (IRQ).
Пользователь, конечно, сразу не станет профессионалом в сборке и модернизации
компьютеров, однако значительный шаг в этом направлении сделает, вооружившись
нужными знаниями о принципах работы компьютера.
Аппаратные ресурсы
Компоненты для своей работы могут требовать четыре вида различных аппаратных
ресурсов. Практически любое устройство использует порт ввода/вывода, а чаще всего набор этих портов. В данном случае имеется в виду не последовательный или
параллельный порт, а просто специальный адрес, подобный адресу в оперативной памяти.
Работа с этими портами осуществляется специальными командами центрального
процессора, с помощью которых в порт записывается какое-либо значение, или
прочитывается в нем. Зачастую обмен информацией между процессором и устройством
идет только через порты. Так, например, MIDI-синтезатор обычно использует порт 330Н.
Все, что посылается в данный порт, попадает именно в синтезатор. В более сложном
случае устройство берет на себя десяток, а то и более адресов портов. Обратившись по
одним адресам, можно получить информацию об устройстве, а по другим - изменить его
параметры.
Гораздо реже используются каналы прямого доступа к памяти. Данный тип
взаимодействия предназначен для устройств, обменивающихся большими блоками
данных с оперативной памятью. Весь обмен идет в обход центрального процессора,
который лишь инициирует операцию обмена и сразу же приступает к выполнению другой
работы. Такой подход способен значительно увеличить производительность всей системы.
Многие устройства работают по принципу отображения на память. При этом устройство
перехватывает обращения по некоторым адресам в адресном пространстве процессора
(обычно в незанятых областях ПЗУ). Программы "думают", что работают с памятью, но на
самом деле обмениваются данными с устройством.
А четвертым видом ресурсов являются аппаратные прерывания (IRQ). Для чего они
используются, проще всего понять на примере. Обратимся к работе процессора с какимнибудь медленным устройством, например, последовательным или параллельным портом.
Пусть процессор через этот порт передает внешнему устройству строку символов.
Рассмотрим протокол их работы в данном случае.
• Процессор передает модему или принтеру первый символ. Внешнее устройство работает
достаточно медленно, поэтому процессор переключается на другую задачу.
• Процессор занимается своей работой, принтер (или модем) выводит символ.
• Вывод символа закончен. Нужно сообщить об этом процессору.
• Параллельный или последовательный порт обращается к контроллеру прерываний,
который генерирует прерывание процессора. Текущая работа прекращается и начинается
программа обработки прерывания.
• Программа определяет, что прерывание произошло из-за освобождения устройства и
посылает в него новую порцию данных. После этого процессор возвращается к
прерванной работе.
• Переход ко второму шагу.
Если бы не механизм прерываний, процессору пришлось бы постоянно опрашивать
устройство, чтобы определить момент его готовности к приему новых данных.
Аппаратные прерывания применяются не только медленными внешними устройствами,
но и теми компонентами компьютера, которые требуют немедленной обработки своей
информации. Такими устройствами, например, являются таймер и часы реального
времени. Если процессор не будет "бросать" всю остальную работу по их сигналу, ни о
каком точном внутрикомпьютерном времени
речи быть не может (а это означает, что не
станут работать программы-шедулеры и
многое другое). Механизм прерываний
полезен и для устройств, обеспечивающих
взаимодействие пользователя с
компьютером. Действительно, зачем
процессору отвлекаться на работу с
клавиатурой или мышью в те моменты,
когда человек их не трогает. Зато нажатие на
любую клавишу будет мгновенно
обработано.
Вот что говорит SisSoft Sandra об используемых и свободных IRQ
Конфликты, конфликты, конфликты...
Что является причиной аппаратных конфликтов? Все очень просто: если два устройства
попытаются использовать одинаковые ресурсы, конфликт неизбежен. Ведь все остальные
устройства не подозревают, что на одном порту ввода/вывода "висит" сразу два
устройства. Они обращаются к одному, а попадают на другое. Хорошо, если это приведет
лишь к получению ошибочных данных. Бывает и так, что устройство просто не способно
обработать перехваченные чужие данные. Зачастую после этого компьютер и тремя
пальцами не поднять, приходится нащупывать кнопку Reset.
Чаще всего такая ситуация случается именно из-за IRQ. Дело в том, что адресов портов
ввода/вывода в компьютере очень много - 65 535. Даже если каждое устройство будет
потреблять 256 адресов, их все равно хватит на столько же устройств. Каналы прямого
доступа в память используются далеко не всеми устройствами: у меня на компьютере,
например, из восьми имеющихся каналов занято всего четыре. Кроме того, устройства для
шины PCI и их модификации работают с памятью не так, как старые ISA-платы.
Видеокарта на шине AGP использует системное ОЗУ очень активно, но не занимает ни
одного канала прямого доступа к памяти.
Совсем иначе обстоит дело с IRQ. Когда создавался первый персональный компьютер
фирмы IBM, было решено применить контроллер прерываний, поддерживающий лишь
восемь номеров IRQ. Впоследствии ситуацию несколько исправили: IBM AT уже
содержала два каскадно-соединенных контроллера, что позволило увеличить число
прерываний до 15. Однако сегодня этого зачастую недостаточно, а часть номеров
прерываний уже зарезервировано за устройствами, интегрированными на системной
плате. Кроме того, не все свободные прерывания имеют практическое применение. К
счастью, не все устройства используют прерывания, а иногда удается заставить два
компонента использовать одно прерывание. Но это слабое утешение в случае
возникновения конфликтов.
Как разные устройства используют IRQ
Самое удивительное, что даже столь небольшое количество прерываний устройства
используют аж тремя способами. Такое происходит из-за трех типов плат
расширения,встречающихся в современных компьютерах.
Первый тип - старые ISA-карты (так называемые Legacy Cards, т. е. "унаследованные
карты"). С ними все довольно просто. Чаще всего такая карта использует IRQ из какоголибо определенного набора. Конкретный номер выбирается одной-двумя перемычками на
плате. Для того чтобы застраховаться от всех проблем, стоит указать, что данный номер
используется старой ISA-картой (делается это в BIOS).
Примерно лет шесть назад фирмы-производители решили избавить пользователя от
необходимости разбираться с перемычками. Идея-то замечательная, но, как известно,
благими намерениями вымощена дорога в ад. Спецификация PnP ISA избавляет от
необходимости разбираться с тем, какие номера прерываний заняты, а какие можно
использовать, зато сильно мешает решать проблемы при возникновении конфликтов. Дело
в том, что ISA на такого рода функцию просто не была рассчитана. К вопросу пришлось
подойти в лоб: PnP-карта "спрашивает" у BIOS, какие ресурсы свободны, выбирает из них
наиболее подходящий для себя набор и начинает его использовать. Теоретически на
выбор ресурсов можно повлиять программными средствами, однако не всегда это
получается. Был в моей практике такой случай. Звуковую карту SB 16PNP нужно было
установить в компьютер, содержащий сетевую карту, использующую IRQ 5 (наиболее
"любимое" звуковыми адаптерами). Карта была с успехом установлена и начала
использовать IRQ 10. Такой вариант не самый удачный, поскольку многие игры для DOS
(которых на тот момент было подавляющее большинство) в данном случае не способны
работать со звуком. Карту было решено перевесить на IRQ 7, зарезервированное для
параллельного порта, потому что драйвер имеющегося принтера не использовал
прерывания. Программа ICU предупредила о том, что IRQ 7 уже используется, но номер
изменила. Однако после перезагрузки выяснилось, что звуковая карта оказалась на IRQ 5
(вместе с сетевой картой). Сорокаминутные магические пассы над системным блоком,
шептания таинственных заклинаний и вполне понятных ругательств, манипуляции с ICU
и BIOS ни к чему не привели: звуковая карта не желала даже вернуться на IRQ 10. К
счастью, сетевая карта была старой, поэтому при помощи всего одного джампера за
десять секунд она была переставлена на IRQ 9. Надеемся, что эта история убедительное
подтверждение того, что спецификация Plug and Play ISA не всегда облегчает жизнь
пользователя.
А вот с платами для шины PCI таких проблем не возникает. Она изначально
разрабатывалась как шина для Plug and Play. Было применено достаточно изящное
решение: номера прерываний выделяются не конкретной карте, а слоту расширения.
Естественно, что установить в один слот сразу две карты невозможно, поэтому
конфликтов быть просто не может. Чтобы пользователю сподручнее было работать,
номера слотам привязываются автоматически, но они могут быть переназначены при
помощи BIOS или операционной системы, соответствующей спецификациям Plug and
Play.
Конфликты и платы PCI
Из вышесказанного вроде бы следует, что при переходе на шину PCI про конфликты из-за
номеров прерываний можно забыть. Однако это не совсем верно. Даже после того, как из
компьютера будет удалена последняя ISA-плата, проблемы все равно неизбежны.
На первый-второй рассчитайсь!
Как же нумеруются слоты шины PCI? В отличие от слотов ISA, которые хоть
наискосок считай, этот вопрос важен: именно в таком порядке выделяются
номера прерываний при автоматической настройке.
Итак, возьмите материнскую плату в руки так, чтобы слоты были расположены
горизонтально. Поверните ее так, чтобы слоты ISA (у кого они еще есть) были
снизу, а слот AGP - сверху. При таком расположении платы слоты нумеруются
сверху вниз. Так что при установке платы можете сразу прикинуть, какое IRQ
должно достаться плате.
Первая и самая главная проблема в том, что современные чипсеты ограничивают число
номеров прерываний, которые могут использоваться шиной PCI. В настоящее время их
всего четыре (если не считать два IRQ, зарезервированных для EIDE-контроллера). Один
из номеров используется контроллером USB, так что если его не отключать, то в
компьютер можно установить лишь три платы, использующие IRQ. Подчеркну, речь идет
именно об ограничениях, накладываемых чипсетом, и они абсолютно не зависят от числа
свободных IRQ в системе. Звуковой карте прерывание нужно, большинству графических
адаптеров - тоже (шина AGP ситуацию не спасает - это лишь расширение PCI, способное
использовать только те же ресурсы). Значит, остается всего одно (!) свободное
прерывание. С учетом того, что локальные сети масштаба микрорайона становятся все
более распространенными, отдать его придется сетевой карте. И все - об остальных
устройствах можно забыть. Впрочем, к счастью, некоторые из устройств можно без
проблем "вешать" на прерывание парами. Кроме того, многие современные
видеоадаптеры не требуют номера прерывания. Но в целом ограничение на число
прерываний весьма серьезная и причем не решаемая проблема. Да и в ближайшее время
ничего не изменится: ни один из разработчиков наборов микросхем поддержки не заявил
о том, что в их новых изделиях это ограничение будет снято.
Вышеописанное ограничение со стороны чипсета способно создать конфликты
оборудования и по другой причине. Судите сами: с одной стороны, ограниченное число
IRQ приводит к тому, что на материнской плате может быть не больше четырех слотов
PCI (при наличии AGP - не больше трех), даже если отключить USB. Однако у
большинства современных материнских плат четыре или даже пять слотов PCI и слот
AGP. Как это делается? Да очень просто: слоту AGP и первому слоту PCI присваивается
один и тот же номер прерывания. Если слотов пять, то один номер разделяют также
четвертый и пятый слоты (их нумерацию см. во врезке). Вот вам и независимое выделение
прерываний! Иногда об этом забывают и начинаются проблемы.
Еще одна проблема связана с необходимостью сохранения совместимости со старыми
устройствами и программным обеспечением. Так, например, все звуковые карты для
шины PCI способны эмулировать Sound Blaster Pro (или даже Sound Blaster 16) для
совместимости с приложениями DOS. Для эмуляции они также используют IRQ 5, что
создает большие проблемы при попытке установить в компьютер сразу две звуковые
карты PCI. Решение здесь сводится к отключению режима эмуляции у одной из карт.
Однако это не всегда так просто сделать: в некоторых картах эмуляция SB Pro не
отключается. Впрочем, две звуковые карты в один компьютер редко кто устанавливает.
Кроме всего прочего, не надо забывать о том, что некоторые сложные устройства требуют
сразу двух IRQ. В таком случае не следует устанавливать в следующий за такой картой
слот (о порядке слотов PCI см. во врезке) плату, требующую IRQ: прерывание этого слота
уже занято. Если же сделать так необходимо, остается только одно: привязывать номера
прерываний к слотам вручную. Так или иначе придется смириться с тем, что в
компьютере надо будет использовать на одну карту PCI меньше (число прерываний-то
ограничено).
Каждому - свое
Рассмотрим, наконец, как обычно распределяются прерывания в стандартном
компьютере. Некоторые из номеров жестким образом привязаны к определенным
устройствам, некоторые можно освободить и использовать для своих нужд. Начнем по
порядку.
• IRQ 0 - прерывание таймера. Генерируется 91 раз за пять секунд. Применяется в данном
качестве с момента создания первого компьютера IBM PC.
• IRQ 1 - прерывание клавиатуры. Так же, как и предыдущее, было изначально.
Генерируется контроллером клавиатуры при каждом нажатии на клавишу или ее
отпускании.
• IRQ 2 - именно через него в IBM AT работал второй контроллер прерываний.
Впоследствии вместо двух отдельных микросхем оба контроллера превратились в две
части чипсета, но IRQ 2 так и осталось никому недоступным: его использование системой
сохраняется для совместимости.
• IRQ 3 используется вторым коммуникационным адаптером (UART2). Какое конкретно
устройство будет его генерировать, зависит от очень многих факторов: это может быть
второй последовательный порт COM2 (интегрирован на материнской плате), внутренний
модем, настроенный как COM2 или COM4, или инфракрасный адаптер. Можно отключить
UART2, но присвоить IRQ 3 никому не удастся.
• IRQ 4 используется первым коммуникационным адаптером. В остальном все
практически идентично предыдущему случаю (генерируется первым последовательным
портом COM1, модемом на СОМ1 или СОМ3), за исключением инфракрасного адаптера.
• IRQ 5 изначально предназначалось для использования вторым параллельным портом
LPT2. Впоследствии оказалось, что два параллельных порта практически никому не
нужны, поэтому IRQ 5 перешло в разряд свободных. В IBM XT на IRQ 5 висел жесткий
диск. Через некоторое время Creative Labs, создавая Sound Blaster Pro, пришла к выводу,
что предпочтительнее всего использовать именно IRQ 5. С тех пор является излюбленным
для большинства звуковых карт ISA. Звуковые карты для PCI также иногда используют
это прерывание для эмуляции SB Pro. IRQ 5 можно привязать к слоту PCI.
• IRQ 6 используется флоппи-контроллером, начиная с первых РС. Сейчас его можно
отключить, если перейти на совместимый с обычными дискетами накопитель LS-120
(имеет интерфейс EIDE). Однако прерывание все равно использовать не удастся: ISAкарты на работу с ними не рассчитаны, и к слоту PCI привязать его нельзя.
• IRQ 7 - по умолчанию прерывание первого параллельного порта LPT1. При
отключенном порте (если принтер отсутствует или рассчитан на 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 применяются, соответственно,
первичным и вторичным EIDE-контроллерами. В
большинстве случаев по крайней мере один из них
может быть освобожден от устройств и отключен,
что позволит применять IRQ в любых целях.
Настройка ресурсов устройств в Windows 95
Несколько советов
Не сложно заметить, что свободных IRQ очень мало - по умолчанию их лишь три.
Очевидным решением кажется отключение контроллера USB, что позволяет освободить
IRQ 11. Однако лучше сделать по-другому: перейти на мышь, подключаемую к USB, как
рекомендовано стандартом РС 99, и освободить IRQ 12. Это более полезно из расчета
последующих модернизаций: к USB можно подключить также сканер и принтер (что
позволит освободить еще и IRQ 7).
Если же вы все-таки решили отобрать IRQ 11 у USB, не стоит пугаться того, что Windows
95/98 все равно показывает, что данный номер принадлежит шине USB. Ни к чему
страшному это не приведет и конфликтов не вызовет - просто Windows не умеет
правильно анализировать информацию.
Кстати, раз уж речь зашла о Windows. При сборке или модернизации достаточно сложного
компьютера лучше не пользоваться средствами автоматической конфигурации,
встроенными в эту систему. Ничего, кроме лишних проблем, ее "Мастер настройки
оборудования" не принесет.
Перед тем как что-то менять в настроенной системе, стоит записать все настройки (лучше
на бумажку). Для того чтобы их посмотреть, желательно использовать не встроенные
средства Windows, а программы сторонних производителей. Информация о
работоспособных установках поможет решить проблемы, которые возникают, если при
установке нового оборудования все настройки "съедут" (это иногда бывает).
Download