Przykładowa implementacja
Blokowanie plików w NFS4
Ponieważ protokół NFS3 był bezstanowy, niezbędne było zastosowanie dodatkowego
protokołu --
NLM (z ang.
Network Lock Manager) -- zapewniającego
wsparcie dla blokowania plików zamontowanych poprzez NFS.
Najnowsza wersja protokołu wspiera blokowanie konkretnych fragmentów plików.
Implementacja blokowania plików bezpośrednio w protokole wykluczyła możliwość
jego zupełnej bezstanowości. Jednak jasne założenia twórców dotyczące tego
mechanizmu umożliwiają sprawne zarządzanie blokadami. Są to:
- jasny podział pomiędzy klientem i serwerem,
- zapewnienie zdolności do wykrycia niespójności pomiędzy klientem
i serwerem,
- prosty i dość odporny na awarie mechanizm.
Stanem blokad założonych na pliki zarządza serwer. Klient przesyła do niego
odpowiednie informacje tylko wtedy, gdy są one niezbędne. Potrafi ponadto
wykryć niespójności pomiędzy własnymi informacjami a informacjami
przechowywanymi przez serwer.
Mechanizm blokad jest oparty na modelu dzierżaw
-- z ang.
lease-based model i działa na następującej zasadzie:
- serwer definiuje pewien okres dzierżawy (z ang. single lease
period) dla wszystkich przechowywanych stanów;
- jeśli klient nie odświeży swoich dzierżaw w zadanym okresie, wszystkie
dane z nim związane zostaną zwolnione z serwera;
- klient może odświeżyć w./wym. dane używając operacji renew
lub implicite -- poprzez inne operacje (głównie read).
Podstawowym założeniem dla tego mechanizmu jest fakt, że operacja blokowania
plików jest wykonywana bardzo rzadko w porównaniu z np. operacjami
read oraz
write. Ponadto zakłada się, że awarie systemu
i sieci nie są częste.
Bardzo ważne jest, aby operacje
read oraz
write były
lekkie, lecz jednocześnie zawierały informacje o blokadzie założonej
na daną część pliku. Z drugiej strony żądanie założenia blokady
na plik musi zawierać odpowiednio wiele informacji, by serwer mógł ją
stworzyć, a następnie efektywnie nią zarządzać (to wyjaśnia powyższe
założenia).
Pojawiające się problemy:
- ,,lekkość'' operacji pisania i czytania,
- szeregowanie żądań dotyczących operacji na plikach z aktywnymi blokadami,
- przechowywanie informacji o założonych blokadach,
- blokujące operacje,
- odtwarzanie po awarii: