Апаратні переривання IRQ. Конфлікти IRQ Як зловити переривання у win 7

У цій статті я хотів би розповісти про те, що може ніколи не нагадувати про себе, а може й коштувати нервів після складання або апгрейду комп'ютера: зависання, мимовільні перезавантаження, завзяте небажання вантажитися, постійні "сині екрани смерті", неможливість виявлення пристроїв, невірна робота ... Список можна продовжувати ще довго. Дуже часто такі "глюки" відбуваються саме з вини переривань, а якщо Ви цікавитеся комп'ютерами, то обов'язково повинні знати, звідки і чому з'являються подібні проблеми і, мабуть, найголовніше, як з цим боротися.

Що це таке?

Переривання або IRQ (Interrupt Request) - це сигнали, які повідомляють процесору, що потрібно обробити запит, що надійшов від пристрою, а посилає процесору ці сигнали контролер цього самого пристрою, тобто за допомогою IRQ процесор реагує на різні події.

Так вже склалося, що при розробці якої технології створюються деякі обмеження, не спеціально, звичайно, а через якийсь особливості цього нововведення або просто недоліку. Так сталося і з перериваннями. Спочатку, коли IBM розробляла архітектуру IBM PC (аж у 1980-81 роках минулого тисячоліття), їх було закладено не так багато (8), потім, правда, додали ще стільки ж, забравши одне "старе" переривання під контролер нових, але я не сказав би, що й цього виявилося достатньо. А потім фірма IBM перестала бути єдиною, хто займався платформою PC, і, щоб уникнути несумісності з іншими, ніхто більше переривань і не додав.

Які можуть бути проблеми?

Коли архітектуру IBM PC тільки створювали, переривань було створено трохи, всього вісім, як я вже писав, і віддавали їх на будь-яку "дурницю", на зразок портів COM, хоча виправдовує інженерів IBM те, що вибору особливого не було, його довелося шукати пізніше. Очевидно, ніхто не пророкував платформі таке майбутнє, тому для її родзинки, тобто можливості розширення було залишено тільки одне переривання, яке потім було зайняте контролером другої "вісімки" IRQ. Правда, варто зауважити, що додаткові переривання могли (і можуть) бути вивільнені шляхом відключення різних ISA-пристроїв, що займають їх: портів, флоппі-дисковода. Так ось, помилки, або конфлікти, виникають, коли кілька пристроїв намагаються працювати на одному перериванні. Це дуже проблематично, тому що багато сучасних пристроїв, особливо звукові карти і всілякі мультимедійні комбайни несуть на собі відразу кілька пристроїв. Навіть найпростіші "звуковухи" мають на борту не менше чотирьох девайсів. Ось так виглядає карта переривань у сучасному комп'ютері:

IRQ Опис
0 Таймер
1 Клавіатура
2 Контролер IRQ 8-15
3 COM2
4 COM1
5 LPT2
6 Контролер FDD
7 LPT1
8 Real Time Clock
9 Вільний
10 Вільний
11 Вільний
12 PS/2 (для миші)
13 Співпроцесор
14 Контролер HDD
15 Контролер HDD

То що це виходить? На сучасний комп'ютер можна встановити лише три додаткові пристрої? Судячи з таблиці, так, але все так страшно. У вас, наприклад, є порт LPT2? Дуже сумніваюся. Значить, якщо порту немає, то й переривання є вільним. Отже, теоретично можна звільнити такі переривання:

IRQ Опис
3 Порт цілком можна звільнити, відключивши його до BIOS. Я думаю, здебільшого він і так вільний.
4 Теж можна вимкнути. Але він використовується значно частіше: миші, модеми, сканери.
5 Про це я вже писав. Майже завжди вільний.
6 Якщо збиратимете новий комп'ютер, тим більше додому, користь від старого доброго флопика, значно менше, ніж навіть пару років тому. Дуже багато хто вже має дисководи CD-RW. Більше місця, надійніше, швидше, хоча, ховати FDD ще рано… Флоп можна відключити та звільнити IRQ.
7 Якщо у вас принтер на USB, можете ховати.
12 У більшості сучасних комп'ютерів миші такі. Можете поставити гризуна на COM, але заб'єте інше переривання, мишку можна купити і на USB, але це вже буде маніакальною боротьбою за IRQ:)
14 Слабко без гвинта? Хоча теоретично можна…
15 Навіть якщо у вас лише два IDE-пристрої, їх краще розвести на два різні канали. Працюватиме швидше. Але переривання можна звільнити.

Вже простіше. Але чи вистачає цього? Лізу у властивості системи (у мене Windows XP Professional). Запуск -> Усі програми -> Стандартні -> Службові -> Інформація про систему. Далі у вікні програми: Ресурси апаратури -> Переривання (IRQ). Ось що я там бачу:

IRQ Опис
0 Системний таймер
1 Стандартна (101/102 клавіші) або клавіатура PS/2 Microsoft Natural
3 Послідовний порт (COM2)
4 Послідовний порт (COM1)
5 Conexant SoftK56 Data Fax Voice Speakerphone
5
5 VIA Rev 5 USB універсальний хост-контролер
6 Стандартний контролер гнучких дисків
8 CMOS та годинник
9 Microsoft ACPI-сумісна система
10 Avance AC"97 Audio for VIA (R) Audio Controller
11 ATI RADEON VE DDR
12 PS/2-сумісна миша
13 Процесор числових даних
14 Первинний канал IDE
15 Вторинний канал IDE

Постає питання: що робить мій внутрішній модем, який, до речі, несе на собі кілька пристроїв, на одному перериванні (з-під відсутнього LPT2) з відразу двома контролерами USB? А ось що.

