Bevor wir die Einzelheiten in Bezug auf diskutieren pdflush, kjournald, andkswapd`, 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:
- Systemaufruf-Schnittstelle
- Architekturunabhängiger Kernel-Code
- Architekturabhängiger Code
Wie der Name schon sagt, bietet die Systemaufrufschnittstelle eine Schnittstelle zwischen dem glibcund 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 begegnen pdflush. 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, kjournaldder nebenan sitzt pdflushund 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()Schritte
Um 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.
- Ein Prozess fordert an, eine Datei über den
write()Systemaufruf zu schreiben .
- Der Kernel aktualisiert den der Datei zugeordneten Seiten-Cache.
- Ein pdflush-Kernel-Thread leert den Seiten-Cache auf die Festplatte.
- Die Dateisystemschicht fügt jeden Blockpuffer zu einem zusammen
bio struct( siehe 1.4.3, „Blockschicht“ auf Seite 23 ) und sendet eine Schreibanforderung an die Blockgeräteschicht.
- Die Blockgeräteschicht empfängt Anforderungen von den oberen Schichten und führt eine E / A-Aufzugsoperation durch und stellt die Anforderungen in die E / A-Anforderungswarteschlange.
- Ein Gerätetreiber wie SCSI oder andere gerätespezifische Treiber kümmern sich um den Schreibvorgang.
- Eine Plattengerätefirmware führt Hardwareoperationen wie Suchkopf, Rotation und Datenübertragung zum Sektor auf dem Plattenteller aus.
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. bdflushkoordiniert mit pdflushDä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 kswapdDämon, Seiten freizugeben. Solange die Anzahl der freien Seiten oben bleibt free_pages_high, kswapdwird nichts unternommen. Wenn jedoch die Anzahl der freien Seiten kswapdgeringer ist , wird der Seitenumklärungsprozess gestartet. Nachdem kswapdSeiten für den Umzug markiert wurden, bdflushwerden alle ausstehenden Änderungen am Speichermedium über die pdflushDaemons synchronisiert .
Referenzen & weiterführende Literatur