Активне і пасивне очікування

Поговоримо докладніше про один важливий розходженні між способами введення / виводу за опитуванням готовності і по перериваннях.

Основною особливістю введення / виводу за опитуванням готовності є цикл очікування. Якщо виконується введення або виведення на повільне пристрій (наприклад, матричний принтер), то цей скромно виглядає цикл буде займати, м'яко кажучи, 99% всього часу роботи процесора. Якщо відбувається очікування введення з клавіатури, то процесор взагалі не буде робити нічого корисного, поки користувач не спроможеться натиснути клавішу.

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

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

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