GNU/Linux >> Linux の 問題 >  >> Linux

Linux – Linuxカーネルはユーザースペースプロセス/スレッドとカーネルタスク/ジョブの間でCPUをどのようにスケジュールしますか?

Linuxのプロセス管理とスケジューリングを理解しようとしていました。スケジューラーが優先度/時間のスライスに基づいてさまざまなプロセスをスケジュールすることを知っています。ただし、同様に処理する必要のあるカーネルタスク(プロセスをカーネルモードにするプロセスのシステムコールについては言及していません)があります(例:スケジューラ/タイマーまたは永久に実行されるカーネルコード)。スケジューラーが異なるプロセスのCPUをスケジュールするかどうか、カーネルタスクがその間にどのように処理されるかを理解していませんでした。

承認された回答:

「インプロセス」(システムコールまたは割り込みを処理するため)で実行されないカーネルタスクは、それ自体が個別のプロセスとして処理され、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]

これらのプロセスは、使い慣れたプロセスと同じ方法でスケジュールされます。

このようなタスクの一般的なパターンはワークキューです。それらのカーネルドキュメントは非常に優れています。トピックに興味がある場合は、それを読むことをお勧めします。


Linux
  1. Linux カーネルの copy_from_user は内部でどのように機能しますか?

  2. Linuxカーネルバッファをユーザー空間にmmapする方法は?

  3. カーネルはどのようにルート パーティションをマウントしますか?

  1. Linux –ユーザースペースとカーネルスペースの違いは?

  2. Linux はシングルコア マシンで CPU の制御をどのように保持しますか?

  3. Linux はどのようにプロセス間で帯域幅を割り当てますか?

  1. Linux – Linuxカーネルはどのようにしてデバイスのメジャー番号とマイナー番号を認識しますか?

  2. Linux でユーザー/グループの UID と GID を (正しく) 変更する方法

  3. Linux カーネルは __init 呼び出しの順序をどのように決定しますか?