私は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]
これらのプロセスは、あなたがより親しみやすいプロセスと同じ方法で構成されています。
この種のタスクの一般的なパターンは次のとおりです。ジョブキュー; これに関するカーネル文書は非常に優れているので、そのトピックに興味がある場合はお読みください。