Linuxカーネルがユーザースペースプロセス/スレッドとカーネルジョブ/タスクの間でCPUを予約する方法

Linuxカーネルがユーザースペースプロセス/スレッドとカーネルジョブ/タスクの間でCPUを予約する方法

私はLinuxプロセスの管理とスケジューリングを理解しようとしています。スケジューラは、優先順位/時間分割によってさまざまなプロセスをスケジュールすることを知っています。ただし、処理する必要のあるカーネル操作(プロセスをカーネルモードにインポートするプロセスのシステムコールは言及していません)もあります(スケジューラ/タイマー、または永久に実行されるカーネルコードなど)。スケジューラが他のプロセス用にCPUを予約しているかどうか、カーネル操作がその間にどのように提供されるのかわかりません。

ベストアンサー1

"in-process"(システムコールまたは割り込みサービス)を実行しないカーネルジョブは、独自に別々のプロセスとして処理され、次の出力psで確認できます。

root         2  0.0  0.0      0     0 ?        S    Sep16   0:02 [kthreadd]
root         3  0.0  0.0      0     0 ?        I<   Sep16   0:00 [rcu_gp]
root         4  0.0  0.0      0     0 ?        I<   Sep16   0:00 [rcu_par_gp]
root         6  0.0  0.0      0     0 ?        I<   Sep16   0:00 [kworker/0:0H-kblockd]
root         8  0.0  0.0      0     0 ?        I<   Sep16   0:00 [mm_percpu_wq]
root         9  0.0  0.0      0     0 ?        S    Sep16   9:11 [ksoftirqd/0]
root        10  0.2  0.0      0     0 ?        I    Sep16 173:25 [rcu_sched]
root        11  0.0  0.0      0     0 ?        I    Sep16   0:00 [rcu_bh]
root        12  0.0  0.0      0     0 ?        S    Sep16   0:20 [migration/0]
root        14  0.0  0.0      0     0 ?        S    Sep16   0:00 [cpuhp/0]
root        15  0.0  0.0      0     0 ?        S    Sep16   0:00 [cpuhp/1]

これらのプロセスは、あなたがより親しみやすいプロセスと同じ方法で構成されています。

この種のタスクの一般的なパターンは次のとおりです。ジョブキュー; これに関するカーネル文書は非常に優れているので、そのトピックに興味がある場合はお読みください。

おすすめ記事