Linux Kernel(2.6)の実装に関するメモ書き

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()が設定されていて、ここでエントリ悪削除する。

wake_up()
指定WaitQueueのNon ExclusiveプロセスとExclusiveプロセス1つをWakeupする。
Wakeupしただけでは、WaitQueueから削除されないので注意(DEFINE_WAIT()でエントリを作った場合は除く)。

wake_up_all()
指定WaitQueueの全プロセスをWakeupする。

[関連ページ]
プロセスのBlockとWakeup


最終更新 2006/06/25 21:04:10 - kztomita
(2006/06/24 19:12:58 作成)


リンク
最近更新したページ
検索