Переривання

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

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

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

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

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

Маскування[ред.ред. код]

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

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

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

Пріоритезація[ред.ред. код]

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

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

Таблиця переривань[ред.ред. код]

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

Програмне переривання[ред.ред. код]

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

У процесорах архітектури x86 для явного виклику синхронного переривання є інструкція Int, аргументом якої є номер переривання (від 0 до 255). В IBM PC-сумісних комп'ютерах обробку переривань здійснюють підпрограми BIOS, які в процесі завантаження у фазі POST переміщаються з ПЗП до оперативної пам'яті. В подальшому це слугує інтерфейсом для їх використання в сеансі операційної системи.

Також, обслуговування переривань можуть взяти на себе BIOS карт розширень (наприклад, мережевих або відеокарт), операційна система і навіть звичайні (прикладні) програми, які постійно знаходяться в пам'яті під час роботи інших програм (т. зв. резидентні програми). На відміну від реального режиму, в захищеному режимі x86-процесорів звичайні програми не можуть обслуговувати переривання: ця функція доступна тільки системного коду (операційній системі).

MS-DOS використовує для взаємодії зі своїми модулями і прикладними програмами переривання з номерами від 20h до 3Fh (числа дані в шістнадцятковій системі числення, як це прийнято при програмуванні мовою асемблера x86). Наприклад, доступ до основної множини функцій MS-DOS здійснюється виконанням інструкції Int 21h (при цьому номер функції та її аргументи передаються в регістрах). Цей розподіл номерів переривань не закріплений апаратно та інші програми можуть встановлювати свої обробники переривань замість або поверх вже наявних обробників, встановлених MS-DOS або іншими програмами, що, як правило, використовується для зміни функціоналу або розширення списку системних функцій. Також, цією можливістю користуються віруси.

Див. також[ред.ред. код]

Примітки[ред.ред. код]

  1. Погорелый С. Д., Слободанюк Т. Ф. Программное обеспечение микропроцессорных систем: Справочник. — ISBN 5-335-00169-0 (рос.).


Комп'ютер Це незавершена стаття про комп'ютери.
Ви можете допомогти проекту, виправивши або дописавши її.