Zanim omówimy specyfikę zakresie pdflush
, kjournald, and
kswapd`, niech najpierw trochę tło na kontekście tego, co dokładnie mówimy w kategoriach Linux Kernel.
Architektura GNU / Linux
Architekturę GNU / Linux można traktować jako 2 spacje:
Pomiędzy przestrzenią użytkownika a przestrzenią jądra znajduje się biblioteka GNU C ( glibc
). Zapewnia to interfejs wywołania systemowego, który łączy jądro z aplikacjami w przestrzeni użytkownika.
Przestrzeń jądra można podzielić na 3 poziomy:
- Interfejs wywołania systemowego
- Niezależny kod architektoniczny jądra
- Architektoniczny kod zależny
Interfejs wywołania systemowego, jak sugeruje jego nazwa, zapewnia interfejs między glibc
jądrem i. Architektoniczne Niezależne Kod Jądro składa się z jednostek logicznych, takich jak VFS (Virtual File System) oraz VMM (Virtual Memory Management). Architektoniczne Dependent Code to składniki, które są platformą procesor i kod specyficzny dla danej architektury sprzętowej.
Schemat architektury GNU / Linux
W dalszej części tego artykułu skupimy się na jednostkach logicznych VFS i VMM w przestrzeni jądra.
Podsystemy jądra GNU / Linux
Podsystem VFS
Dzięki wysokopoziomowej koncepcji struktury jądra GNU / Linux możemy zagłębić się nieco głębiej w podsystem VFS. Ten komponent jest odpowiedzialny za zapewnienie dostępu do różnych blokowych urządzeń pamięci masowej, które ostatecznie odwzorowują system plików (ext3 / ext4 / etc.) Na urządzeniu fizycznym (HDD / etc.).
Schemat VFS
Ten schemat pokazuje, jak write()
proces użytkownika przemierza VFS i ostatecznie dociera do sterownika urządzenia, gdzie jest zapisywany na fizycznym nośniku pamięci. To pierwsze miejsce, w którym się spotykamy pdflush
. Jest to demon odpowiedzialny za opróżnianie brudnych danych i bloków bufora metadanych na nośniku pamięci w tle. Schemat tego nie pokazuje, ale istnieje inny demon, kjournald
który siedzi obok pdflush
i wykonuje podobne zadanie, zapisując brudne bloki dziennika na dysk. UWAGA: Bloki dziennika to sposób, w jaki systemy plików, takie jak ext4 i JFS, śledzą zmiany na dysku w pliku przed wprowadzeniem tych zmian.
Powyższe szczegóły są omówione w dalszej części tego dokumentu .
Przegląd write()
kroków
Aby zapewnić prosty przegląd operacji sybsystemu we / wy, skorzystamy z przykładu, w którym funkcja write()
jest wywoływana przez aplikację User Space.
- Proces żąda zapisania pliku za pośrednictwem
write()
wywołania systemowego.
- Jądro aktualizuje pamięć podręczną strony zamapowaną na plik.
- Wątek jądra pdflush zajmuje się opróżnieniem pamięci podręcznej stron na dysk.
- Warstwa systemu plików umieszcza każdy bufor bloku razem w
bio struct
( patrz 1.4.3, „Warstwa bloku” na stronie 23 ) i przesyła żądanie zapisu do warstwy urządzenia blokowego.
- Warstwa urządzenia blokowego pobiera żądania z górnych warstw i wykonuje operację windy we / wy i umieszcza je w kolejce żądań we / wy.
- Sterownik urządzenia, taki jak SCSI lub inne sterowniki specyficzne dla urządzenia, zajmą się operacją zapisu.
- Oprogramowanie układowe urządzenia dyskowego wykonuje operacje sprzętowe, takie jak wyszukiwanie głowy, obracanie i przesyłanie danych do sektora na talerzu.
Podsystem VMM
Kontynuując nasze głębsze nurkowanie, możemy teraz zajrzeć do podsystemu VMM. Ten komponent jest odpowiedzialny za utrzymanie spójności między pamięcią główną (RAM), zamianą i fizycznym nośnikiem pamięci. Podstawowym mechanizmem utrzymania spójności jest bdflush
. Ponieważ strony pamięci są uważane za brudne, muszą zostać zsynchronizowane z danymi znajdującymi się na nośniku pamięci. bdflush
będzie koordynować z pdflush
demonami, aby zsynchronizować te dane z nośnikiem pamięci.
Schemat VMM
Zamiana
Kiedy zaczyna brakować pamięci systemowej lub upłynął czas wymiany jądra, kswapd
demon spróbuje zwolnić strony. Tak długo, jak liczba wolnych stron pozostaje powyżej free_pages_high
, kswapd
nic nie zrobi. Jeśli jednak liczba bezpłatnych stron spadnie poniżej, kswapd
rozpocznie się proces ponownego zapisywania strony. Po kswapd
zaznaczeniu stron do przeniesienia bdflush
zajmie się synchronizacją wszelkich zaległych zmian na nośniku pamięci, za pośrednictwem pdflush
demonów.
Referencje i dalsze odczyty