Як боротися з irq
У цій статті я хотів би розповісти про те, що може ніколи не нагадувати про себе, а може і коштувати нервів після складання або апгрейда комп'ютера: зависання, мимовільні перезавантаження, вперте небажання грузиться, постійні "сині екрани смерті", неможливість виявлення пристроїв, невірна робота ... Список можна продовжувати ще довго. Дуже часто такі "глюки" відбуваються саме з вини переривань, а якщо Ви цікавитеся комп'ютерами, то обов'язково повинні знати, звідки і чому з'являються подібні проблеми і, саме, напевно, головне, як з цим боротися.
Переривання або IRQ (Interrupt Request) - це сигнали, які повідомляють процесору, що потрібно обробити надійшов від пристрою запит, а посилає процесору оні сигнали контролер цього самого пристрою, тобто за допомогою IRQ процесор реагує на різні події.
Так уже склалося, що при розробці будь-якої технології створюються деякі обмеження, не спеціально, звичайно, а через якийсь особливості цього нововведення або просто нестачі. Так сталося і з перериваннями. Спочатку, коли IBM розробляла архітектуру IBM PC (аж в 1980-81 роках минулого тисячоліття), їх було закладено не так багато (8), потім, правда, додали ще стільки ж, забравши одне "старе" переривання під контролер нових, але я б не сказав, що і цього виявилося достатньо. А потім фірма IBM перестала бути єдиною, хто займався платформою PC, і, щоб уникнути несумісності з іншими, ніхто більше переривань і не додав.
Які можуть бути проблеми?
Коли архітектуру IBM PC тільки створювали, переривань було створено небагато, всього вісім, як я вже писав, і віддавали їх на будь-яку "дурницю", на кшталт портів COM, хоча виправдовує інженерів IBM те, що вибору особливого не було, його довелося шукати пізніше. Очевидно, ніхто не пророкував платформі таке майбутнє, тому для її родзинки, тобто можливості розширення, було залишено тільки одне переривання, яке потім було зайнято контролером другий "вісімки" IRQ. Правда, варто зауважити, що додаткові переривання могли (і можуть) бути вивільнені шляхом відключення різних займають їх ISA-пристроїв: портів, флоппі-дисковода. Так ось, помилки, або конфлікти, виникають коли кілька пристроїв намагаються працювати на одному перериванні. Це дуже проблематично, тому що багато сучасних пристроїв, особливо звукові карти і всілякі мультимедійні комбайни несуть на собі відразу кілька пристроїв. Навіть найпростіші "звуковухи" мають на борту не менше чотирьох девайсів. Ось так виглядає карта переривань в сучасному комп'ютері:
Вторинний канал IDE
Питається: що робить мій внутрішній модем, який, до речі, несе на собі більше одного пристрою, на одному перериванні (з-під відсутнього LPT2) зі відразу двома контролерами USB? А ось що.
Вихід був знайдений
Як відомо, комп'ютери можуть оперувати тільки з "1" і "0" або "є сигнал" і "немає сигналу". Якщо пристрій ISA виставить на лінію сигнал "1", то іншого пристрою на цій же лінії свої одиниці як не роби, контролер на них не відреагує. У випадку з PCI контролер перевіряє джерело сигналу і тільки потім обробляє його. Це і дозволяє поміщати кілька пристроїв на одне переривання. Теоретично так, але майте на увазі, що не варто "вішати" пристрою постарше і новіше на один канал IRQ. Є також думка, що не варто нічого ставити на одне переривання зі звуковою картою, можуть з'являтися помилки. Це, звичайно, відбувається далеко не завжди, але краще збагнути що-небудь надійніше.
Налаштування переривань з 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 я як не шукав, так і не знайшов, як скасувати автоматичну настройку.
Конструктор uCoz