Mac OS Xのカーネル Xnuのメモ書き

スレッドのブロックと起動


Rev.10を表示中。最新版はこちら

プロセスをブロックさせるにはthread_block()を使用する。thread_block()する前にwait_queue_assert_wait()などでプロセスをWaitQueueに入れておく必要がある。

ブロックしていたプロセスを起こすには、wait_queue_wakeup_one()などを使用する。



図1 プロセスブロック時の流れ



図2 thread_wakeupによるプロセス起動時の流れ


[関連関数]
thread_block(continuation)
カレントプロセスのブロックさせる。
本関数をコールする前に、wait_queue_assert_wait()などでプロセスをWaitQueueに入れておく必要がある。
continuationが指定されていた場合は、Wakeupするとcontinuationで指定した場所から再開する。(thread_invoke())

thread_invoke(old_thread, new_thread, reason)
old_threadからnew_threadにコンテキストスイッチをさせる。
continuationが指定されていたら、そこから再開させる。

thread_wakeup(event)
eventで指定したプロセスを起こす。
eventについてはこちら

thread_go(thread. wresult)
プロセスをRun状態にしてRunQueueに入れる。


最終更新 2006/05/25 13:48:57 - kztomita
(2006/05/23 21:30:02 作成)
添付ファイル
block.png - kztomita
wakeup.png - kztomita
thread_wakeup.png - kztomita


最近更新したページ