Вихід було знайдено

Настав початок дев'яностих. Системна шина (ISA – Industrial Standard Architecture), яка працювала на частоті процесора, вже вичерпала себе. А все тому, що вона могла нормально передавати дані лише на частоті 8 МГц, чого цілком вистачало для будь-яких PC/XT/AT/286/386. А такий просунутий процесор, як 486, працював на значно більшій частоті. Довелося цю шину уповільнювати, що негативно позначалося на частоті. У 1989 році була розроблена 32-бітна шина EISA - Extended Industrial Standard Architecture, яка працювала на частоті 10 МГц, але це була лише спроба зробити з воза велосипед, просто виправлення помилок ISA. Приблизно в цей час IBM створила MCA шину, яка не прижилася. Була створена і шина VESA (або VL-bus), але вона могла працювати тільки з Intel 486. І ось у 1991 році, як свій внутрішній проект, Intel приступила до розробки абсолютно нової локальної шини PCI - Personal Component Interconnect. Вона розроблялася можна сказати з нуля, а не була черговою латкою до ISA, що дало їй великі переваги. Наприклад, вона працювала на фіксованій частоті 33 МГц, плюс у процесора була власна швидкодіюча шина, що дозволяло йому звертатися до кешу та оперативної пам'яті на тій частоті, на якій йому треба, і не спиратися на технічні обмеження локальної шини. Нова шина PCI могла мати пристойне навантаження: до десяти слотів. Саме до PCI підключаються всі відеоадаптери, адже шина AGP це лише "прикручена" PCI з більшою тактовою частотою - 66 МГц. До неї ж підключається (через контролер) і системна шина ISA, яка є на всіх сучасних комп'ютерах у вигляді портів COM і LPT, гнучких дисків. Щоправда, потреби в ній стає все менше: флопіки простоюють з вини CD-R/RW, COM/LPT - з вини USB… Так ця шина PCI, без якої не обходиться жодна сучасна материнська плата, стала вирішенням проблеми переривань.

Як відомо, комп'ютери можуть оперувати тільки з "1" та "0" або "є сигнал" і "немає сигналу". Якщо пристрій ISA виставить на лінію сигнал "1", то іншому пристрою на цій лінії свої одиниці як не виставляй, контролер на них не відреагує. У випадку з PCI контролер перевіряє джерело сигналу і потім обробляє його. Це дозволяє поміщати кілька пристроїв на одне переривання. Теоретично так, але майте на увазі, що не варто "вішати" старші пристрої і новіші на один канал IRQ. Існує також думка, що не варто нічого ставити на одне переривання зі звуковою картою, можуть з'являтися помилки. Це, звичайно, відбувається далеко не завжди, але краще збагнути щось надійніше.

Приїхали...

Гарна Ви людина, для свого компа нічого не шкода. Ось купили Ви круту відеокарту, принтер, сканер, професійний звук, посилили цю справу модемом, мережевою та ще й TV-тюнером. Ось "глюки" і пішли. Як не змінюй їх місцями в слотах, нічого не працює, хоч викинь. Що робити?

Налаштування переривань із 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 я як не шукав, так і не знайшов, як скасувати автоматичне налаштування.

