WaitQueue
Rev.6を表示中。最新版はこちら。
作成中ブロックしたプロセスをつないでおくキュー。
ブロックする要因毎にキューがある。
プロセスを止める手順としてはプロセスをキューにつないだ後、thread_block()でプロセスをブロックする。
どんなところにあるかと言うと
スケジューラの
wait_queues[]
eventのハッシュ値をキーとしている
eventは他だのキー
void *で
ブロック要因に応じたキー(アドレスだったり)
データのポインタをイベントとしてつかってユニークな値となるようにする
セマフォ取得待ちでブロックする場合は
s->wait_queue
LinuxなんかだとBlockDevice構造体にI/O待ちのWaitQがあったりした。
wait_queue_assert_wait(wq, event, interruptible, deadline)
カレントプロレスを指定WaitQueueに入れる。
wait_queue_wakeup_one(wq, event, result)
指定WaitQueueの指定イベントを待っているプロセスを1つだけ起動する。
wait_queue_wakeup_all(wq, event, result)
指定WaitQueueの指定イベントを待っているプロセスを全て起動する。