WaitQueue
Rev.10を表示中。最新版はこちら。
Sleep,Blockするプロセスをつないでおくリスト。Sleep要因によってそれぞれWaitQueueがある。WaitQueueにつないだプロセスは、wake_upxxx()でWaitQueueを指定することで、RUNNING状態に戻る。
WaitQueueは使わなくてもBlockは可能。
WaitQueueの構造
wait_queue_head_t
+-----------+
| lock | wait_queue_t
| task_list | ----> +---------+ ----> +---------+
+-----------+ | | | |
| func | | |
| | | |
[関連ルーチン]
init_waitqueue_head()
WaitQueue(wait_queue_head)を初期化する。
add_wait_queue()
指定WaitQueueにエントリを追加する。
DECLARE_WAITQUEUE()
WaitQueueに積むエントリ(wait_queue_t)を初期化する。
DEFINE_WAIT()
WaitQueueに積むエントリ(wait_queue_t)を初期化する。
DECLARE_WAITQUEUE()との違いはWakeupすると、WaitQueueから自動的にエントリが削除される点。Wakeup時のハンドラにautoremove_wake_function()が設定されていて、ここでエントリ悪削除する。
DECLARE_WAITQUEUE()との違いはWakeupすると、WaitQueueから自動的にエントリが削除される点。Wakeup時のハンドラにautoremove_wake_function()が設定されていて、ここでエントリ悪削除する。
wake_up()
指定WaitQueueのNon ExclusiveプロセスとExclusiveプロセス1つをWakeupする。
Wakeupしただけでは、WaitQueueから削除されないので注意(DEFINE_WAIT()でエントリを作った場合は除く)。
Wakeupしただけでは、WaitQueueから削除されないので注意(DEFINE_WAIT()でエントリを作った場合は除く)。
wake_up_all()
指定WaitQueueの全プロセスをWakeupする。
[関連ページ]
プロセスのBlockとWakeup