[[PageNavi(internal22-navi)]]
{{{ comment
h2w-title:タスクキュー
}}}
= タスクキュー = #SECTION02220000000000000000
BHハンドラは32種類しかなく、また殆ど予約済みあるためタスクキューという機能が拡張されている。無制限に登録できるBHハンドラのようなものである。一つのBHハンドラのエントリに、複数の処理を登録できるように拡張されている。(TQUEUE_BH番目とIMMEDIATE_BH番目のエントリ)
この機能を利用する場合、各キューに登録する遅延処理要求のパケットは、呼び出し側で用意する必要がある。遅延処理要求のパケットの用意がでいたら、あとはqueue_task()関数にてその処理を登録するだけである。
queue_task()関数にて目的のキューに処理を登録できる。登録された処理は、適当な時期に呼び出されるrun_task_queue()により実行される。各キューに登録する遅延処理要求のパケットを呼び出し側で用意しなければならないというわずらわしさはあるが、パケット不足で登録処理が失敗する危険を心配しなくてよい点は優れている。
[[Embed(internal22-images:img13.gif)]]
タスクキューには何種類かあり、目的に合わせて登録する先を選ぶことができる。登録された処理は、上記の図に示したモジュールが呼び出すrun_task_queue()関数により実行される。
* tq_immediateに登録されている処理は、カーネル処理が無くなったら 即実行される。呼び出し処理は実はBHハンドラで実現されている。
* tq_timerに登録されている処理は、クロック処理のタイミングで 実行される。呼び出し処理は実はBHハンドラで実現されている。
* tq_schdulerに登録されている処理は、プロセススイッチの タイミングで起動される。
* tq_diskに登録されている処理は、フィアルシステムが適当な タイミングで起動する。ドライバへのI/O要求を遅延させることとに 利用している。 ファイルシステムモジュール以外では利用できない。
----
{{{ html
<A NAME="CHILD_LINKS"> </A>
}}}
* [internal22-31-関数説明#SECTION02221000000000000000 関数説明]
----
''(NIS)HirokazuTakahashi [[BR]]2000年06月11日 (日) 22時29分57秒 JST''1
[[PageNavi(internal22-navi)]]