Опрацьовувач переривань

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

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

Огляд

В деяких ОС - Linux, Microsoft Windows і деяких інших, опрацьовувачі переривань поділені на дві частини: Опрацьовувачі переривань першого рівня (англ. First-Level Interrupt Handler, FLIH) і Опрацьовувачі переривань другого рівня (англ. Second-Level Interrupt Handlers, SLIH). FLIH також відомі як тверді/швидкі опрацьовувачі переривань (англ. hard/fast interrupt handlers), а SLIH також відомі як м'які/повільні опрацьовувачі переривань (англ. soft/slow interrupt handlers) або відкладений виклик процедури у Windows.

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

FLIH спричиняють тремтіння в виконанні процесу. FLIH також маскують переривання. Зменшення тремтіння найважливіше для операційних систем реального часу, бо вони мають відповідати вимозі виконання певного коду в узгоджений відтинок часу. Для зменшення тремтіння і зменшення ймовірності втрати даних через приховані переривання, програмісти намагаються зменшити час виконання FLIH, виносячи весь можливий код у SLIH. Зі швидкістю сучасних комп'ютерів, FLIH можуть виконати усе пристрій і платформо-залежне опрацювання, і використати SLIH для подальшого платформо-незалежного довго-тривалого опрацювання.

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

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

В різних системах FLIH і SLIH іменуються по різному. В Windows FLIH називається опрацьовувачем переривання, а SLIH — відкладеним викликом процедури. В Linux, FLIH називається upper half, а SLIH - lower half або bottom half. Це різниться від іменування використовного в інших Unix-подібних системах, де обидва є частиною bottom half.

Посилання