Переривання

Переривання (апаратні) - це сигнали, при надходженні яких нормальна послідовність виконання програми може бути перервана, при цьому система запам'ятовує інформацію, необхідну для відновлення роботи перерваної програми, і передає управління підпрограмі обробки переривання (ISR, Interrupt Service Routine). По завершенню обробки, як правило, керування повертається перерваної програмі.

Всі переривання можна розділити на три основні типи:

· Апаратні переривання від периферійних пристроїв;

· Внутрішні апаратні переривання (звані також винятками, exceptions);

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

У переважній більшості ОС обробку всіх переривань бере на себе сама система, оскільки це занадто «інтимна» частину роботи, здатна вплинути на функціонування всіх системних і прикладних програм.

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

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

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

Одним з найважливіших джерел переривань є периферійні пристрої. Як правило, пристрій генерує сигнал переривання в одному з двох випадків:

· При переході в стан готовності;

· При виникненні помилки виконання операції.

Стан готовності - це такий стан пристрою, в якому воно готове прийняти і виконати команди від процесора. Для пристрою введення готовність означає наявність в пристрої даних, які можуть бути передані в процесор (наприклад, клавіатура переходить у стан «Готово» при натисканні клавіші і повертається в стан «Не готове», коли код натиснутою клавіші лічений в процесор). Для пристрою виводу готовність - це можливість прийняти від процесора дані, які слід вивести. Наприклад, матричний принтер приймає символи, які потрібно надрукувати, в свій внутрішній буфер. Якщо буфер повний, принтер переходить в стан «Не готове» до тих пір, поки частина символів буде надрукована і в буфері звільниться місце. Дисковий накопичувач при початку виконання нової операції читання або запису на диск переходить в стан «Не готове», а після завершення операції повертається в стан «Готово». У кожному з цих випадків перехід в стан «Готово» - це привід для влаштування нагадати про себе процесору: зверніть на мене увагу, я до ваших послуг! Для цього і служить сигнал переривання.

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

Не кожне пристрій генерує переривання. Наприклад, монітор ПК не видає переривань: він «завжди готовий», тобто завжди може прийняти дані для відображення, і він «ніколи не помиляється», точніше сказати, його несправність виявляється «на око».