Пристрої можуть використовувати переривання для сигналізації різного роду подій. Насправді про будь-яку зміну стану пристрою чи контролера пристрою можна було повідомити хост-процесор через переривання. Це все залежить від дизайнерів пристрою та апаратного забезпечення.
(І, можна сподіватися, вони принаймні запитають думку бідного чмора, якому доведеться писати драйвер. Занадто багато пристроїв розроблено без такого введення, що вимагає незграбних, неефективних конструкцій драйверів. Насправді там були випадки, коли деякі можливості пристрою не вдалося використати повною мірою, оскільки хост-інтерфейс пристрою - який включає, але не обмежується ними, структуру переривання - був розроблений без усвідомлення того, що можна і чого не можна зробити в драйвері . Але я відволікаюся.)
Матеріал, який ви цитували, правильний, наскільки це йдеться, але мені здається, це дуже спрощений погляд.
Я не впевнений, чим "вихід готовий" відрізняється від "вихід завершений". (Готовий, щоб вас забрали з вихідного лотка принтера?) Аналогічно, звуки "доступні вхідні дані" та "вхід завершені" мені дуже близькі до тієї ж речі. Однак, мабуть, вони мали б на увазі різні необхідні роботи з боку водія. Для мене "введення завершено" означало б, що вхідні дані знаходяться в пам'яті хоста, і операція вводу / виводу локальної нитки може бути завершена, тоді як "доступні вхідні дані", ймовірно, означатимуть, що драйверу все одно потрібно буде перемістити його з пристрою інтерфейс до буфера в пам'яті.
Але це лише семантика. Як автор драйвера, ви повинні уважно прочитати специфікації інтерфейсу хоста пристрою, щоб дізнатися, що насправді означає будь-яке переривання, і що ви повинні з цим робити. Іноді навіть потрібно прочитати код прошивки або вивчити логічну діаграму. (Це трісковий або рівний триггер? Інженери приладів інколи мають найцікавіші поняття! Але я знову відхиляюся ...)
Для трохи більш складного прикладу розглянемо комунікаційний інтерфейс з FIFO. Ми, як правило, хочемо уникати надмірних перерв для хоста; наприклад, переривання в пакеті, ймовірно, занадто багато. Тож наш пристрій може дозволити нам розповісти йому про серію буферів, що передаються через інтерфейс "FIFO" ("перший вхід, перший вихід"), і пристрій подбає про те, щоб перенести їх на дріт.
Але ми не обов'язково хочемо перервати лише тоді, коли всі буфери виконані! Було б краще, якби нас повідомили, коли, скажімо, буфер знизився до лише 20% або 10%. Коли ми отримаємо таке переривання, ми помістимо більше буферів у FIFO (звичайно, зупиняючись, коли воно буде повно). Якщо ми отримали переривання лише тоді, коли FIFO був порожнім, була б невелика затримка, перш ніж ми зможемо отримати наступний буфер до нього для передачі, таким чином зменшивши пропускну здатність. Давши нам перерву, коли FIFO буде "порожнім", ми можемо усунути цю затримку.