конфлікти irq
Добре, коли після складання або планової модернізації комп'ютер з першого разу запускається і працює стійко і без глюків. Набагато гірше, якщо виникають несподівані проблеми - спонтанні перезавантаження і зависання, збої програм, непрацездатність або "невидимість" пристроїв і т.п. Перша причина, яка зазвичай приходить в голову в такому випадку, - конфлікт переривань. А чи добре ми знаємо природу цього явища, чи достатньо підготовлені до боротьби з ним?
Можна сказати, що конфлікт - це ситуація, при якій кілька об'єктів одночасно намагаються отримати доступ до ресурсу, який призначений тільки для одного з них. Конфлікт переривань виникає в тому випадку, якщо кілька пристроїв використовують одну і ту ж лінію переривання для посилки сигналу запиту і немає механізму, що дозволяє обробляти конкуруючі запити. Якщо драйвер, отримуючи управління, працює не з тим пристроєм, який послав запит, то або відбувається збій, або один з пристроїв просто не працює.
Виникає питання: чи можуть кілька пристроїв використовувати одну і ту ж лінію переривання, або це в принципі неможливо? Адже якщо драйвер зможе визначити, від кого саме надійшов запит, то він буде реагувати на сигнали тільки "свого" пристрою, ігноруючи всі інші. Але це повинно бути якимось чином заздалегідь обумовлено, інакше конфлікт неминучий.
Локальна шина PCI була спроектована з урахуванням спільного використання переривань. Кожен пристрій PCI має коректно працювати на одній лінії переривання з іншими PCI-пристроями. Це зроблено в такий спосіб: факт наявності сигналу на лінії переривання визначається не по фронту, тобто зміни рівня напруги, а по самому факту наявності певної напруги. Змінювати напругу в лінії може відразу кілька пристроїв, стаючи як би в чергу на обслуговування.
Таким чином, спільне використання одного IRQ декількома PCI-пристроями не є конфліктом по визначенню. Однак іноді проблеми все-таки виникають. По-перше, не всі пристрої PCI коректно працюють на одній лінії переривання з іншими. По-друге, іноді драйвери мають помилки, через які вони не можуть правильно визначати джерело сигналу, заважаючи іншим драйверам. По-третє, далеко не всі пристрої працюють на шині PCI; наприклад, ISA-пристрої, до яких відносяться, наприклад, контролери COM / LPT-портів, ділити переривання з іншими не вміють. Щоб чітко уявляти собі, як можна уникнути конфліктів або усунути їх, потрібно розібратися в механізмі управління IRQ.
Організація апаратних переривань в персональному комп'ютері
Розподіл номерів IRQ засобами BIOS
Розподіл номерів IRQ засобами Windows