Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Was sind die Subsysteme des Linux-Kernels?

Was sind die Subsysteme des Linux-Kernels?

青灯夜游
青灯夜游Original
2021-11-26 10:46:529307Durchsuche

Der Linux-Kernel verfügt über 5 Subsysteme: 1. Process Scheduling Control System (SCHED); 2. Memory Management System (MM), dessen Hauptfunktion darin besteht, mehrere Prozesse zu steuern, um den Hauptspeicherbereich sicher zu teilen; VFS); 4. Netzwerkschnittstelle (NET); 5. Interprozesskommunikation (IPC).

Was sind die Subsysteme des Linux-Kernels?

Die Betriebsumgebung dieses Tutorials: Ubuntu 16.04-System, Dell G3-Computer.

Kernel:

In der Informatik handelt es sich um ein Computerprogramm, das dazu dient, von Software ausgegebene Daten-E/A-Anforderungen (Eingabe und Ausgabe) zu verwalten, diese Anforderungen in Datenverarbeitungsanweisungen zu übersetzen und sie an den Zentralprozessor (CPU) zu liefern ) und anderen elektronischen Komponenten im Computer ist es der grundlegendste Teil des modernen Betriebssystems. Dabei handelt es sich um eine Software, die vielen Anwendungen einen sicheren Zugriff auf Computerhardware ermöglicht. Dieser Zugriff ist begrenzt und der Kernel bestimmt, wann und wie lange ein Programm auf einem bestimmten Teil der Hardware ausgeführt werden kann. Die Bedienung direkt auf der Hardware ist sehr aufwändig. Daher stellt der Kernel normalerweise eine Hardware-Abstraktionsmethode bereit, um diese Vorgänge abzuschließen. Durch prozessübergreifende Kommunikationsmechanismen und Systemaufrufe können Anwendungsprozesse indirekt erforderliche Hardwareressourcen (insbesondere Prozessoren und IO-Geräte) steuern.

Was sind die Subsysteme des Linux-Kernels

Der Linux-Kernel besteht hauptsächlich aus Prozessplanung (SCHED), Speicherverwaltung (MM), virtuellem Dateisystem (VFS), Netzwerkschnittstelle (NET) und Inter- Prozesskommunikation (IPC) Es besteht aus 5 Subsystemen, wie in der folgenden Abbildung dargestellt.

Was sind die Subsysteme des Linux-Kernels?

1. Prozessplanung

Die Prozessplanung steuert den Zugriff mehrerer Prozesse im System auf die CPU, sodass mehrere Prozesse „mikroseriell und makroparallel“ in der CPU ausgeführt werden können . Die Prozessplanung steht im Zentrum des Systems und andere Subsysteme im Kernel sind darauf angewiesen, da jedes Subsystem Prozesse anhalten oder fortsetzen muss.

Wie in der Abbildung unten dargestellt, wechselt der Linux-Prozess zwischen mehreren Zuständen.


Linux-Prozesszustandsübergang

Wenn bei der Gerätetreiberprogrammierung die angeforderte Ressource nicht erfüllt werden kann, plant der Treiber im Allgemeinen die Ausführung anderer Prozesse und versetzt diesen Prozess in den Ruhezustand, bis die angeforderte Ressource freigegeben wird und gehen Sie in den Bereitschaftszustand. Der Schlaf wird in unterbrechbaren Schlaf und ununterbrochenen Schlaf unterteilt. Der Unterschied zwischen beiden besteht darin, dass der unterbrechbare Schlaf aufwacht, wenn ein Signal empfangen wird.

Ein Prozess, der sich vollständig im Status TASK_UNINTERRUPTIBLE befindet, kann nicht einmal „getötet“ werden, daher hat der Kernel nach Linux 2.6.26 auch einen Status TASK_KILLABLE, der gleich „TASK_WAKEKILL|TASK_UNINTERRUPTIBLE“ ist und auf fatale Signale reagieren kann.

