GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux – Wie plant der Linux-Kernel die CPU zwischen User Space-Prozessen/Threads und Kernel-Tasks/Jobs?

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.


Linux
  1. So ändern Sie die UID und GID eines Benutzers / einer Gruppe in Linux (richtig).

  2. Wie funktioniert copy_from_user aus dem Linux-Kernel intern?

  3. Wie bestimmt der Linux-Kernel die Reihenfolge der __init-Aufrufe?

  4. Wie kann man einen Linux-Kernel-Puffer dem Benutzerbereich zuordnen?

  5. Wie mountet ein Kernel die Root-Partition?

Was ist der Unterschied zwischen macOS- und Linux-Kernels

So finden Sie die am häufigsten ausgeführten Prozesse nach Speicher- und CPU-Auslastung in Linux

Wie deaktiviere ich die SSH-Anmeldung für den Root-Benutzer in Linux?

So mounten und zeigen Sie die ISO-Datei als Root und normaler Benutzer in Linux an

Was ist der Unterschied zwischen Benutzerbereich und Kernelbereich?

Wie lädt Linux das 'initrd'-Image?