Kürzlich sah eine Frage, die diesen Gedanken auslöste. Konnte hier oder über die Google-Maschine keine Antwort finden. Grundsätzlich interessiert mich, wie die Kernel-E / A-Architektur geschichtet ist. ZB kjournald
Versand nach pdflush
oder umgekehrt? Ich gehe davon aus, dass pdflush
(generischer für Massenspeicher-E / A) die SCSI / ATA / whatever-Befehle, die zum tatsächlichen Ausführen der Schreibvorgänge erforderlich sind, auf einer niedrigeren kjournald
Ebene abgelegt werden und vor dem Schreiben Dateisystemdatenstrukturen auf höherer Ebene verarbeitet werden. Ich konnte es aber auch anders herum sehen, indem ich kjournald
direkt mit den Dateisystemdatenstrukturen verbunden war und ab und zu pdflush
aufwachte, um schmutzige Pagecache-Seiten auf das Gerät zu schreibenkjournald
. Es ist auch möglich, dass die beiden aus einem anderen Grund überhaupt nicht interagieren.
Grundsätzlich: Ich brauche eine Möglichkeit, um die grundlegende Architektur für das Versenden von E / A an den Massenspeicher im Linux-Kernel zu visualisieren (Grafik oder nur eine Erläuterung).
Antworten:
Bevor wir die Einzelheiten in Bezug auf diskutieren
pdflush
,kjournald, and
kswapd`, lassen Sie uns zuerst ein wenig Hintergrund auf dem Hintergrund dessen, was genau wir reden in Bezug auf den Linux - Kernel.Die GNU / Linux-Architektur
Die Architektur von GNU / Linux kann als zwei Räume betrachtet werden:
Zwischen dem User Space und dem Kernel Space befindet sich die GNU C Library (
glibc
). Dadurch wird die Systemaufrufschnittstelle bereitgestellt, die den Kernel mit den User-Space-Anwendungen verbindet.Der Kernelraum kann weiter in 3 Ebenen unterteilt werden:
Wie der Name schon sagt, bietet die Systemaufrufschnittstelle eine Schnittstelle zwischen dem
glibc
und dem Kernel. Der Architectural Independent Kernel Code besteht aus den logischen Einheiten wie dem VFS (Virtual File System) und dem VMM (Virtual Memory Management). Der Architectural Dependent Code ist der prozessor- und plattformspezifische Code für eine bestimmte Hardwarearchitektur.Diagramm der GNU / Linux-Architektur
Im weiteren Verlauf dieses Artikels konzentrieren wir uns auf die logischen VFS- und VMM-Einheiten im Kernel-Space.
Subsysteme des GNU / Linux-Kernels
VFS-Subsystem
Mit einem übergeordneten Konzept der Struktur des GNU / Linux-Kernels können wir etwas tiefer in das VFS-Subsystem eintauchen. Diese Komponente ist für den Zugriff auf die verschiedenen Blockspeichergeräte verantwortlich, die letztendlich einem Dateisystem (ext3 / ext4 / etc.) Auf einem physischen Gerät (HDD / etc.) Zugeordnet sind.
Diagramm von VFS
Dieses Diagramm zeigt, wie ein
write()
Prozess eines Benutzers das VFS durchläuft und sich schließlich zum Gerätetreiber hinunterarbeitet, wo er auf das physische Speichermedium geschrieben wird. Dies ist der erste Ort, an dem wir begegnenpdflush
. Dies ist ein Daemon, der für das Leeren von fehlerhaften Daten und Metadaten-Pufferblöcken auf das Speichermedium im Hintergrund verantwortlich ist. Das Diagramm zeigt dies nicht, aber es gibt einen anderen Daemon,kjournald
der nebenan sitztpdflush
und eine ähnliche Aufgabe ausführt, indem er schmutzige Journalblöcke auf die Festplatte schreibt. HINWEIS: Dateisysteme wie ext4 und JFS Änderungen an der Festplatte in einer Datei verfolgen, bevor diese Änderungen wirksam werden.Die obigen Details werden in diesem Papier weiter diskutiert .
Übersicht der
write()
SchritteUm einen einfachen Überblick über die I / O-Sybsystem-Operationen zu erhalten, verwenden wir ein Beispiel, in dem die Funktion
write()
von einer User Space-Anwendung aufgerufen wird.write()
Systemaufruf zu schreiben .bio struct
( siehe 1.4.3, „Blockschicht“ auf Seite 23 ) und sendet eine Schreibanforderung an die Blockgeräteschicht.VMM-Subsystem
Wir setzen unseren tieferen Tauchgang fort und können uns nun das VMM-Subsystem ansehen. Diese Komponente ist für die Aufrechterhaltung der Konsistenz zwischen Hauptspeicher (RAM), Swap und dem physischen Speichermedium verantwortlich. Der primäre Mechanismus zur Aufrechterhaltung der Konsistenz ist
bdflush
. Da Speicherseiten als verschmutzt gelten, müssen sie mit den Daten auf dem Speichermedium synchronisiert werden.bdflush
koordiniert mitpdflush
Dämonen, um diese Daten mit dem Speichermedium zu synchronisieren.Diagramm von VMM
Tauschen
Wenn der Systemspeicher knapp wird oder der Kernel-Swap-Timer abläuft, versucht der
kswapd
Dämon, Seiten freizugeben. Solange die Anzahl der freien Seiten oben bleibtfree_pages_high
,kswapd
wird nichts unternommen. Wenn jedoch die Anzahl der freien Seitenkswapd
geringer ist , wird der Seitenumklärungsprozess gestartet. Nachdemkswapd
Seiten für den Umzug markiert wurden,bdflush
werden alle ausstehenden Änderungen am Speichermedium über diepdflush
Daemons synchronisiert .Referenzen & weiterführende Literatur
quelle