Im Linux-Kernel wird die task_struct-Struktur (include/linux/sched.h) verwendet, um den Prozess zu beschreiben. Diese Struktur enthält Zeiger, die die Speicherressourcen, Dateisystemressourcen, Dateiressourcen, TTY-Ressourcen, Signalverarbeitung usw. beschreiben . des Prozesses. Linux-Threads werden mithilfe eines einfachen Prozessmodells implementiert. Wenn ein Thread im Benutzerbereich über die pthread_create()-API erstellt wird, erstellt der Kernel im Wesentlichen nur eine neue task_struct und verweist alle Ressourcenzeiger der neuen task_struct auf die Ressource, die sie erstellt hat Zeiger von task_struct.

Die überwiegende Mehrheit der Prozesse (und mehrere Threads im Prozess) werden von User-Space-Anwendungen erstellt. Wenn sie Anforderungen an zugrunde liegende Ressourcen und Hardwarezugriff haben, gelangen sie über Systemaufrufe in den Kernel-Space. Wenn bei der Kernel-Programmierung mehrere Aufgaben gleichzeitig ausgeführt werden müssen, können manchmal Kernel-Threads gestartet werden, und diese Threads verfügen nicht über Benutzerbereich. Die Funktion zum Starten des Kernel-Threads lautet: pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);

2 Speicherverwaltung

Die Hauptfunktion der Speicherverwaltung ist die Steuerung die Sicherheit des von mehreren Prozessen gemeinsam genutzten Hauptspeicherbereichs. Die Linux-Speicherverwaltung schließt die Konvertierung vom virtuellen Speicher in den physischen Speicher für jeden Prozess ab, wenn die CPU eine Speicherverwaltungseinheit (MMU) bereitstellt. Linux 2.6 führte die Unterstützung für MMU-lose CPUs ein.

Wie in der Abbildung gezeigt, verfügt jeder Linux-Prozess auf einem 32-Bit-Prozessor im Allgemeinen über 4 GB Speicherplatz, 0 bis 3 GB gehören zum Benutzerbereich, 3 bis 4 GB gehören zum Kernelbereich und der Kernelbereich hat einen gewissen Einfluss auf konventionellem Speicher und E/A werden Gerätespeicher und High-End-Speicher unterschiedlich gehandhabt. Die spezifischen Grenzen zwischen Kernel-Space und User-Space können unter der Kernel-Konfigurationsoption Kernel Features→Memory Split eingestellt werden. Die Grenze kann auf 2 GB oder 3 GB festgelegt werden.


Adressraum des Linux-Prozesses

Wie in der obigen Abbildung gezeigt, ist die gesamte Speicherverwaltung des Linux-Kernels relativ groß, einschließlich des zugrunde liegenden Buddy-Algorithmus, der zum Verwalten der Belegung jeder Seite und des Slab-Allokators verwendet wird Kernel-Space und sekundäre Verwaltung von C-Bibliotheken im User-Space. Darüber hinaus bietet der Kernel auch Seiten-Cache-Unterstützung, indem er Speicher zum Zwischenspeichern der Festplatte verwendet, und der Thread zum Flushen von Informationen pro Backing-Gerät wird verwendet, um den Cache für fehlerhafte Seiten zurück auf die Festplatte zu leeren. Kswapd (Swap-Prozess) ist der Kernel-Thread, der für das Seitenrecycling (einschließlich dateigestützter Seiten und anonymer Seiten) unter Linux verwendet wird. Er verwendet den zuletzt verwendeten (LRU) Algorithmus für das Speicherrecycling. 3. Virtuelles Dateisystem . Darüber hinaus ist es unabhängig von jedem einzelnen Dateisystem und eine Abstraktion verschiedener Dateisysteme. Es stellt einheitliche vfs_read()-, vfs_write()- und andere Schnittstellen für Anwendungen der oberen Schicht bereit und ruft Mitgliedsfunktionen der file_operations-Struktur auf, die im spezifischen zugrunde liegenden Dateisystem oder Gerätetreiber implementiert sind.

4. Netzwerkschnittstelle

