Kernel(2.6)の実装に関するメモ書きプロセスのBlockとWakeup1.プロセスの止め方プロセスをブロックさせるには、WaitQueueを使ってブロックすれば、まとめてWakeupできる。プロセス切替え(ブロック)wake_up_process()で1.で保存しておいたcurrentを指定すれば起床できる。WaitQueueを使う場合WaitQueueのエントリにはwakeup時のコールバックルーチンを指定しておく。本ルーチンを指定すれば、wakeup時に何か追加の処理を行える。通常はデフォルトでいいはず。autoremove_wake_functionが設定される。Wakeupされた時の後処理__set_current_state(TASK_RUNNING)でプロセスをRunning状態にしている。各処理部でその1のような方法で止めたり、その2の方法で止めたりまちまち。その2の方が、Wakup後にWaitQueueからエントリの削除を行なう必要がないので多少楽。プロセスのRunQueueからの削除はschedule()で行われている。2.止めたプロセスの起こし方WaitQueueを使わずにtask_structのアドレスを保存しておいて止めた場合は、wake_up_process()でtask_structを指定すればよい。WaitQueueを使用した場合は、wake_up()でWaitQueueを指定すればよい。wake_up()には派生ルーチンがあるが、どれもマクロで__wake_up()を使用している(include/linux/wait.h)。RUNNING状態にした後、WaitQueueから外すこれらのルーチンはプロセスをRunQueueにつないでRUNNING状態にするだけで、schedule自体は別途行なう。管理リンクその他のWikiとみぞーノートXnuメモ会社(有)ビットハイブ受託開発やってます。