當 driver 無法當下回應 user space 的動作要求時,譬如說設備正在忙碌,或者是 buffer 滿了暫時無法寫入等等,driver 都必須讓 process 等待,直到狀況解除了才能繼續處理 process 的要求。做法就是採用 blocking I/O,先讓 process 進入睡眠 (sleep) 的狀態,直到可以動時再叫醒 (wake up) 他。
當 process 進入 sleep 的狀態時,會從排程的 queue 中移出去,並等待某個事件觸發然後才被喚醒繼續執行。在 Linux kernel moduel 中令 process 去 sleep 或 wake up 是很簡單的動作,但必須注意幾個條件:首先,不可以中斷不能分割的連續動作 (atomic context),像是進行 spinlock 時。還有不能夠停止中斷 (interrupt) 的動作。另外還要注意的是,如果一個正在 sleep 的 process 取得了一個 semaphore,而其他等待這個 semaphore 的 process 也就會跟著 sleep。