/FAQServer от 2:5025/38.12@fidonet/Подборка по компьютерной тематике/Различное компьютерное железо/Что такое IRQ и как с ними бороться

- [0] RU.HACKER (2:5025/35.3) --------------------------------- RU.HACKER -
 From : Igor B.                        2:5030/207.70   04 Oct 96  12:05:30 
 Subj : IRQ                                                                
---------------------------------------------------------------------------
 AD> Очень нyжно yметь опpеделять что на каком IRQ весит и какие
 AD> IRQ свободны. Как это можно сделать?

File:     IRQ_FAQ.DOC
WrittenBy: Alexey Kulentsov, 2:5020/216.6@fidonet
Version:  1.01 from 16/11/95 23:52

      Что такое 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   Hard disk   Генерится HDD-контр. по окончании операции
   15  77h   Free        Общепринятого применения не имеет

 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 COM-портов. Это связано как с
    их распространенностью, так и c тем, что COM2 и COM4 используют по
    умолчанию IRQ3, а COM1 и COM3 - IRQ4. Вот конкретный пример.

  Q: а машине стоит стандартная мультикарточка, на COM1 находится мышка.
     адо поставить модем. Как его настроить?

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

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

    Впрочем, лучше не будем описывать каждый случай словесно, а изобразим
    таблицу рекомендуемых конфигураций:

    IRQ2    IRQ3         IRQ4         IRQ5          IRQ7     IRQ10
    Модем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. Два последних
    случая- когда используется прерывание от принтера. аименьшими
    возможностями по конфигурированию обладает мышка, от нее
    соответственно выбирается вариант. Берете список того, что надо
    поставить, и идете с начала таблицы, проверяя, подходит ли каждай
    вариант, если выбросить из него лишнее оборудование. Прошу
    соображения насчет того, как должна выглядеть эта таблица и должна ли
    вообще, отписать мне (адрес в конце файла). Размер таблицы всего в 
    четыре строки явился результатом моей слабой фантазии, не способной 
    придумать достаточное количество проблем с конфигурированием.

 Q: Как правильно сделать устройство в слот, использующее IRQ? Можно ли
    использовать несколько устройств на одном IRQ?

 A: Можно. Рассмотрим устройство выхода IRQ на плате. Во-первых, в
    пассивном состоянии он должен быть в Z-состоянии. Значит, нужен
    элемент с трехстабильным выводом. Это нужно, чтобы можно было
    подключать несколько плат к одному IRQ. Кроме того, поскольку в
    машине это обычно не предусмотрено, надо зашунтировать выход на землю
    резистором килоом на десять, чтобы обеспечить нулевой уровень в
    пассивном состоянии. При выдаче IRQ выход должен переходить в
    единичное состояние. Таким образом, для корректной работы нужен
    элемент типа 555ЛП8 и резистор- не очень сложно. Теперь о программном
    обеспечении. Для функционирования нескольких независимых обработчиков
    они должны выполнять следующие действия:  Во-первых, сразу же
    размаскировывать IRQ, а для предотвращения повторного входа при
    нереентрантном коде использовать собственные флажки. Во-вторых,
    исходить из того, что неизвестно, свое ли устройство требует
    обработки, и проверять это. Отсюда сразу следует вывод, что
    устройство должно иметь какие-то порты, по которым это можно
    идентифицировать. В-третьих, всегда передавать управление по цепочке
    следующему обработчику. Это надо делать и в случае активности своего
    устройства, чтобы при совпадении сигналов IRQ от нескольких устройсв,
    что означает их потерю, остальные не остались без обработки.  И
    перестает быть критичным время, которое устройство держит активным
    сигнал IRQ.

 Q: Я сделал устройство, передающее/принимающее данные и генерящее при
    этом IRQ, и софт к нему, работающий в фоновом режиме. Однако скорость
    передачи очень низка, и компьютер сильно тормозится при этом. Что
    делать?

 A: Вызов прерывания - это довольно длительный процесс, поэтому надо
    минимизировать их количество на единицу информации. То есть надо
    передавать информацию блоками в синхронном режиме, а прерывание
    должно генериться только одно, при поступлении блока. Если работа с
    блоками невозможна, применяют FIFO, например, в COM-портах. Это буфер
    типа очередь, накапливающий информацию и выдающий прерывание по
    достижении определенной степени наполненности, после чего можно
    считать ее всю сразу. То же самое при передаче- буфер заполняется и
    начинает сам передавать данные дальше, а по окончании передачи
    вызывает прерывание. Реализуется FIFO, как правило, на отдельных
    микросхемах, имеющих в названии цифры 16550.


  Послесловие:

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

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

end of file

File created by Faq2Site converter. (C) 1998-2002 Edward Grebenyukov
Hosted by uCoz