Библиотека Интернет Индустрии I2R.ru |
|||
|
Как избежать зависаний компьютера или О прерываниях. Маленький ликбезРедко какой компьютер, особенно домашний, проживет всю свою жизнь, ни разу
не подвергшись или модернизации, или добавлению новых устройств. В большинстве
случаев, естественно, при соблюдении самых элементарных правил, такая операция
проходит безболезненно, не вызывая никаких особых проблем. Но примерно каждый
десятый (или даже двадцатый - не суть важно) компьютер доводится до нерабочего
состояния: начинает часто зависать, отказывается выполнять какие-либо функции,
а то и просто вываливается в столь любимый всеми нами синий экран смерти. Как
правило, наиболее вероятная причина таких неполадок кроется в конфликтах оборудования
(нового и старого), не поделивших какие-либо аппаратные ресурсы. Хорошо, если
Ваша квалификация позволяет решить возникшие проблемы, или поблизости есть кто-то,
который может Вам помочь, а если ничего подобного нет? Однако не боги, как известно,
горшки обжигают, посидим, подумаем - глядишь, и прорвемся, ведь не так уж все
и сложно, хотя проблема совместимости самого различного оборудования, с момента
своего возникновения в середине 80-х годов, до сих пор ни сколько не уменьшилась.
Предлагаемая статья поможет пользователю разобраться с одним из видов аппаратных
ресурсов, требующихся для оборудования, и чаще всего являющихся первопричиной
всевозможных конфликтов - с аппаратными прерываниями (IRQ). Аппаратные ресурсы системы Компоненты для своей работы могут требовать три основных вида различных аппаратных ресурсов. Практически любое устройство использует один или несколько портов ввода/вывода. В данном случае имеется в виду не последовательный или параллельный порт, а просто специальный адрес, что-то вроде адреса в оперативной памяти. Работа с этими портами осуществляется специальными командами центрального процессора, с помощью которых в порт или записывается какая-либо информация, или считывается из него. Зачастую обмен информацией между процессором и устройством идет только через порты, причем некоторые устройства берут на себя десяток, а то и более адресов портов, каждый из которых служит для выполнения какой-то определенной функции. Гораздо реже используются каналы прямого доступа к памяти (DMA - Direct Memory Access). Данный тип взаимодействия предназначен для устройств, обменивающихся большими блоками данных с оперативной памятью, например, дисковые накопители или принтеры. Весь обмен идет в обход центрального процессора, который лишь инициирует операцию обмена и сразу же приступает к выполнению другой работы. Такой подход способен значительно увеличить производительность всей системы. А третьим видом ресурсов являются аппаратные прерывания, которые являются базовым
механизмом реакции системы на внешние события. Аппаратные прерывания, называемые
обычно IRQ (Interrupt ReQuest) - это физические сигналы, с помощью которых контроллер
устройства информирует процессор о необходимости обработать некоторый запрос.
Условно схема обработки прерывания может выглядеть следующим образом:
В отличие от программных прерываний, вызываемых исполняемой прикладной программой,
аппаратные прерывания могут происходить в самые неожиданные моменты времени,
и, кроме того, могут возникнуть одновременно сразу несколько прерываний. Для
того чтобы система не слишком "задумалась", какое прерывание обслуживать в первую
очередь, существует специальная схема приоритетов. Каждому прерыванию назначается
свой уникальный приоритет. Если приходит одновременно несколько прерываний,
то система отдает предпочтение самому высокоприоритетному, откладывая на время
обработку остальных, менее важных, прерываний. Распределение прерываний Рассмотрим, как обычно распределяются прерывания в стандартном компьютере.
Некоторые из номеров жестким образом привязаны к определенным устройствам, некоторые
можно освободить и использовать для своих нужд. Начнем по порядку:
Узнать, как в данный момент распределены номера прерываний в Вашем конкретном
случае можно несколькими способами. При запуске компьютера, еще до начала загрузки
Windows, появляется текстовая таблица конфигурации. Сразу после нее идет перечень
PCI-устройств с указанием назначенного им номера IRQ. Или, если Вы все еще работаете с Windows 9x, то в панели управления есть иконка
Система, щелкните на ней - и выбирайте закладку "Устройства". В свойствах устройства
"Компьютер" можно найти перечень всех устройств с указанием их IRQ. В Windows
2000/ХР у нас нет непосредственного доступа к управлению прерываниями, поэтому
для просмотра списка IRQ нужно воспользоваться стандартной информационной утилитой
(Панель управления/Администрирование/Управление компьютером/Сведения о системе/Ресурсы
аппаратуры). Ну и, наконец, никто не отменял использование утилит, тестирующих
аппаратные и программные возможности компьютера. Среди них, без сомнения, самой популярной является SANDRA, способная предоставить
пользователю исчерпывающую информацию, в том числе и о прерываниях. Конфликты устройств Не вдаваясь в излишние детали, можно сказать, что конфликт - это ситуация, при которой несколько объектов одновременно пытаются получить доступ к одному и тому же системному ресурсу. Конфликт прерываний возникает в том случае, если несколько устройств используют одну и ту же линию прерывания для посылки сигнала запроса и отсутствует механизм, позволяющий ранжировать эти запросы, в результате чего происходит либо сбой, либо одно из устройств попросту перестает работать. Чтобы четко представлять себе, как можно избежать конфликтов или устранить их, нужно разобраться в механизме управления IRQ. Как Вы знаете, персональные компьютеры начались с IBM PC ХТ. Его архитектура предусматривала всего восемь линий аппаратных прерываний, которыми управлял специальный контроллер. Каждой из них назначался свой уникальный номер, который определял приоритет прерывания и адрес его обработчика (так называемый вектор прерывания). Следующий вариант архитектуры, IBM PC AT, дополнил существующие линии еще восемью, для управления которыми использовался второй контроллер, подключаемый к одной из линий прерывания первого контроллера. К сожалению, на этом данная архитектура остановилась в своем развитии, поэтому все современные компьютеры, несмотря на значительно возросшее число используемых в них дополнительных устройств, по-прежнему имеют только шестнадцать линий прерываний, одно из которых резервируется для эмуляции второго контроллера. Изначально у компьютера IBM PC AT была только одна шина, по которой устройства могли общаться с процессором и памятью - ISA. Большинство линий прерываний были закреплены за стандартными ISA-устройствами, поэтому, когда появилась новая универсальная шина PCI, выяснилось, что на ее долю осталось всего четыре свободные прерывания, обозначаемые как INT A, INT B, INT C, INT D, поэтому всего только четыре PCI устройства могут получить в системе независимые прерывания. Но при этом необходимо учитывать, что на особенном положении находится контроллер IDE, который не входит в число тех четырех устройств только потому, что, хотя по способу передачи данных он и является PCI-устойством, но за ним жестко закреплены свои прерывания IRQ 14 и IRQ 15, как для старых устройств ISA. Для шины AGP, которая является разновидностью шины PCI, "пожертвован" INT A, а шина USB, как один из системных компонентов, подключается к PCI, используя INT D, что уменьшает число "честных" PCI устройств всего до двух. Не следует забывать и о подсистеме управления питанием Power Management/System Management, которая так же требует своего прерывания. Таким образом, в реальной жизни, при наличии нескольких устройства PCI, использующих прерывания, невозможно обеспечить им уникальные аппаратные IRQ, и в таких случаях используются аппаратно-программный способ, основанный на базе технологии Plug & Play, что теоретически позволяет избежать возникновения конфликтов. Хотя в реальной жизни может случиться все, что угодно, да и оставшиеся до сих пор устройства ISA не умеют делиться линиями прерываний, потому являются основными провокаторами конфликтов. Таким образом, задача устранения конфликтов сводится к правильному распределению номеров прерываний в случае возникновения проблем с устройствами ISA или "глючными" драйверами. В системе номера IRQ распределяются между физическими линиями дважды. Первый
раз это делает системный BIOS при начальной загрузке системы. Каждому Plug &
Play-устройству (а к ним относятся все PCI, современные ISA и все интегрированные
на системной плате устройства) назначается один номер из числа доступных. Если
номеров не хватает, несколько линий получают один общий. Для устройств PCI это
не страшно - при наличии нормальных драйверов и поддержки со стороны операционной
системы все должно нормально работать. А вот если один номер получают несколько
ISA-устройств или не менее "гремучая" смесь из PCI- и ISA-устройств, то конфликт
попросту неизбежен, и тогда придется вмешиваться в процесс автоматического распределения
прерываний. В этом случае необходимо отключить все неиспользуемые ISA-устройства
(в системах без слотов ISA они, тем не менее, присутствуют: это порты COM1,
COM2 и дисковод). Также можно отключить режимы EPP и ECP порта LPT, освободив
при этом прерывание IRQ7. Все операции по изменению прерываний в BIOS Setup
осуществляются в разделе "PCI/PNP Configuration". Есть два способа повлиять
на распределения номеров IRQ: заблокировать конкретный номер и напрямую назначить
номер линии. Первый способ доступен для всех BIOS, корректируются пункты меню
"IRQ x used by:" (в новых BIOS скрывается в подменю "IRQ Resources"). Тем прерываниям,
которые должны быть назначены исключительно ISA-устройствам, нужно поставить
"Legacy ISA". Тем самым при раздаче номеров для PCI-устройств данные прерывания
будут пропущены. Поступать так следует в том случае, если какое-либо ISA-устройство
упорно становится на одно прерывание с PCI-устройством, из-за чего оба они не
работают. В таком случае необходимо найти номер этого IRQ и заблокировать его.
PCI-устройство переходит на новый номер IRQ, а ISA-устройство остается "при
своих". Второй способ управления номерами IRQ - прямое назначение, хотя и несколько
сложнее первого, но гораздо более эффективный. Очень прискорбно, что далеко
не все современные системные платы позволяют осуществлять эту операцию. В том
же подменю BIOS Setup могут быть пункты вида "Slot X use IRQ" (другие названия:
"PIRQx use IRQ", "PCI Slot x priority", "INT Pin x IRQ"). Эта опция позволяет
устанавливать прерывания индивидуально каждому устройству на PCI и AGP шине.
При этом необходимо соблюдать следующие правила:
Ниже приведена таблица, показывающая связь между PIRQ (Programmable Interrupt
Request - программируемый запрос прерывания) и INT (Interrupt - прерывание):
Обычно следует оставить опцию в положении AUTO. Но, если возникла необходимость
установить индивидуальное IRQ устройству на AGP или PCI шине, прежде всего,
необходимо определить, в каком слоте установлено устройство. Потом, сверившись
с таблицей, можно установить основной PIRQ. Например, если сетевая карта установлена
в слот 3, то основной PIRQ будет PIRQ_2, потому как все слоты назначаются, по
возможности, на INT A. После этого выбирается желаемое IRQ, присваивая ему соответствующее
значение PIRQ. Только необходимо помнить, что BIOS будет пытаться назначить
PIRQ в INT A для каждого слота. Так что, для AGP и PCI 1 слотов основной PIRQ
это PIRQ_0, тогда как для PCI слота 2 основной PIRQ это PIRQ_1 и так далее.
Второй раз номера прерываний распределяются операционной системой, хотя Windows
9х начинает вмешиваться в произведенные BIOS-ом действия только в крайних случаях.
В Windows 98 управление системой распределения IRQ осуществляется с помощью
стандартного менеджера устройств. В списке системных устройств нужно найти шину
PCI. В ее свойствах есть особая закладка. Если все настроено правильно, там будет упомянут минипорт ("успешно загружен"), а управление шиной PCI (Steering) будет включено. Таким образом, Windows'98 имеет средства для управления распределением номеров прерываний между физическими линиями. Но поскольку и BIOS чаще всего с этим хорошо справляется, этот механизм не задействуется. Но иногда он просто необходим. При использовании устаревших ISA-устройств, не поддерживающих технологию Plug & Play, BIOS может его и не заметить, отдав занятое им прерывание PCI-устройству - опять конфликт. Для его разрешения необходимо нужное прерывание зарезервировать в диспетчере устройств Windows'98. Кроме резервирования, можно непосредственно задать номер прерывания для устройства. Для этого нужно в его свойствах найти закладку "Ресурсы", отключить автоматическую настройку и попытаться изменить назначенный номер прерывания. Будьте осторожны, такая операция срабатывает далеко не всегда и порой может привести к совершенно непредсказуемым результатам. А вот о Windows 2000 (а равно и ХР) - разговор отдельный. Если у Вас достаточно
современный компьютер, то он наверняка поддерживает интерфейс конфигурирования
ACPI. Windows 2000 в таком случае вообще проигнорирует действия BIOS и "повесит"
все PCI-устройства на одно логическое прерывание. В общем случае это будет отлично
работать (когда нет устройств ISA), но иногда могут возникнуть проблемы. Чтобы
получить возможность изменять номера прерываний, нужно либо поменять HAL-ядро,
либо переустановить Windows 2000 с отключенным в BIOS ACPI. Замена ядра производится
так: в диспетчере устройств выбирается "Компьютер/Компьютер с ACPI", после этого
необходимо изменить драйвер на "Стандартный компьютер" и перезагрузиться. Если
это не поможет, придется переустановить Windows 2000 заново. Заключительные советы Установив новую операционную систему со всеми драйверами устройств и, убедившись в том, что она работает без проблем, стоит записать все настройки компьютера, особенно если осуществлялись какие-либо изменения установок по умолчанию. Надежнее всего такую информацию записать на обычном листке бумаги. Такая информация может быть очень полезна при внесении каких-либо изменений в настроенную систему, а так же поможет решить проблемы, которые могут возникнуть, если при установке нового оборудования все настройки "съедут" (такое иногда тоже бывает). И, самое главное, помните: большинство возникающих проблем связано с низким уровнем компьютерной грамотности хозяина компьютера. Поэтому нужно всегда стремиться к самообразованию, тогда и проблем будет поменьше, а те, что все-таки возникнут - не будут казаться неразрешимыми. |
|
2000-2008 г. Все авторские права соблюдены. |
|