nextupprevious
Next:Proces czyszczący schowekUp:Poprawa wydajności systemu NFSPrevious:Struktura schowka

Implementacja obsługi schowka w przestrzeni jądra

Do jądra systemu dołożyłem moduł11 obsługujący schowek dyskowy. Komunikuje się on tylko z modułem NFS i procesem oczyszczającym schowek. Umiejscowiene modułu schowka w przestrzeniu jądra obrazuje rysunek 8.
\resizebox* {0.4\columnwidth}{!}{\includegraphics{struktura.ps}}
Rysunek: Umiejscowienie modułu schowka w przestrzeni jądra
Obsługa plików NFS w standardowym systemie Linux wymaga wywołania funkcji z kolejnych trzech poziomów systemu operacyjnego. Funkcja read jest najpierw obsługiwana w wirtualnej przestrzeni plików (VFS). Stąd wywoływane są funkcje poziomu NFS, który z kolei korzysta z poziomu obsługującego protokół RPC. Ostatecznie, przy wykorzystaniu RPC, następuje komunikacja z serwerem, w wyniku której, system operacyjny otrzymuje żądane bloki danych.

Aby obsłużyć żądanie wykorzystując schowek, musi zostać przerwana komunikacja między warstwami NFS i RPC. Przerwana zostaje systemowa funkcja nfs_readpage po to by spróbować obsłużyć ją wykorzystując schowek. W momencie przerywania funkcji nfs_readpage jesteśmy w jednym z trzech stanów:

Zastosowanie schowka nie spowoduje więc odwołania do nieaktualnych danych.

W przypadku nieznalezienia danych w lokalnym schowku, do serwera zostaje wysłane żądanie przesłania danych do klienta. Aby otrzymane dane umieścić w schowku, znów zostaje przerwana komunikacja między warstwą RPC a NFS. Dane od serwera mogą być otrzymane synrchronicznie lub asynchronicznie. W pierwszym przypadku trzeba przerwać wykonywanie funkcji nfs_readpage_sync, w drugim funkcję nfs_readpage_result, po to by umieścić w schowku świeżo odczytaną stronę danych. Plik cacheInfo określa miękki i twardy limit schowka. Jeżeli próba umieszczenie nowej strony w schowku spowoduje:

Po dołożeniu nowej strony do schowka, jądro zwiększa pozycję w pliku cacheInfo określającą ilość danych w schowku.

Rysunek 10 przedstawia sekwencje operacji wykonanych po wywołaniu funkcji read.

\resizebox* {0.7\columnwidth}{!}{\includegraphics{diagram.ps}}
Rysunek: Sekwencja operacji wykonana po wywołaniu funkcji read
Niewielkiej modyfikacji ulegają struktury jądra. Do i-węzła opisującego zdalny pliku systemu NFS, dodano wskaźnik wskazujący na strukture file pliku znajdującego się w schowku. Dzięki temu mając i-węzeł zdalnego pliku szybko dostajemy się do odpowiadającego mu pliku w schowku. Do struktury super_block systemu NFS dodano trzy pozycje: nazwę katalogu określającego położenie schowka, wskaźnik do struktury file pliku cacheInfo i wskaźnik do structury file pliku nfsCacheFull. Powyższe modyfikacje są zgodne ze standardem systmu Linux, gdyż zmieniają te części struktór, z których korzystają tylko i wyłącznie funkcje systemu NFS.


nextupprevious
Next:Proces czyszczący schowekUp:Poprawa wydajności systemu NFSPrevious:Struktura schowka
root

2000-08-18