Лекція 21. Керування вводом-виводом. Переривання

21.1. Класифікація переривань

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

Залежно від джерела виникнення сигналу переривання поділяються на:

  • Асинхронні або зовнішні (апаратні) — події, які створені зовнішніми джерелами (наприклад, периферійними пристроями) та можуть відбутися в довільний момент: сигнал від таймера, мережевої карти або дискового накопичувача, натискання клавіш клавіатури, рух миші;
  • Синхронні або внутрішні — виняткові ситуації у самому процесорі як результат порушення якихось умов при виконанні машинного коду: поділ на нуль або переповнення, звернення до неприпустимих адрес або неприпустимий код операції;
  • Програмні (частковий випадок внутрішнього переривання) — ініціюються виконанням спеціальної інструкції в коді програми. Програмні переривання, як правило використовуються для звернення до функцій вбудованого програмного забезпечення (firmware), драйверів й операційної системи.

Термін «пастка» (trap) іноді використовується як синонім терміну «переривання» чи «внутрішнє переривання». Як правило, слово вживання встановлюється в документації виробника конкретної архітектури процесора.

Залежно від можливості заборони зовнішні переривання поділяються на:

  • ті, що можна маскувати — переривання, які можна забороняти установкою відповідних бітів у регістрі маскування переривань (в x86-процесорах — скиданням IF у регістрі прапорців);
  • ті, що не можна маскувати (Non maskable interrupt, NMI) — обробляються завжди, незалежно від заборон на інші переривання. Наприклад, таке переривання може бути викликане збоєм в мікросхемі пам'яті.

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

Опрацьовувач переривань (interrupt handler), також відомий як процедура опрацювання переривань (interrupt service routine, ISR) або обробник переривань, це функція зворотного виклику в операційній системі або драйвері пристрою, виконання якої спричиняється отриманням переривання. Опрацьовувачі переривань мають безліч функцій, які різняться відповідно до причини виникнення переривання і швидкодії опрацьовувача.

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

Перехоплення переривання — заміна обробника переривання на свій власний.

Вектор переривання — закріплений за пристроєм номер, який ідентифікує відповідний обробник переривань. Вектори переривань об'єднуються в таблицю векторів переривань, що містить адреси обробників переривань. Розташування таблиці залежить від типу та режиму роботи процесора.

 

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

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

Контролер переривань (Programmable Interrupt Controller, PIC)  — мікросхема чи інтегрований блок процесора, що відповідає за послідовну обробку запитів на переривання від різних пристроїв.

Використовується для забезпечення процедури переривання в мікропроцесорних системах:

  • обслуговує до восьми запитів на переривання мікропроцесора;
  • визначає пріоритет запитів;
  • має можливість нарощування кількості ліній запитів переривання за рахунок каскадного з’єднання контролерів переривання.

Внутрішні і програмні переривання обробляються безпосередньо процесором, а для попередньої обробки зовнішніх запитів застосовують спеціалізовані пристрої - контролери переривань. Необхідність використання контролерів переривань зумовлена тим, що процесор або мікроконтролер має обмежене число вхідних ліній для прийому запитів на переривання (1-2  — у однокристальної ЕОМ, 2-10  — у мікроконтролерів). У той же час кількість пристроїв, які вимагають взаємодії з процесором через сигнали переривань, в реальних системах досягає декількох десятків. Таким чином, контролер переривань виконує селекцію запитів. Відзначимо важливу особливість контролерів переривань, виконаних у вигляді інтегральних схем,  — можливість їх програмного налаштування на необхідні режими роботи.

Контролери переривань є складними пристроями, а в їх структурі можна виділити чотири основних блоки: фіксації запитів, дозволи запитів, аналізу пріоритету запитів і схему керування .

Блок фіксації запитів виконаний на основі регістра фіксації запитів переривань (РФЗ) і служить для фіксації асинхронних сигналів запитів від зовнішніх пристроїв.

Блок дозволу запитів призначений для вибірки з надійшли сигналів тих запитів, які найважливіші для обробки на конкретному етапі реалізації основних алгоритмів. Основу блоку становить регістр дозволу переривань (РРП). В цей регістр можна записати програмним шляхом двійкові код, який буде визначати набір запитів, дозволений для обробки в цей час. Нехай, наприклад, в РРП контролера переривань, що має вісім входів, записаний код 01100010. Це означає, що в цей час дозволені переривання по входу 1, 5 і 6 (рахуючи з нуля, справа наліво). Код, записується в РРП, прийнято називати маскою переривань, так як нульові біти в цьому коді забороняють (маскують) обробку певних запитів.

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

Номер входу контролера переривань позначається «IRQ». Не слід плутати цей номер із пріоритетом переривання, а також з номером входу в таблицю векторів преривань (INT).

Остання зміна: Saturday 30 May 2020 15:21 PM