Die Netzwerkschnittstelle bietet Zugriff auf verschiedene Netzwerkstandards und Unterstützung für verschiedene Netzwerkhardware. Wie in Abbildung 3.8 dargestellt, kann die Netzwerkschnittstelle in Linux in Netzwerkprotokolle und Netzwerktreiber unterteilt werden. Der Netzwerkprotokollteil ist für die Implementierung aller möglichen Netzwerkübertragungsprotokolle verantwortlich Geräte verfügen über entsprechende Gerätetreiber.

Linux-Netzwerkarchitektur

Der Linux-Kernel unterstützt viele Arten von Protokollstapeln, wie Internet, UNIX, CAN, NFC, Bluetooth, WiMAX, IrDA usw. Die Anwendungen der oberen Schicht verwenden einheitlich die Socket-Schnittstelle.

5. Kommunikation zwischen Prozessen

Die Kommunikation zwischen Prozessen unterstützt eine Vielzahl von Kommunikationsmechanismen zwischen Prozessen, einschließlich Semaphoren, gemeinsam genutztem Speicher, Nachrichtenwarteschlangen, Pipes, UNIX-Domänen-Sockets usw Unterstützung mehrerer Prozesse, sich gegenseitig ausschließender Zugriff auf mehrere Ressourcen, Synchronisierung zwischen Prozessen und Nachrichtenübermittlung. In tatsächlichen Linux-Anwendungen neigen Benutzer dazu, UNIX-Domänen-Sockets anstelle von Nachrichtenwarteschlangen und anderen Mechanismen in System V IPC zu verwenden. Der Android-Kernel hat eine neue Binder-Kommunikationsmethode zwischen Prozessen hinzugefügt.

Die Abhängigkeiten zwischen den 5 Komponenten des Linux-Kernels sind wie folgt:


Die Beziehung zwischen Prozessplanung und Speicherverwaltung: Diese beiden Subsysteme sind voneinander abhängig. Wenn in einer Umgebung mit mehreren Programmen ein Programm ausgeführt werden soll, muss dafür zunächst ein Prozess erstellt werden. Beim Erstellen eines Prozesses müssen zunächst das Programm und die Daten in den Speicher geladen werden.

Die Beziehung zwischen prozessübergreifender Kommunikation und Speicherverwaltung: Das prozessübergreifende Kommunikationssubsystem basiert auf der Speicherverwaltung, um den Kommunikationsmechanismus für gemeinsam genutzten Speicher zu unterstützen. Dieser Mechanismus ermöglicht es zwei Prozessen, nicht nur über einen eigenen privaten Bereich zu verfügen, sondern auch darauf zuzugreifen gemeinsamer Speicherbereich.

Die Beziehung zwischen dem virtuellen Dateisystem und der Netzwerkschnittstelle: Das virtuelle Dateisystem nutzt die Netzwerkschnittstelle zur Unterstützung des Network File System (NFS) und nutzt außerdem die Speicherverwaltung zur Unterstützung von RAMDISK-Geräten.

Die Beziehung zwischen Speicherverwaltung und virtuellem Dateisystem: Die Speicherverwaltung verwendet das virtuelle Dateisystem zur Unterstützung des Austauschs, und der Austauschvorgang wird regelmäßig vom Scheduler geplant, weshalb die Speicherverwaltung auf der Prozessplanung basiert. Wenn die Speicherzuordnung, auf die ein Prozess zugreift, ausgelagert wird, sendet die Speicherverwaltung eine Anfrage an das virtuelle Dateisystem und unterbricht gleichzeitig den aktuell ausgeführten Prozess.
  • Zusätzlich zu diesen Abhängigkeiten sind alle Subsysteme im Kernel auch von einigen gemeinsamen Ressourcen abhängig. Zu diesen Ressourcen zählen APIs, die von allen Subsystemen genutzt werden, etwa Funktionen zur Zuweisung und Freigabe von Speicherplatz, Funktionen zur Ausgabe von Warn- oder Fehlermeldungen sowie vom System bereitgestellte Debugging-Schnittstellen.
  • Verwandte Empfehlungen: „

    Linux-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWas sind die Subsysteme des Linux-Kernels?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Was sind die Linux-Shells?Nächster Artikel:Was sind die Linux-Shells?