在 Linux 中如果要在預定的時間內去執行特定動作,我們通常會透過設定 crontab,好讓他依照排定的時間去執行。可是如果我們想要排定的工作是某個 kernel module 呢?很直接的想法是寫一個程式並設定在 crontab 中,好讓這個程式在預定的時間去呼叫 kernel moduel。但是這樣的做法很沒有效率,因為你必須多執行另一個程式,多佔用一點記憶體,只為了去喚醒另一個早已存在記憶體中的 kernel module。
所以面對 kernel module 的工作排程需求時,比較好的做法是,透過計時器發出中斷 ( timer interrupt ),然後去呼叫動作的函數。實做上需要運用 workqueue_struct 結構 (定義在 linux/workqueue.h 中),來做為記錄動作的佇列,並等待中斷來喚醒佇列中的工作。