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:
- Systemaufruf-Schnittstelle
- Architekturunabhängiger Kernel-Code
- Architekturabhängiger Code
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 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, kjournald
der nebenan sitzt pdflush
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()
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. bdflush
koordiniert mit pdflush
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 bleibt free_pages_high
, kswapd
wird nichts unternommen. Wenn jedoch die Anzahl der freien Seiten kswapd
geringer ist , wird der Seitenumklärungsprozess gestartet. Nachdem kswapd
Seiten für den Umzug markiert wurden, bdflush
werden alle ausstehenden Änderungen am Speichermedium über die pdflush
Daemons synchronisiert .
Referenzen & weiterführende Literatur