2011-10-24 9 views
0

は、私が働いているカーネルモジュールで定義された待ちキューを持っています。cleanup_module Linuxカーネル

私のcleanup_moduleでは、スレッドに終了を知らせ、cleanup_moduleの最後の行としてsleep_on(& WaitQ)を持つ変数を設定しました。次に、スレッドルーチンwake_up(& WaitQ)が、cleanup_moduleで設定された変数がtrueのときに呼び出され、次にcomplete_and_exitがスレッドを終了するときに呼び出されます。

私の質問です。 sleep_on(& WaitQ)が呼び出されたときにWaitQに追加されたもの。モジュール全体か、それともスレッドがinit_moduleで起動したのでしょうか?

答えて

1

どちらもキューに追加されないのは、モジュールを削除した "rmmod"プロセッサのスレッド(タスク)です。

+0

申し訳ありませんが、私はこのすべてを初めて知っているので、完全に理解していません。だから私の場合、sleep_onが呼び出されると、私が定義したルーチンはまだ動作しているので、実際にこの場合寝ているものは何ですか? – sam

+0

cleanup_moduleが呼び出されるシステムコールを呼び出した "rmmod"ユーティリティのタスク。 – gby

+0

okだからsleep_onが呼び出され、ルーチンを待つためにタスクをスリープ状態にして、何をしているのかを開始しました。ルーチンはwake_up(&WaitQ)を呼び出してタスクを起動し、それが何をしているのかを確認した後、スレッドを終了させcomplete_and_exitに進むことができることを伝えます。この後、モジュールは取り外されます。これは正しいのですか? – sam