KTHREAD(9) NetBSD Kernel Developer's Manual KTHREAD(9) 名称 kthread_create1, kthread_exit, kthread_create -- カーネルスレッド 書式 #include void kthread_create(void (*func)(void *), void *arg); void kthread_exit(int ecode); int kthread_create1(void (*func)(void *), void *arg, struct proc **newpp, const char *fmt, ...); 解説 カーネルスレッドは完全にカーネル内で実行される、負荷の少ないプロセスです。 Any process can request the creation of a new kernel thread. どのようなプロセスも、新しいカーネルスレッドの作成を要求できます。 メモリが不足しても、カーネルスレッドはスワップアウトされません。 VM 空間と limits は proc0 (通常 swapper) と共有になります。 カーネルスレッドは、終了時に kthread_exit() を呼び出さなければなりません。 関数 kthread_create1(void (*func)(void *), void *arg, struct proc **newpp, const char *fmt, ...) カーネルスレッドを fork します。newpp はカーネルスレッド 用の新しい proc 構造体へのポインタです。実行を開始する時、 関数 func が引数 arg を伴って呼び出されます。fmt はカー ネルスレッド名を表示するために使用される書式文字列です。 関数 func は return してはいけません。カーネルスレッドが 終了する時は、自身を正しく終了させるために、 kthread_exit() を呼び出さなければなりません。 (訳註: struct proc の宣言は sys/sys/proc.h) kthread_create(void (*func)(void *), void *arg) カーネルスレッド作成の予約をします。関数 func は登録する 関数です。カーネルスレッド作成の予約は、システム起動中、 カーネルスレッド用の資源がまだ準備できていない時点でカー ネルスレッドを作る必要がある際に使用します。 kthread_exit(int ecode) カーネルスレッドを exit します。 戻り値 正常終了すると、kthread_create1() は 0 を返します。 失敗すると以下のエラー値を返します。 [EAGAIN] システムプロセスの総数が上限に達しました。 [EAGAIN] このユーザー ID によって実行されているプロセスの総数が、 上限 RLIMIT_NPORC に達しました。 コードリファレンス このセクションでは、NetBSD ソースツリー内で、実際に kthread フレー ムワークを使ったコード実装や、使用例の存在する場所を示します。全 てのパス名は /usr/src からの相対パスです。 kthread フレームワーク自身の実装は、ファイル sys/kern/kern_kthread.c です。フレームワーク用のデータ構造とプロ トタイプは sys/sys/kthread.h にあります。 関連項目 driver(9), fork1(9) 歴史 kthread フレームワークは NetBSD 1.4 で登場しました。 NetBSD 3.1 July 9, 2000 NetBSD 3.1 $Id: kthread.0,v 1.3 2007/07/12 02:49:10 candy Exp candy $