遅延割り込み処理
割り込みハンドラでは最小限の処理だけを行い、残りを割り込みを有効にした状態であとから実行されるコードに任せる設計パターン。
ハンドラの実行中は、それより優先度の低い処理がすべて待たされ、そこで費やした時間はそのまま割り込みレイテンシに加算される。そこで仕事を分ける。ハンドラはハードウェアに応答し、データを安全な場所(定番はリングバッファ)へ移し、「何か起きた」と通知するだけにする。解析やプロトコル処理、ロック待ちが発生しうる処理は、通常のコンテキストで行う。
Linuxではこの二つをトップハーフとボトムハーフと呼び、後者にはsoftirq、tasklet、workqueueと三世代の仕組みがある。WindowsにはDPCがある。FreeRTOSのようなRTOSでは、ハンドラがセマフォやタスク通知で専用タスクを起こし、あとはスケジューラが優先度に従って片付ける。割り込みの中からprintfを呼んだ人は、たいていこのパターンを痛い目に遭って学ぶ。