Ich habe versucht, das Linux-Prozessmanagement und die Zeitplanung zu verstehen. Ich weiß, dass der Planer verschiedene Prozesse basierend auf Prioritäts-/Zeitscheiben plant. Aber es gibt Kernel-Tasks (ich erwähne nicht die Systemaufrufe des Prozesses, die den Prozess in den Kernel-Modus bringen), die ebenfalls verarbeitet werden müssen (zB:Scheduler/Timer oder irgendein Kernel-Code, der ewig läuft). Ich habe nicht verstanden, ob der Scheduler die CPU für verschiedene Prozesse plant, wie die Kernel-Tasks dazwischen bedient werden.
Akzeptierte Antwort:
Kernel-Tasks, die nicht „in Bearbeitung“ ausgeführt werden (um einen Systemaufruf oder einen Interrupt zu bedienen), werden selbst als separate Prozesse behandelt, und Sie können sie in ps
sehen Ausgabe von :
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]
Diese Prozesse werden genauso geplant wie Prozesse, mit denen Sie vertrauter sind.
Ein gängiges Muster für solche Aufgaben sind Arbeitswarteschlangen; die Kernel-Dokumentation dafür ist ziemlich gut, ich ermutige Sie, sie zu lesen, wenn Sie an dem Thema interessiert sind.