Niedawno zobaczyłem pytanie, które wywołało tę myśl. Naprawdę nie mogłem znaleźć odpowiedzi tutaj lub za pośrednictwem maszyny Google. Zasadniczo interesuje mnie wiedza o strukturze warstwowej architektury we / wy jądra. Na przykład, czy kjournald
wysyłka do pdflush
lub na odwrót? Zakładam, że pdflush
(bardziej ogólny niż we / wy pamięci masowej) będzie znajdować się na niższym poziomie i wyzwalać polecenia SCSI / ATA / wszelkie niezbędne polecenia do faktycznego wykonywania zapisów i kjournald
obsługi struktur danych systemu plików wyższego poziomu przed zapisem. Widziałem to również na odwrót, z kjournald
bezpośrednim połączeniem ze strukturami danych systemu plików i pdflush
budzeniem się od czasu do czasu, aby zapisywać na urządzeniu brudne strony pamięci podręcznejkjournald
. Możliwe jest również, że ta dwójka nie wchodzi w interakcje z jakiegoś innego powodu.
Zasadniczo: Potrzebuję jakiegoś sposobu na wizualizację (wykres lub tylko wyjaśnienie) podstawowej architektury używanej do wysyłania I / O do pamięci masowej w jądrze Linux.
Odpowiedzi:
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, 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ę spotykamypdflush
. 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 obokpdflush
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ówAby zapewnić prosty przegląd operacji sybsystemu we / wy, skorzystamy z przykładu, w którym funkcja
write()
jest wywoływana przez aplikację User Space.write()
wywołania systemowego.bio struct
( patrz 1.4.3, „Warstwa bloku” na stronie 23 ) i przesyła żądanie zapisu do warstwy urządzenia blokowego.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ć zpdflush
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żejfree_pages_high
,kswapd
nic nie zrobi. Jeśli jednak liczba bezpłatnych stron spadnie poniżej,kswapd
rozpocznie się proces ponownego zapisywania strony. Pokswapd
zaznaczeniu stron do przeniesieniabdflush
zajmie się synchronizacją wszelkich zaległych zmian na nośniku pamięci, za pośrednictwempdflush
demonów.Referencje i dalsze odczyty
źródło