Aus Mauerers Linux-Kernel-Architektur,
Kernel-Threads sind Prozesse, die direkt vom Kernel selbst gestartet werden. Sie delegieren eine Kernelfunktion an einen separaten Prozess und führen sie dort parallel zu den anderen Prozessen im System aus (und tatsächlich parallel zur Ausführung des Kernels selbst). Kernel-Threads werden häufig als (Kernel-) Daemons bezeichnet . Sie werden beispielsweise verwendet, um folgende Aufgaben auszuführen:
- Zum regelmäßigen Synchronisieren geänderter Speicherseiten mit dem Blockgerät, von dem die Seiten stammen (z. B. Dateien, die mit mmap zugeordnet wurden).
- Zum Schreiben von Speicherseiten in den Auslagerungsbereich, wenn diese selten verwendet werden.
- Zurückgestellte Aktionen verwalten.
- So implementieren Sie Transaktionsjournale für Dateisysteme.
Grundsätzlich gibt es zwei Arten von Kernel-Threads:
- Typ 1 - Der Thread wird gestartet und wartet, bis er vom Kernel aufgefordert wird, eine bestimmte Aktion auszuführen.
- Typ 2 - Nach dem Start wird der Thread in regelmäßigen Abständen ausgeführt, überprüft die Auslastung einer bestimmten Ressource und ergreift Maßnahmen, wenn die Auslastung einen festgelegten Grenzwert überschreitet oder unterschreitet. Der Kernel verwendet diesen Thread-Typ für kontinuierliche Überwachungsaufgaben.
Da Mauerers Buch besagt, dass Kernel-Threads Prozesse sind, denke ich, dass sie im Benutzermodus statt im Kernel-Modus ausgeführt werden müssen. (Oder irre ich mich? Kann ein Prozess entweder im Benutzermodus oder im Kernelmodus zu unterschiedlichen Zeiten oder nur in einem Modus ausgeführt werden?)
Laut Bovets Understanding Linux Kernel werden Kernel-Threads nur im Kernel-Modus ausgeführt (siehe Zitat unten). Sind die Konzepte des "Kernel-Threads" in den beiden Büchern dasselbe Konzept?
Herkömmliche Unix-Systeme delegieren einige wichtige Aufgaben an zeitweise ausgeführte Prozesse, z. B. das Leeren von Festplatten-Caches, das Austauschen nicht verwendeter Seiten, das Warten von Netzwerkverbindungen usw. In der Tat ist es nicht effizient, diese Aufgaben streng linear auszuführen. Sowohl ihre Funktionen als auch die Endbenutzerprozesse erhalten eine bessere Reaktion, wenn sie im Hintergrund geplant werden. Da einige der Systemprozesse nur im Kernelmodus ausgeführt werden , delegieren moderne Betriebssysteme ihre Funktionen an Kernel-Threads , die nicht mit dem unnötigen Benutzermodus-Kontext belastet sind. Unter Linux unterscheiden sich Kernel-Threads in folgenden Punkten von regulären Prozessen:
- Kernel-Threads werden nur im Kernel-Modus ausgeführt, während reguläre Prozesse abwechselnd im Kernel-Modus und im Benutzermodus ausgeführt werden.
- Da Kernel-Threads nur im Kernel-Modus ausgeführt werden, verwenden sie nur lineare Adressen, die größer als PAGE_OFFSET sind. Bei regulären Prozessen werden dagegen alle vier Gigabyte linearer Adressen entweder im Benutzermodus oder im Kernelmodus verwendet.
Mauerers Buch besagt, dass Kernel-Threads direkt vom Kernel gestartet werden, und es scheint auch zu sagen, dass Daemons Synonyme für Kernel-Threads sind. Ich denke also, Daemons müssen direkt vom Kernel gestartet werden.
Aber https://unix.stackexchange.com/a/193918/674 sagt , dass
screen
‚s - Daemon durch gestartetscreen
Benutzeroberfläche (siehe Zitat unten). Ich denke, diescreen
Benutzeroberfläche ist ein Prozess anstelle des Kernels. Sind die Konzeptedaemon
in Mauerers Buch und in der verknüpften Antwort dasselbe Konzept?Beim ersten Start starten
screen
Sie tatsächlich eine Benutzeroberfläche (UI), die standardmäßig einen Daemon (den Sitzungsmanager) erstellt.Wie verstehen Sie im Allgemeinen die Konzepte von "Kernel-Threads", "Process" und "Daemon", ihre Beziehungen und ihre Unterschiede?