kthreadはどのコンテキストで実行されますか?

kthreadはどのコンテキストで実行されますか?

システムコールは呼び出しプロセス内で実行され、割り込みはすべてのプロセス内で実行できますが(割り込みが発生すると現在実行中のプロセス内で割り込みハンドラが実行されます)、kthreadはどこで実行されますか?一部の関数呼び出しが現在カーネルモードで実行されているとしますkthreads_create。これは新しいカーネルスレッドを作成する必要がありますが、実行コンテキストは何ですか?私の質問が仮想だと思ったらすみません。私は間違いなくLinuxカーネルに初めて触れる人です。

ベストアンサー1

カーネルスレッドには独自のプロセスコンテキストがあります。カーネルスレッドは次のようにリストされていますps

$ ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 May29 ?        00:00:44 /sbin/init
root         2     0  0 May29 ?        00:00:00 [kthreadd]
root         3     2  0 May29 ?        00:00:05 [ksoftirqd/0]
root         5     2  0 May29 ?        00:00:00 [kworker/0:0H]
root         7     2  0 May29 ?        00:00:01 [migration/0]
root         8     2  0 May29 ?        00:02:57 [rcu_preempt]
root         9     2  0 May29 ?        00:00:00 [rcu_bh]
root        10     2  0 May29 ?        00:00:00 [rcu_sched]
root        11     2  0 May29 ?        00:00:00 [watchdog/0]
root        12     2  0 May29 ?        00:00:00 [watchdog/1]
...

[角括弧]内のすべてのプロセス名はカーネルスレッドを表します。

また、見ることができますhttps://lwn.net/Articles/65178/kthread_createデータ構造を作成するだけです。その後、このデータ構造はwake_up_processプロセスを実行するプロセスに渡されます。

そうだカーネル文書使用される用語プロセスワイヤーそして仕事むしろ緩く、ある程度の交換が可能です。

おすすめ記事