Головна > Комп'ютери > Материнські плати >
Що таке IRQ і як з ними боротися

File:		IRQ_FAQ.DOC
WrittenBy:	Alexey Kulentsov, 2:5020/449.14@fidonet
Version:	1.03 from 06/02/96 20:50
ThanksTo:	Andrew Suvorow,	2:5020/168.101
		Igor Sysoev,	2:5020/1.486

		   Що таке IRQ і як з ними боротися


 Q: Що таке IRQ і навіщо це треба?

 A: IRQ розшифровується як Interrupt Request, або запит на апаратне
    переривання. Переривання - це процес, коли процесор припиняє
    нормальне виконання програми, зберігає необхідну інформацію в
    стеку і переходить до якоїсь зазделегідь вибраної адреси пам'яті.
    Викликається переривання апаратним сигналом з якого-небудь пристрою.
    Є ще так звані програмні переривання, але їх ми тут
    розглядати не будемо. Переривання мають номери, і по кожному з них
    переходить перехід на свою адресу.  Після обробки викликаної
    процедури, яке називається обробником переривання, управління
    повертається в початкову точку, і продовжується виконання
    первинної програми.  Адреси можуть вибиратися різними
    способами. Наприклад, бути фіксованими, або знаходитися в таблиці в
    якомусь місці пам'яті.  Останній випадок і має місце на процесорах
    сімейства 80x86.  Далі будемо розглядати тільки це сімейство і
    IBM-сумісні машини на його основі.

    Для підтримки IRQ в схемі комп'ютера необхідна додаткова
    мікросхема, так званий контролер переривань. В цьому випадку
    використовується 8259 або його аналоги. В сучасних машинах це просто
    частина чіпсета.

    Апаратні переривання потрібні, щоб при обслуговуванні процесором
    зовнішніх пристроїв, що вимагають управління або обміну інформацією,
    уникнути циклів їх опиту, на що буде потрібно багато процесорного
    часу і програмна підтримка цих циклів у всіх програмах,
    працюючих на комп'ютері. При застосуванні IRQ же програма може не
    піклуватися про це - обробка пристроїв відбувається в фоні для неї.
    Крім того, це дозволяє оперативно реагувати на пристрої,
    яким потрібна швидка обробка, щоб не втратити дані. Правда,
    тут є свої недоліки. Наприклад, програма може заборонити на
    деякий час апаратні переривання. Крім того, для початку
    обробки переривання повинна закінчитися попередня команда, повинні
    бути збережені регістри тощо, тобто затримка може бути досить
    значна. Для більш оперативного реагування іноді застосовують
    механізм DMA (Direct Memory Access). Там процесор не бере участь в
    пересилці даних, і для цього використовується ще одна додаткова
    мікросхема, контролер DMA. Але це вже зовсім інша розмова.

 Q: Що вміє мікросхема 8259?

 A: 8259 може обслуговувати вісім запитів на переривання від зовнішніх
    пристроїв, відповідно для цього є вісім входів, називаються
    вони IRQ0-IRQ7. При надходженні одиничного сигналу на один з входів
    він запам'ятовується у вхідному регістрі запитів переривання і далі
    обробляється логікою мікросхеми. При каскадному з'єднанні
    декількох мікросхем можливо обслуговування до 64 ліній IRQ. Таке
    з'єднання називається каскадним, оскільки є один ведучий контролер
    і до восьми ведених, що підключаються до входів IRQ ведучого. Переривання
    мають рівні пріоритетів, пріоритети задаються і міняються програмним
    шляхом.  Програмним шляхом також можна забороняти або дозволяти
    окремі IRQ, а також видавати сигнал кінця переривання, що
    дозволяє видачу запам'ятовуваних в регістрі запитів переривання сигналів
    з більш низьким пріоритетом, отриманих під час обробки більш
    пріоритетного запиту.

 Q: Як це апаратно виглядає в IBM-сумісних машинах?

 A: Частина IRQ в машині зарезервовані для стандартних пристроїв на
    материнській платі, а частина може використовуватися зовнішніми пристроями
    і тому виведені на стандартний слот ISA. В машинах класу XT один
    контролер і є 8 переривань, з них шість виведені на шину:
    IRQ2-IRQ7.  В AT до першого контролера додатково підключений ще
    один, і в результаті є 15 переривань, оскільки одне (IRQ2
    першого контролера) використовується для каскадування. На шині
    додатково з'явилися сигнали IRQ10-IRQ12, IRQ14, IRQ15. В схемі XT
    сигнали IRQ на шині в самому простому випадку підключені прямо до входів
    контролера і не зашунтовані резисторами. В інших конструкціях на
    логіці ставляться буферні повторювачі. Відповідно пасивний сигнал
    на шині, як і на мікросхемі - нульовий, а надходження запиту на
    переривання відбувається по одиничному фронту.

 Q: Для чого конкретно використовуються IRQ в комп'ютері?

 A: Ось невелика таблиця, в якій вказані стандартні застосування IRQ.

    Перший контролер: 8259-1.
    Стандартне місце для його векторів-з адреси 20h, або з 8-го вектора в
    таблиці переривань. Потрібно зазначити, що це невдале місце, оскільки
    починаючи з 286 процесора список зарезервованих фірмою Intel
    переривань збільшився, і апаратні переривання стали перетинатися з
    ними. Тому сучасні багатозадачні операційні системи можуть
    перенести вектора IRQ в інше місце.

   IRQ Int   Застосування  Додаткові коментарі і застосування
   --- ---   ----------  --------------------------------------------
    0	8h   Timer	 Системний таймер, 18.2 рази в секунду
    1   9h   Keyboard    Генерується при натисненні/відпусканні кнопок
    2   Ah   LPT2/Casc.  COMx, Vert.Retrace (EGA, VGA)
    3   Bh   UART 2	 COM2, COM4
    4   Ch   UART 1	 COM1, COM3
    5   Dh   Fixed disk  LPT2(AT), COMx
    6   Eh   Diskette    Генерується FDD-контр. після закінчення операції
    7   Fh   Printer	 LPT1, SoundBlaster

    Другий контролер: 8259-2.
    З'явився починаючи з AT. Стандартне місце для його векторів- 1C0h, або
    з 70h вектора.

   IRQ Int   Застосування   Додаткові коментарі і застосування
   --- ---   -----------   --------------------------------------------
    8  70h   RTC          CMOS Real Time Clock
    9  71h   IRQ2 Emul.   Емуляція IRQ2 для сумісності
   10  72h   Free         SoundBlaster, часто інші пристрої
   11  73h   Free         Загальноприйнятого застосування немає
   12  74h   Free         Загальноприйнятого застосування немає
   13  75h   Math         Переривання сопроцесора
   14  76h   Primary IDE  Генерується HDD-контр. після закінчення операції
   15  77h   Second IDE                  <<

 Q: Нічого не зрозумів щодо IRQ2/IRQ9 :-(

 A: Історія така. В PC/XT був тільки один контролер переривань, і всі
    переривання можна було використовувати для яких-небудь цілей. В AT
    необхідно було збільшити кількість переривань, а оскільки 8259
    сполучаються каскадно, це означало, що один з входів IRQ 8259-1
    необхідно було використовувати для підключення другого контролера.
    Був вибраний IRQ2. При цьому довелося вирішувати проблему сумісності.
    Справа в тому, що IRQ2 був виведений на слоти і міг використовуватися
    різними пристроями. Виходить наступна задача: є
    пристрій, який встромлявся в PC і виробляв IRQ2, і софт до
    нього, який сідав на відповідне переривання і обробляв
    його. Необхідно зробити так, щоб його можна було встромити в AT і
    щоб він і софт продовжували працювати. Вирішена була проблема таким
    чином: по-перше, на слот на контакт B4 замість IRQ2 тепер
    виводиться IRQ9 від 8259-2. По-друге, біосовський обробник IRQ9
    емулює IRQ2, тобто викликає відповідний йому вектор Int 0Ah.
    Так що тепер для старого пристрою процес виглядає таким
    чином: Пристрій генерує IRQ2, який насправді IRQ9,
    викликається обробник IRQ9 і програмно викликає обробник IRQ2
    софта до цього пристрою, що висить на Int 0Ah. Софт думає, що так і
    треба, і нічого не помічає. При конструюванні ж своїх пристроїв
    можна вішати софт відразу на IRQ9.  Природно, якщо треба залишити
    можливість встромити пристрій і в XT, то треба зробити номер IRQ
    змінним.

 Q: Навіщо потрібне переривання від EGA/VGA і де використовується?

 A: Це переривання викликається в кінці виведення кожного кадру, дозволяючи
    програмі виконувати якісь дії під час зворотного ходу променя.
    Це треба деяким графічним додаткам, щоб уникнути побічних
    візуальних ефектів при зміні сторінки або палітри. Але оскільки це
    переривання може бути заборонене на платі джампером, причому адаптери
    продаються якраз із забороненим перериванням, це переривання в
    цей час практично не використовується, оскільки ніхто не буде
    примушувати користувача для роботи програми відкривати машину і
    перетикати джампери. Щоб відстежувати кінець кадру, програми
    використовують цикли опиту через порти.

 Q: Що таке конфлікти IRQ і як їх уникнути?

 A: Конфлікт IRQ- це коли декілька пристроїв зі своїми обробниками
    намагаються використовувати один IRQ, не вміючи при цьому розділяти його
    апаратно або програмно (більшість сучасного програмного
    забезпечення якраз не вміє). Для вирішення конфлікту необхідно
    визначити, які саме пристрої перетинаються, і перенести одне з
    них на вільний IRQ. Приведемо декілька рекомендацій з цього
    приводу.

    Найчастіше зустрічаються конфлікти по IRQ СОМ-портів. Це пов'язано як з
    їх поширеністю, так і з тим, що COM2 і COM4 використовують за
    умовчанням IRQ3, а COM1 і COM3 - IRQ4. Ось конкретний приклад.

  Q: На машині стоїть стандартна мультикарточка, на COM1 знаходиться мишка.
     Треба поставити модем. Як його настроїти?

  A: По-перше, необхідно поставити його на COM3 або COM4, щоб він не
     перетинався з мультикартою в просторі портів. По-друге, з них
     необхідно вибрати той порт, IRQ якого за умовчанням не співпадає
     з тим, що використовується мишкою. В цьому випадку це COM4 (IRQ3). Якщо 
     мишка на другому порту, то для модему треба використовувати COM3 (IRQ4). 
     Насправді адреса порту і IRQ в модемах звичайно виставляються
     незалежно, але ця порада переслідує ціль уникнути нестандартних
     настройок, що спростить конфігурування програмного забезпечення. 
     Те ж стосується всіх подальших випадків.

    Стандартні призначення для СОМА-портів:
             Порт  COM1 COM2 COM3 COM4
    Базова адреса  3F8  2F8  3E8  2E8
              IRQ  4    3    4    3

    Проте, краще не будемо описувати кожний випадок словесно, а зобразимо
    таблицю рекомендованих конфігурацій, наприклад, для миші, модемів, SB 
    і принтера:

    IRQ2         IRQ3         IRQ4         IRQ5          IRQ7     IRQ10
    Модем2(COM3) Модем(COM4)  Миша (COM1)  SB
    Модем2(COM4) Миша (COM2)  Modem(COM3)  SB
    Модем3       Модем(COM4)  Миша (COM1)  Модем2(COM3)  SB
    Модем3       Миша (COM2)  Modem(COM3)  Modem2(COM4)  SB
    Модем3       Модем(COM4)  Миша (COM1)  Модем2(COM3)  Printer  SB
    Модем3       Миша (COM2)  Modem(COM3)  Modem2(COM4)  Printer  SB

    Були використані наступні міркування: по можливості стандартні
    призначення, по можливості обійтися IRQ3-IRQ7. Два останніх
    випадки- коли використовується переривання від принтера. Найменшими
    можливостями по конфігуруванню володіє мишка, від неї
    відповідно вибирається варіант. Берете список того, що треба
    поставити, і йдете з початку таблиці, перевіряючи, чи підходить каждай
    варіант, якщо викинути з нього зайве обладнання. Прошу
    міркування щодо того, як повинна виглядати ця таблиця і чи повинна 
    взагалі, відписати мені (адреса в кінці файла). Ось ще один варіант:
  >- - - - - -8<- - - - - - - - - - - - - - - - - thanks to Igor Sysoef
  г==========T==T==T===T==T==T==T==T==T==T==T==T==T==T==T==¬
  ¦Dev \ IRQ ¦ 0¦ 1¦2/9¦ 3¦ 4¦ 5¦ 6¦ 7¦ 8¦10¦11¦12¦13¦14¦15¦
  ¦----------+--+--+---+--+--+--+--+--+--+--+--+--+--+--+--¦
  ¦COM1      ¦ .¦ .¦ * ¦ *¦ !¦ *¦ ?¦ *¦ .¦ *¦ *¦ *¦ .¦ .¦ *¦
  ¦COM2      ¦ .¦ .¦ * ¦ !¦ *¦ *¦ ?¦ *¦ .¦ *¦ *¦ *¦ .¦ .¦ *¦
  ¦COM3      ¦ .¦ .¦ + ¦ +¦ !¦ +¦ ?¦ *¦ .¦ .¦ .¦ .¦ .¦ .¦ .¦
  ¦COM4      ¦ .¦ .¦ + ¦ !¦ +¦ +¦ ?¦ *¦ .¦ *¦ *¦ *¦ .¦ .¦ *¦
  ¦COMx      ¦ .¦ .¦ + ¦ +¦ +¦ +¦ ?¦ *¦ .¦ *¦ *¦ *¦ .¦ .¦ *¦
  ¦LPT1      ¦ .¦ .¦ . ¦ .¦ .¦ *¦ .¦ !¦ .¦ .¦ .¦ .¦ .¦ .¦ .¦
  ¦LPT2      ¦ .¦ .¦ . ¦ .¦ .¦ !¦ .¦ *¦ .¦ .¦ .¦ .¦ .¦ .¦ .¦
  ¦SCSI      ¦ .¦ .¦ * ¦ *¦ *¦ *¦ .¦ *¦ .¦ +¦ +¦ +¦ .¦ *¦ +¦
  ¦Sound Card¦ .¦ .¦ * ¦ *¦ *¦ !¦ .¦ !¦ .¦ +¦ +¦ +¦ .¦ .¦ *¦
  ¦1st IDE   ¦ .¦ .¦ . ¦ .¦ .¦ .¦ .¦ .¦ .¦ .¦ .¦ .¦ .¦ !¦ .¦
  ¦2nd IDE   ¦ .¦ .¦ . ¦ .¦ .¦ .¦ .¦ .¦ .¦ .¦ .¦ .¦ .¦ .¦ !¦
  ¦PS/2 Mouse¦ .¦ .¦ . ¦ .¦ .¦ .¦ .¦ .¦ .¦ .¦ .¦ !¦ .¦ .¦ .¦
  ¦Мережа    ¦ .¦ .¦ * ¦ *¦ *¦ +¦ .¦ *¦ .¦ +¦ +¦ +¦ .¦ .¦ *¦
  ¦Стpимеp   ¦ .¦ .¦ * ¦ *¦ *¦ +¦ $¦ *¦ .¦ *¦ *¦ .¦ .¦ .¦ .¦
  L==========¦==¦==¦===¦==¦==¦==¦==¦==¦==¦==¦==¦==¦==¦==¦==-
  ! - загальноприйнятий варіант (default)
  + - поширений варіант
  * - рідкий (для irq 2-7) або варіант, що недавно з'явився (для irq 10-15)
  ? - паталогічні випадки, наприклад, у мене є стара мультяха де 
      є два com, яким можна задати irq 2, 3, 4, 5,6,7.
  $ - стример на флоповому контролері, також, взагалі-то, паталогія.
  >- - - - - - 8<- - - - - - - - - - - - - - - - - - - - - - - - - - - -

 Q: Як правильно зробити пристрій в слот, що використовує IRQ? Чи Можна 
    використовувати декілька пристроїв на одному IRQ?

 A: Можна. Розглянемо пристрій виходу IRQ на платі. По-перше, в
    пасивному стані він повинен бути в Z-стані. Значить, потрібен
    елемент з тристабільним виводом. Це потрібно, щоб можна було
    підключати декілька плат до одного IRQ. Крім того, оскільки в
    машині це звичайно не передбачено, треба зашунтувати вихід на землю
    резистором кілоом на десять, щоб забезпечити нульовий рівень в
    пасивному стані. При видачі IRQ вихід повинен переходити в
    одиничний стан. Таким чином, для коректної роботи потрібен
    елемент типу 555ЛП8 і резистор - не дуже складно. Тепер про програмне
    забезпечення. Для функціонування декількох незалежних обробників
    вони повинні виконувати наступні дії:  По-перше, відразу ж
    розмаскувати IRQ, а для запобігання повторному входу при
    нереентрантному коді використовувати власні прапорці. По-друге,
    виходити з того, що невідомо, чи свій пристрій вимагає
    обробки, і перевіряти це. Звідси відразу слідує висновок, що
    пристрій повинно мати якісь порти, по яких це можна
    ідентифікувати. У СОМ-порту є така можливість, у LPT-немає.
    По-третє, завжди передавати управління по ланцюжку наступному
    обробнику. Це треба робити і в разі активності свого пристрою,
    щоб при збігу сигналів IRQ від декількох пристроїв, що
    означає їх втрату, інші не залишилися без обробки. І перестає
    бути критичным час, який пристрій тримає активним сигнал IRQ.
    Крім того, повинні виконуватися загальні рекомендації по організації
    резидентів і роботі з ресурсами, що розділяються:  при виході або
    закінченні роботи з пристроєм кожна програма повинна не забороняти
    відповідне переривання, а приводити контролер 8259 в початковий
    стан. А забороняти виклик переривання треба на рівні пристрою,
    якщо є така можливість. Зняття обробників з переривання повинно
    здійснюватися в порядку, зворотному порядку їх завантаження.

 Q: Що за нові пункти, що стосуються IRQ, з'явилися в BIOS Setup 
    материнської плати з PCI шиною?

 A: На PCI ідеологія IRQ змінилася, і самі істотні відмінності від 
    відповідних сигналів на ISA - це, по-перше, завдання номерів 
    IRQ для конкретних слотів в сетапі, тобто функція вибору номера 
    IRQ перейшла від картки до материнської плати, а, по-друге, 
    можливість працювати як по перепаду, так і по рівню, що 
    дозволяє здійснити більш коректне зашарювання IRQ між 
    пристроями, в тому числі тими, що не відповідають вищевикладеним 
    вимогам, що стосуються пристроїв на ISA.

 Q: Я зробив пристрій, що передає/приймає дані і генерує при цьому IRQ, 
    і софт до нього, працюючий в фоновому режимі. Однак швидкість
    передачі дуже низька, і комп'ютер сильно гальмується при цьому.
    Що робити?

 A: Виклик переривання - це досить тривалий процес, тому треба
    мінімізувати їх кількість на одиницю інформації. Тобто треба
    передавати інформацію блоками в синхронному режимі, а переривання
    повинне генеруватися тільки одне, при надходженні блоку. Якщо робота з
    блоками неможлива, застосовують FIFO, наприклад, в СОМ-портах. Це буфер
    типу черга, що накопичує інформацію і видає переривання по
    досягненні певної міри виповненості, після чого можна
    зчитати її всю відразу. Те ж саме при передачі - буфер заповнюється і
    починає сам передавати дані далі, а після закінчення передачі
    викликає переривання. Реалізовується FIFO, як правило, на окремих
    мікросхемах, що мають в назві цифри 16550.


  Післямова:

    Пишіть мені, якщо Ви помітили помилки/неточність, або вважаєте, що
    сюди треба додати ще яку-небудь інформацію.

			    Alexey Kulentsov,
	     2:5020/216.6 aka 2:5020/401.7 aka 2:5020/449.14

end of file

=============================================================
Переклад - Olexandr Slobodyan, 24.XI.2001



Украинская Баннерная Сеть

Головна  Алфавітний індекс  Довідка  Додати FAQ  E-mail
Новини  Пошук по сайту

Copyright © 2001 - 2002 Olexandr Slobodyan.
Сайт создан в системе uCoz