Якщо Ви використовуєте новіші Win 2000 або XP, що, на мій погляд, є більш виправданим вибором, то Ви можете зіткнутися з деякими проблемами. Ви знаєте, що таке ACPI (Advanced Configuration and Power Interface)? Це спеціальний конфігураційний інтерфейс. Він несе в собі безліч корисностей, але в Win 2K/XP може Вам здорово насолити. Особливо якщо в системі є ISA плати. Через нього вінда розподіляє всі PCI пристрої, які сидять в однойменних роз'ємах, на одне переривання (ось чому у мене USB з модемом на IRQ 5, а інше - на інших), добре, хоч вміст AGP слота та AC"97-кодек туди не зіпхнули;) Через це, якщо не вимикати ACPI в BIOS перед установкою Windows, перепризначити IRQ не вдасться.Як змінити ситуацію, доведеться вимикати ACPI в BIOS (пункт ACPI Functions в розділі Power Management Setup) і змінювати драйвер пристрою Комп'ютер у диспетчері пристроїв з Комп'ютер з ACPI на Стандартний Комп'ютер Хоча, особисто мені не особливо хотілося б втрачати такі функції, безпосередньо пов'язані з ACPI, як автоматичне вимкнення комп'ютера або включення з клавіатури. Іноді і цей прийом скасування ACPI не спрацьовує, тому доводиться вимикати в BIOS і переставляти Windows.

  • Articles
  • IRQ - як вирішити проблему з перериваннями

    Уявимо таку ситуацію, що у вас встановлений Dial-Up модем на ПК, все працює нормально до тих пір, поки модемом не підключаєтеся до Інтернету, курсор мишки сидить на PC/2 порті починає мимоволі рухатися. Після цього (через деякий час) ПК перезавантажувався. При цьому ні переустановка драйверів, ні інсталяція заново Windows не допомагає.
    Така проблема притаманна IRQ, коли кілька пристроїв заважають один одному працювати.
    Отже, переривання або IRQ (Interrupt Request)- це сигнали, які повідомляють процесору, що необхідно обробити надійшов від пристрою запит, а посилає процесору ці сигнали контролер цього самого пристрою, тобто. за допомогою IRQ процесор реагує різні події.
    Так ось, помилки або конфлікти виникають, коли кілька пристроїв (якщо драйвер хоча б одного пристрою написано "криво") намагаються працювати на одному перериванні.
    Це дуже проблематично, тому що багато сучасних пристроїв, особливо звукові карти, контролери, TV-тюнери, ... несуть на собі відразу кілька пристроїв. Навіть найпростіші звукові карти мають на платі щонайменше чотири пристрої.
    В таблиціНижче показано, як виглядає карта переривань у сучасному комп'ютері.

    IRQ

    Опис

    0
    1

    Клавіатура

    2

    Контролер IRQ 8-15

    3
    4
    5

    LPT2, звукові плати ISA та PCI або мережна карта. Сучасні звукові плати займають це переривання виключно заради сумісності зі старими програмами. Також доступно для використання іншими пристроями

    6

    Контролер FDD

    7
    8
    9

    Звукова або мережева карти, або вільний

    10

    Вільний

    11

    Шина USB чи SCSI. Для інших пристроїв це переривання може стати доступним лише після відключення цих шин у BIOS

    12

    PS/2 (для миші)

    13

    Раніше був співпроцесор, а зараз резервується під старі програми

    14

    Основний контролер HDD

    15

    Додатковий контролер HDD


    Варто зауважити, що додаткові переривання могли (і можуть) бути вивільнені шляхом відключення різних пристроїв, що їх займають. Щоб переконатися в правоті, зайшов у “Відомості про систему” (Пуск > Усі програми > Стандартні > Службові > Відомості про систему).
    Вибрав ліворуч у вікні "Ресурси апаратури" і пункт "Перерив IRQ" і точно модем не на своєму перериванні (IRQ відповідає за СОМ-порти).
    При завантаженні системи BIOS роздає переривання так: лінії IRQ всіх пристроїв, які підтримують технологію Plug and Play, а це всі сучасні пристрої, отримують по одному вільному перериванню. Якщо переривання скінчилися, а неохоплені пристрої ще є, BIOS роздає їх по другому колу, тому виходить, що кілька пристроїв отримали одне переривання.
    Після розподілу BIOS номерів IRQ для пристроїв у роздачі починає брати участь Windows. Для цього треба завжди мати найсвіжіші драйвери материнської плати.
    Це дуже важливо, особливо якщо ви зібрали/купили сучасний комп'ютер з материнською платою на новому чи відносно новому чіпсеті. Для нормальної роботи системи, особливо коли переривання використовуються спільно, потрібно, щоб Windows розпізнала чипсет та завантажила IRQ Miniport.
    Після цього я перевантажив ПК і зайшов до BIOS. Знайшов спеціальний розділ "PnP/PCI Configurations", в якому зібрані налаштування ресурсів (може мати схожу назву) у розділі "Advanced".
    Крім параметрів, що розподіляють IRQ, DMA та інші ресурси, у цьому розділі можуть бути налаштування, що впливають на роботу відеосистеми та деяких інших пристроїв.
    У сучасних системних платах всі ресурси розподіляються автоматично, а кількість параметрів у розділі PnP/PCI Configurations може бути скорочено до двох-трьох найважливіших параметрів. У ньому кілька пунктів:
    "Plug and Play OS" або "PNP OS Installed" - цей параметр визначає, хто розподілятиме ресурси: BIOS або операційна система. Можливі значення:
    Yes- BIOS конфігуруватиме пристрої, необхідні для завантаження, а інші налаштує операційна система, яка повинна підтримувати Plug and Play;
    No- Налаштування всіх пристроїв та розподіл ресурсів буде виконано за допомогою BIOS.
    Починаючи з Windows ХР, операційні системи Windows мають спеціальний інтерфейс конфігурування - ACPI (Advanced Configuration and Power Interface), який дозволяє показувати в системі до 256 IRQ (240 адрес, м'яко кажучи: “віртуальні”, тобто дійсно вони "розкидані" на адресах IRQ 0-15).

    Тут ми розберемо такі важливі теми, як: обробка переривань, вектори переривань, програмні переривання, IRQ, Загалом поговоримо на теми переривання.

    Ідея перериваннябула запропонована в середині 50-х років та основна мета введення переривань – реалізація синхронного режиму роботи та реалізація паралельної роботи окремих пристроїв ЕОМ.

    Перериванняі обробка перериваньзалежать від типу ЕОМ, тому їхню реалізацію відносять до машинно-залежних властивостей операційних систем.

    Переривання(Interrupt) - це сигнал, що змушує ЕОМ змінювати нормальний порядок виконання команд процесором.

    Виникнення подібних сигналів обумовлено такими подіями, як:

    • завершення операцій введення-виводу.
    • закінчення заздалегідь заданого інтервалу часу.
    • спроба розподілу на нуль.
    • збій у роботі апаратного пристрою та ін.

    Обробка переривання

    З кожним перериванням пов'язують число, зване номером типу перериванняабо просто номером переривання. Система вміє розпізнавати, яке переривання, з яким номером воно сталося, і запускає програму обробки переривання, що відповідає цьому номеру. Таким чином, при надходженні сигналу на переривання відбувається примусова передача управління від програми до системи, а через неї - до обробника переривань.

    Наприклад перериванняз номером 9 - переривання від клавіатури, яке генерується при натисканні та при відтисканні клавіші. Використовується для читання даних із клавіатури. Позначається в ОС як IRQ 1, де IRQ- Позначення переривання, а 1 - Пріоритет переривання. Дані про запити на переривання можна проаналізувати у диспетчері пристроїв:

    Обробник переривань– програма обробки переривання, що є частиною ОС, призначена для виконання дій у відповідь на умову, що викликала переривання.

    Припустимо, що у момент надходження сигналу переривання від деякого джерела програма перебуває у рішенні. В результаті керування автоматично передається обробнику переривань. Після завершення обробки управління може бути знову передано в точку програми А, де її виконання було перервано:

    Вектори переривань

    Адреси програм, що відповідають різним перериванням, зібрані в таблицю, яка називається таблицею векторів переривань.

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

    Таблиця векторів перериваньзаймає перший кілобайт оперативної пам'яті – адреси від 0000:0000 до 0000:03FF. Таблиця складається з 256 елементів - FAR-адрес обробників переривань. Ці елементи називаються векторами переривань. У першому слові елемента таблиці записано зміщення, а в другому адресу сегмента обробника переривання. Векторами є просто повні адреси пам'яті програми (у сегментованій формі), яка має бути активізована у разі переривання.

    Переривання з номером 0 відповідає адреса 0000:0000, переривання з номером 1 - 0000:0004 і т.д. Адреса така складається з пари 2-байтових слів, тому кожен із векторів займає чотири байти.

    Можна переглянути таблицю векторів переривань у комп'ютері, якщо скористатися програмою DEBUG. Використовуйте команду D, щоб вивести вміст початку пам'яті: D 0:0. Програма DEBUG покаже вам перші 128 байтів або 32 вектори, які можуть мати вигляд на кшталт наступного:

    0000:0000 E8 4E 9A 01 00 00 00 00-C3 E2 00 F0 00 00 00 00
    0000:0010 F0 01 70 00 54 FF 00 F0-05 18 00 F0 05 18 00 F0
    0000:0020 2C 08 51 17 D0 0A 51 17-AD 08 54 08 E8 05 01 2F
    0000:0030 FA 05 01 2F 05 18 00 F0-57 EF 00 F0 F0 01 70 00
    0000:0040 90 13 C7 13 4D F8 00 F0-41 F8 00 F0 3E 0A 51 17
    0000:0050 5C 00 B7 25 59 F8 00 F0-E2 0A 51 17 9C 00 B7 25
    0000:0060 00 00 00 F6 8E 00 DE 09-6E FE 00 F0 F2 00 7B 09
    0000:0070 27 08 51 17 A4 F0 00 F0-22 05 00 00 00 00 00 F0

    Вектори зберігаються як слова навпаки: спочатку зміщення, а потім сегмент. Наприклад, перші чотири байти, які програма DEBUG показала вище (E8 4E 9A 01) можна перетворити на сегментовану адресу 019A:4EE8.

    Можна зустріти три види адрес в таблиці векторів. Це можуть бути адреси, що вказують на ROM-BIOS, які можна ідентифікувати шістнадцятковою цифрою F, яка передує номер сегмента. Це можуть бути адреси, які вказують на головну пам'ять (як приклад: 019A:4EE8). Ці адреси можуть вказувати на підпрограми ДОС або на резидентну програму (наприклад, SideKick або Prokey), або можуть вказувати на саму програму DEBUG (оскільки DEBUG повинна тимчасово керувати перериванням). Також вектори можуть складатися з одних нулів, коли переривання з цим номером не обробляється зараз.

    Ініціалізація таблиці відбувається частково при BIOS після тестування апаратури і перед початком завантаження операційною системою, частково при завантаженні операційної системи.

    Нижче наведено призначення деяких векторів:

    Опис
    0 Помилка розподілу. Викликається автоматично після виконання команд DIV або IDIV, якщо в результаті розподілу відбувається переповнення (наприклад, при розподілі на 0).
    2 Апаратне переривання, що не маскується. Це переривання можна використовувати по-різному у різних машинах. Зазвичай виробляється при помилці парності в оперативній пам'яті та при запиті переривання від співпроцесора.
    5 Друк копії екрану. Генерується при натисканні клавіатури клавіші PrtScr. Зазвичай використовується для друку зображення.
    8 IRQ0 - переривання інтервального таймера, що виникає 18,2 рази на секунду.
    9 IRQ1 – переривання від клавіатури. Генерується при натисканні та при відтисканні клавіші. Використовується для прочитання даних від клавіатури.
    A IRQ2 – використовується для каскадування апаратних переривань у машинах класу AT
    B IRQ3 - переривання асинхронного порту COM2.
    C IRQ4 - переривання асинхронного порту COM1.
    D IRQ5 - переривання від контролера жорсткого диска XT.
    E IRQ6 - переривання генерується контролером флоппі-диска після завершення операції.
    F IRQ7 – переривання принтера. Генерується принтером, коли він готовий до виконання чергової операції. Багато адаптерів принтера не використовують це переривання.
    10 Обслуговування відеоадаптера.
    11 Визначення конфігурації пристроїв у системі.
    12 Визначення розміру оперативної пам'яті у системі.
    13 Обслуговування дискової системи
    14 Послідовне введення/виведення.
    1A Обслуговування годинника.
    1B Обробник переривання Ctrl-Break.
    70 IRQ8 - переривання від годинника реального часу.
    71 IRQ9 – переривання від контролера EGA.
    75 IRQ13 - переривання від математичного співпроцесора.
    76 IRQ14 – переривання від контролера жорсткого диска.
    77 IRQ15 – зарезервовано.

    IRQ0 – IRQ15 – це апаратні переривання.

    Механізм обробки переривань

    При обробці кожного переривання має виконуватися така послідовність дій:

    • Сприйняття запиту на переривання: прийом сигналу та ідентифікація переривання.
    • Запам'ятовування стану перерваного процесу: визначається значенням лічильника команд (адресою наступної команди) та вмістом регістрів процесора.
    • Передача управління програмі, що перериває (у лічильник команд заноситься початкова адреса підпрограми обробки переривань, а у відповідні регістри – інформація зі слова стану процесора).
    • Обробка переривання.
    • Відновлення перерваного процесу та повернення в перервану програму.

    Головні функції механізму переривання:

    1. розпізнавання чи класифікація переривань.
    2. передача управління відповідно до обробника переривань.
    3. коректне повернення до перерваної програми (перед передачею управління обробнику переривань вміст регістрів процесора запам'ятовується чи пам'яті з прямим доступом чи системному стеку).

    Типи переривань

    Переривання, що виникають під час роботи обчислювальної системи, можна поділити на 4 групи:

    Апаратні перериваннявикликаються фізичними пристроями і з'являються стосовно програмі асинхронно, тобто. у загальному випадку неможливо передбачити, коли і чому програма буде перервана.

    Апаратні переривання не координуються із роботою програмного забезпечення. Коли викликається переривання, процесор залишає свою роботу, виконує переривання, а потім повертається на колишнє місце.

    Зовнішні перериваннявиникають по сигналу будь-якого зовнішнього пристрою, наприклад:

    • Переривання, яке інформує систему про те, що необхідний сектор диска вже прочитаний, вміст доступний програмі.
    • Переривання, яке інформує систему про завершення друку символу на принтері і необхідно видати наступний символ.
    • Переривання щодо порушення харчування.
    • Нормальне завершення певної операції введення-виводу (натискання клавіші на клавіатурі).
    • Переривання за таймером.

    Переривання за таймеромвикликається інтервальним таймером. Цей таймер містить регістр, якому може бути надано певне початкове значення за допомогою спеціальної привілейованої команди. Значення цього регістру автоматично зменшується на 1 після закінчення кожної мілісекунди часу. Коли це значення стають рівним нулю, відбувається переривання таймером. Подібний таймер інтервалу використовується операційною системою для визначення часу, протягом якого програма користувача може залишатися під керуванням машини.

    Масковані і немасковані зовнішні переривання

    Існують два спеціальні зовнішні сигнали серед вхідних сигналів процесора, за допомогою яких можна перервати виконання поточної програми і тим самим переключити роботу центрального процесора. Це сигнали NMI(Non Mascable Interrupt, немаскируемое переривання) INTR(interrupt request, запит на переривання).

    Відповідно зовнішні переривання поділяються на два види: немаскувані та маскувані.

    Часто при виконанні критичних ділянок програм, для того щоб гарантувати виконання певної послідовності команд цілком, доводиться забороняти переривання (тобто зробити систему нечутливою до всіх або окремих переривань). Це можна зробити за допомогою команди CLI. Її потрібно помістити на початок критичної послідовності команд, а в кінці розташувати команду STI, що дозволяє процесору приймати переривання. Команда CLI забороняє лише маскувані переривання, які не маскуються завжди обробляються процесором.

    Таким чином, наявність сигналу переривання не обов'язково має викликати переривання програми, що виконується. Процесор може мати засоби захисту від переривань: відключення системи переривань, маскування (заборона) окремих сигналів переривань. Переривання, які замаскувати не можна - це переривання, що не маскуються.

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

    • при порушенні адресації (в адресній частині команди, що виконується, вказана заборонена або неіснуюча адреса, звернення до відсутнього сегмента або сторінки при організації механізмів віртуальної пам'яті);
    • за наявності в полі коду незадіяної двійкової комбінації.
    • при розподілі на нуль.
    • при переповненні чи зникненні порядку.
    • при виявленні помилок парності, помилок роботи різних пристроїв апаратури засобами контролю.

    Програмні переривання

    Програми можуть самі викликати переривання із заданим номером. І тому вони використовують команду INT. По цій команді процесор здійснює практично ті ж дії, що і при звичайних перериваннях, але це відбувається в передбачуваній точці програми - там, де програміст помістив цю команду. Тому програмні перериванняне є асинхронними (програма «знає», коли вона викликає переривання).

    Програмні перериванняу сенсі перериваннями є, оскільки є лише специфічний спосіб виклику процедур — за адресою, а, по номеру в таблиці.

    Механізм програмних перериваньбув спеціально введений для того, щоб:

    1. перемикання на системні програмні модулі відбувалося не просто як перехід у підпрограму, а таким самим чином, як і звичайні переривання. Цим забезпечується автоматичне перемикання процесора на привілейований режим з можливістю виконання будь-яких команд.
    2. використання програмних переривань призводить до більш компактного програмного коду в порівнянні з використанням стандартних команд виконання процедур.

    Приклад (програмні переривання):

    • привілейована команда у режимі користувача.
    • адреса поза діапазоном.
    • порушення захисту пам'яті.
    • арифметичне переповнення, відсутня сторінка.
    • Порушення захисту сегмента.
    • вихід за кордон сегмента.

    У спрощеному вигляді схему обробки різних видів перериваньможна уявити так:

    КП – контролер переривань, має кілька рівнів (ліній) для підключення контролерів пристроїв (на схемі позначені КУ). Можливе каскадне підключення контролерів, коли на один із його входів підключається ще один контролер переривань. ЦП – центральний процесор.

    Апаратні переривання виробляються пристроями комп'ютера, коли потреба їх обслуговування. На відміну від програмних переривань, що викликаються заплановано самої прикладної програмою, апаратні переривання завжди відбуваються асинхронно стосовно програм, що виконуються. Крім того, може виникнути одночасно кілька переривань. Вибір однієї з них для обробки складає основі пріоритетів, приписаних кожному типу переривання.

    Кожному перериванню призначається унікальний пріоритет. Якщо відбувається одночасно кілька переривань, то система віддає перевагу найвищому пріоритетному, відкладаючи на час обробку інших переривань.

    У разі переривання самої програми обробки переривання говорять про вкладеному перериванні. Рівні пріоритетів позначаються скорочено IRQ0 - IRQ15 або IRQ0 - IRQ23 (залежно від мікросхемою реалізації).

    Перериванню часу суток дано максимальний пріоритет, оскільки якщо воно буде постійно витрачатися, то будуть невірними показання системних годин. Перемикання від клавіатури викликається при натисканні або відпущенні клавіші; воно викликає ланцюг подій, яка звичайно закінчується тим, що код клавіші поміщається в буфер клавіатури (звідки він потім може бути отриманий програмами).

    Ну і нарешті реалізація механізму обробки переривань

    У машині для кожного класу переривань є відповідна йому робоча область переривань. Наприклад, є область, що відповідає перериванню таймером. Коли відбувається переривання за таймером, вміст усіх регістрів зберігається у цій області (наприклад, пропустивши перші кілька слів). Потім із цих пропущених слів витягуються заздалегідь занесені туди значення, які перезаписуються в лічильник (покажчик) команд машини та слово стану (або у прапорний регістр). Завантаження та збереження регістрів здійснюється апаратними засобами машини автоматично.

    Завантаження лічильника команд новим значенням адреси автоматично спричиняє передачу керування на відповідну команду. Ця адреса, заздалегідь збережена в робочій області переривання, є початковою адресою стандартної програми обробки переривань по таймеру. Завантаження слова стану також викликає певні зміни у стані процесора.

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

    Збереження та відновлення стану процесора та вмісту регістрів називають операцією контекстного перемикання.

    У більшості машин є так зване слово стану, яке містить частину інформації, що використовується для обробки переривань. Одним з елементів цього слова (наприклад, перший) є ознака, визначальний, в якому режимі знаходиться процесор: в користувальницькому чи супервізорі.

    Звичайні програми знаходяться в режимі користувача (ознака дорівнює нулю). Коли відбувається переривання, нове завантажуваний вміст стану має ознаку, що дорівнює 1, що автоматично переводить процесор в режим супервізора. У цьому режимі можливе використання привілейованих команд. Перед тим, як значення слова стану буде збережено, в іншому елементі (наприклад, другому) буде встановлено значення, що вказує на причину переривання:

    • при програмному перериванні відбивається тип викликав його умови, наприклад розподіл на нуль.
    • при перериванні з введення-виведення заноситься номер каналу, що викликав переривання.

    У третьому елементі вказується, чи виконує процесор команди, чи простоює. У четвертому елементі міститься покажчик, що ідентифікує поточну програму, що виконується. У п'ятому елементі міститься маска переривань, яка використовується для контролю дозволу переривань (поле MASK).

    Це поле використовується, щоб не допустити настання переривань певного типу, доки перше з них не буде оброблено. У MASK кожен біт відповідає деякому класу переривань. Якщо якийсь біт встановлений 1, то переривання відповідного класу дозволені, якщо 0, то заборонені. В останньому випадку кажуть, що вони масковані(їх також називають забороненимиабо закритими). Однак масковані переривання не втрачаються, тому що сигнал, що спричинив переривання, зберігається апаратурою. Тимчасово затримане таким способом переривання називається відкладеним. Коли (внаслідок того, що значення MASK скинуто) переривання відповідного класу знову дозволяються, сигнал розпізнається та відбувається переривання.

    Маскування переривань перебуває під контролем операційної системи та залежить від значення MASK у слові стану, яке заздалегідь зберігається у робочій області кожного переривання. Можна заборонити всі переривання, встановивши всі біти MASK на нуль. Насправді чинити подібним чином немає необхідності.

    Для обробки подій, що відбуваються асинхронно по відношенню до виконання програми, найкраще підходить механізм переривань.

    Переривання можна розглядати як деяку особливу подію в системі, що потребує моментальної реакції. Наприклад, добре спроектовані системи підвищеної надійності використовують переривання по аварії в мережі живлення для виконання процедур запису вмісту регістрів і оперативної пам'яті на магнітний носій, щоб після відновлення живлення можна було продовжити роботу з того ж місця.

    Здається очевидним, що можливі найрізноманітніші переривання з різних причин. Тому переривання розглядається не просто як таке, з ним пов'язують число, яке називається номером типу переривання або просто номером переривання. З кожним номером переривання пов'язують ту чи іншу подію. Система вміє розпізнавати, яке переривання, з яким номером відбулося і запускає відповідну номеру процедуру.

    Програми можуть самі викликати переривання із заданим номером. І тому вони використовують команду INT. Це так звані програмні переривання. Програмні переривання не є асинхронними, тому що викликаються з програми (а вона знає, коли вона викликає переривання!).

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

    Апаратні переривання викликаються фізичними пристроями та приходять асинхронно. Ці переривання інформують систему про події, пов'язані з роботою пристроїв, наприклад про те, що нарешті завершилася друк символу на принтері і непогано було б видати наступний символ, або про те, що необхідний сектор диска вже прочитаний його вміст, доступний програмі. Використання переривань під час роботи з повільними зовнішніми пристроями дозволяють поєднати введення/виведення з обробкою даних у центральному процесорі та в результаті підвищує загальну продуктивність системи. Деякі переривання (перші п'ять у порядку номерів) зарезервовані для використання самим центральним процесором у разі будь-яких особливих подій на кшталт спроби поділу на нуль, переповнення тощо.

    Іноді бажано зробити систему нечутливою до всіх або окремих переривань. Для цього використовують так зване маскування переривань. Але деякі переривання замаскувати не можна, це переривання, що не маскуються.

    Зауважимо ще, що обробники переривань можуть викликати програмні переривання, наприклад, для отримання доступу до сервісу BIOS або DOS (сервіс BIOS також доступний через механізм програмних переривань).

    Складання власних програм обробки переривань та заміна стандартних обробників DOS та BIOS є відповідальною та складною роботою. Необхідно враховувати всі тонкощі роботи апаратури та взаємодії програмного та апаратного забезпечення. При налагодженні можливе руйнування операційної системи з непередбачуваними наслідками, тому треба дуже уважно стежити за тим, що робить Ваша програма.

    Щоб зв'язати адресу обробника переривання з номером переривання, використовується таблиця векторів переривань, що займає перший кілобайт оперативної пам'яті – адреси від 0000:0000 до 0000:03FF. Таблиця складається з 256 елементів - FAR-адрес обробників переривань. Ці елементи називаються векторами переривань. У першому слові елемента таблиці записано зсув, а у другому - адресу сегмента обробника переривання.

    Переривання з номером 0 відповідає адреса 0000:0000, переривання з номером 1 - 0000:0004 і т.д.

    Ініціалізація таблиці відбувається частково при BIOS після тестування апаратури і перед початком завантаження операційною системою, частково при завантаженні DOS. DOS може переключити він деякі переривання BIOS.

    Розглянемо вміст таблиці векторів переривань. Наведемо призначення деяких найважливіших векторів:

    Опис

    Помилка розподілу. Викликається автоматично після виконання команд DIV або IDIV, якщо в результаті розподілу відбувається переповнення (наприклад, при розподілі на 0). DOS зазвичай при обробці цього переривання виводить повідомлення про помилку та зупиняє виконання програми. Для процесора 8086 у своїй адресу повернення вказує наступну після команди розподілу команду, а процесорі 80286 - перший байт команди, що викликала переривання.

    Переривання покрокового режиму. Виробляється після виконання кожної машинної команди, якщо у слові прапорів встановлено біт покрокового трасування TF. Використовується для налагодження програм. Це переривання не виробляється після виконання команди MOV у сегментні регістри або після завантаження сегментних регістрів командою POP.

    Апаратне переривання, що не маскується. Це переривання можна використовувати по-різному у різних машинах. Зазвичай виробляється при помилці парності в оперативній пам'яті та при запиті переривання від співпроцесора.

    Переривання для трасування. Це переривання генерується під час виконання однобайтової машинної команди з кодом CCh і зазвичай використовується відладниками для встановлення точки переривання.

    Переповнення. Генерується машинною командою INTO, якщо встановлено прапорець OF. Якщо прапорець не встановлено, команда INTO виконується як NOP. Це переривання використовується для обробки помилок під час виконання арифметичних операцій.

    Друк копії екрану. Генерується при натисканні клавіатури клавіші PrtScr. Зазвичай використовується для друку зображення. Для процесора 80286 генерується при виконанні машинної команди BOUND, якщо значення, що перевіряється, вийшло за межі заданого діапазону.

    Невизначений код операції або довжина команди більше ніж 10 байт (для процесора 80286).

    Особливий випадок відсутності математичного співпроцесора (процесор 80286).

    IRQ0 - переривання інтервального таймера, що виникає 18,2 рази на секунду.

    IRQ1 – переривання від клавіатури. Генерується при натисканні та при відтисканні клавіші. Використовується для прочитання даних від клавіатури.

    IRQ2 – використовується для каскадування апаратних переривань у машинах класу AT.

    IRQ3 – переривання асинхронного порту COM2.

    IRQ4 – переривання асинхронного порту COM1.

    IRQ5 – переривання від контролера жорсткого диска для XT.

    IRQ6 - переривання генерується контролером флоппі-диска після завершення операції.

    IRQ7 – переривання принтера. Генерується принтером, коли він готовий до виконання чергової операції. Багато адаптерів принтера не використовують це переривання.

    Обслуговування відеоадаптера.

    Визначення конфігурації пристроїв у системі.

    Визначення розміру оперативної пам'яті у системі.

    Обслуговування дискової системи

    Послідовне введення/виведення.

    Розширений сервіс для комп'ютерів AT.

    Обслуговування клавіатури.

    Обслуговування принтера.

    Запуск BASIC у ПЗУ, якщо він є.

    Обслуговування годинника.

    Обробник переривання Ctrl-Break.

    Переривання виникає 18.2 рази на секунду, викликається програмним обробником переривання таймера.

    Адреса відеотаблиці для контролера відеоадаптера 6845.

    Вказівник на таблицю параметрів дискети.

    Вказівник на графічну таблицю для символів із кодами ASCII 128-255.

    Використовується DOS або зарезервований для DOS.

    Переривання зарезервовані для користувача.

    Не використовуються.

    IRQ8 - переривання від годинника реального часу.

    IRQ9 – переривання від контролера EGA.

    IRQ10 – зарезервовано.

    IRQ11 – зарезервовано.

    IRQ12 – зарезервовано.

    IRQ13 – переривання від математичного співпроцесора.

    IRQ14 – переривання від контролера жорсткого диска.

    IRQ15 – зарезервовано.

    Не використовуються.

    Зарезервовані для BASIC.

    Використовується інтерпретатором BASIC.

    Михайло Тичков aka Hard

    Доброго вам дня.

    Давайте розглянемо таку ось ситуевину: процесор обробляє якісь дані, не важливо які. У цей момент у якогось нитка пристрою теж з'явилися дані для обробки. Що робити? Треба просити процесор, щоб той зволив звернути на прохання увагу і вирішив би, зараз обробляти ці дані або потім. Так ось це прохання і є IRQ або переривання (загалом існують два типи переривань: апаратні (зовнішні) і програмні (внутрішні), але оскільки мій розділ називається «Залізо та мережі», то розмову я вестиму тільки про апаратні переривання). Строго кажучи IRQ - це канали запитів переривання, які використовуються різноманітними девайсами для того, щоб повідомити процесору про те, що необхідно обробити певний запит. Фізично, IRQ є окремо прокладені лінії (провідники) і відповідні цим лініям контакти в інтерфейсах. Все це перебуває, є на материнській платі. Лінії IRQ призначені лише передачі запитів переривання.

    Ану розберемося, як вся ця фігня з IRQ відбувається. Отже, після отримання запиту переривання камінь зберігає в стеку вміст регістрів. Потім він звертається до таблиці векторів переривань, де є список адрес пам'яті програм, що відповідають певним номерам переривань. Від номера переривання залежить, яку програму буде запущено. В основному цими програмами є драйвера, що відносяться до пристроїв, що надіслали запит (а вже драйвера туго знають свою справу і розберуться, що робити). Після всього цього процедура обробки повертає зі стека те, з чим працював камінь, а простіше кажучи, віддається управління системою тій програмі, що працювала до запиту переривання. І так завжди. Сама таблиця знаходиться в оперативній пам'яті та складається з 256 елементів по 4 байти і починається з адреси 0000:0000. Займає вона 1024 Кбайти. Сподіваюся, що Ви засвоїли просту істину: якщо необхідно обробити хоча б один новий байт від якогось пристрою, необхідно спочатку обробити IRQ цього пристрою.

    Що б не було плутанини, у IRQ є ієрархія або говорячи іншою мовою – пріоритети. Чим менший номер переривання, тим вищий пріоритет і навпаки, що більше номер переривання, то нижчий пріоритет. IRQ всього 16. Найвищий пріоритет у IRQ 0, а найнижчий у IRQ 15. Наведу таблицю ієрархії:

    Стандартна функція

    Системний таймер

    Контролер клавіатури

    Програмований контролер переривань

    Послідовний порт COM 2

    Послідовний порт COM 1

    Стандартний контролер гнучких дисків

    Паралельний порт LPT

    CMOS та годинник

    Звукова або мережева карти або вільний

    Вільний

    USB або SCSI або вільний

    PS/2 сумісний порт миші

    Співпроцесор

    Основний контролер IDE

    Додатковий контролер IDE

    А хочете переглянути свої переривання? Виберіть "Пуск - Виконати", наберіть "msinfo32". У вікні «Відомості про систему», зліва, виберіть вкладку «Ресурси апаратури – Переривання IRQ».

    З перериваннями трапляються і геморої. Якщо відбудеться генерація великої кількості IRQ, то стек може переповнитися тоді. тоді Ви потягніться до кнопки. Якщо така фігня відбуватиметься часто, то необхідно у файлі Config.sys збільшити параметр Stacks. Крім цього двом різним пристроям PCI може бути призначене одне і те ж переривання. Теоретично таке не повинно відбуватися, але на практиці трапляється. В цьому випадку Вам доведеться самому призначити переривання одного з пристроїв, що заглючили. Як це зробити? Тиснемо . Вискакує вікно "Властивості: Система". Вибираємо вкладку «Пристрої», шукаємо у списку той пристрій, IRQ якого будемо підправляти і тиснемо на нього кілька разів мишею. Вискочить вікно його властивостей, де виберемо вкладку «Ресурси» та знімемо галку «Автоматичне налаштування». Потім трохи нижче вибираємо "Запит на переривання" і клацаємо знову двічі мишею. Відобразиться вікно, де можна змінити номер IRQ. Ні фіг собі і складно. Але ... Призначати переривання треба з розумом. Звіртеся з таблицею: які IRQ навіщо призначені. Подивіться у себе, які є вільні. Може, так трапиться, що вільних переривань у Вас і не буде. Думаєте – все, дупа? Ні! Нових IRQ Ви, звичайно, не додасте, але подумайте, чи всі пристрої Вам необхідні. Наприклад, як часто Ви використовуєте порти COM. Я ними останні роки три не користуюсь взагалі. Ну і на фіг їх із системи. Це можна зробити із BIOS. І ось вам вільні IRQ. Коротше, у вирішенні подібної проблеми треба докласти голову і все у Вас вийде. А всяких там кулих спеців хочу попередити відразу - не пишіть мені листи на кшталт: «Після твоєї статті клієнти пачками стали нести до нас у магазин комп'ютери з розгорнутими налаштуваннями!». Я не відповідаю за дії людей, у яких голова та руки ростуть із того ж місця, що й ноги. Колись я і сам у цьому ні чорта не розумів, але ж розібрався. До того ж мені ніхто нічого не пояснював. Дорогу здолає той, хто йде!

    Рухаємось далі. Взагалі слід зазначити, що канали запитів переривання відносяться до системних ресурсів. Дам коротке, але дуже влучне визначення: системними ресурсами називаються комунікаційні канали, адреси та сигнали, які використовуються вузлами комп'ютера для обміну даними за допомогою шин. Ось так просто і зрозуміло. До системних ресурсів крім IRQ відносяться адреси пам'яті, канали прямого доступу до пам'яті та адреси портів вводу/виводу. Але про це у інших статтях. А сьогодні все. Успіхів у Ваших починаннях.

    gastroguru 2017