next up previous contents
Next: Namei Up: Obsługa pamięci podręcznej pozycji Previous: Struktury odpowiedzialne za katalogi   Spis rzeczy

Sposób obsługiwania

Te struktury są przechowywane jak wspomniano w pamięci, w pewnej ilości list, która w której - o tym decyduje funkcja mieszająca. Obsługa tych list mieszających odbywa się m.in. za pomocą poniższych funkcji:

d_add
dodaje strukturę dentry do listy, zaś ...
d_delete
... ją stamtąd usuwa
d_get
zwiększa licznik ilości procesów korzystający z tego katalogu, zaś ...
d_put
zmniejsza. Nie jest to jednak tak proste jakby się wydawało, ponieważ trzeba odpowiednio obsłużyć przypadek gdy nikt inny już nie korzysta z danego dentry, wtedy albo zwalniamy tę strukturę, albo przenosimy do specjalnej kolejki dentry_unused., gdyż dane są przechowywane w pamięci podręcznej tak długo, dopóki związany z nimi obiekt (i-węzeł lub blok) jest używany - gdy plik jest zamykany lub blok jest kasowany to związane z nim dane mogą zostać usunięte z pamięci podręcznej i zapisane z powrotem na dysk.
d_lookup
szuka struktury dentry odpowiadającej danej nazwie i katalogowi nadrzędnemu

Chcąc zanalizować problem bardziej wnikliwie, możemy powiedzieć, że ta pamięć podręczna pozycji katalogów składa się z dwóch rodzajów struktur danych:

Pamięć podręczna pozycji katalogów działa także jako kontroler pamięci podręcznej i-węzłów. I-węzły, znajdujące się w pamięci jądra i związane z nieuzywanymi pozycjami katalogu, nie są wyrzucane, ponieważ pamięć podręczna pozycji katalogów cały czas ich używa, a więc ich pola i_count mają wartość niezerową. Tak więc obiekty i-węzłów są przechowywane w pamięci RAM i można z nich szybko skorzystać za pomocą odpowiednich pozycji katalogów.

Wszystkie ,,nie używane'' pozycje katalogów znajdują się na dwustronnie połączonej liście Last Recently Used, posortowanej według czasu wstawienia. Gdy zachodzi potrzeba zmniejszenia pamięci podręcznej pozycji katalogów, jądro usuwa elementy z końca listy, dzięki czemu zachowywane są ostatnio używane obiekty. Trzeba jeszcze wyjaśnić co to są pozycje katalogowe ,,ujemne''. Obiekt pozycji katalogu może stać się ujemny gdy zostanie skasowane ostatnie sztywne dowiązanie odpowiedniego pliku.

Tablica haszująca jest zrealizowana za pomocą tablicy dentry_hashtable. Każdy element jest wskaźnikiem do listy pozycji katalogów, dla których funkcja haszująca zwraca tę samą wartość. Wielkość tej tablicy zależy od ilości pamięci RAM. Pole d_hash obiektu pozycji katalogu zawiera wskaźniki do elementów sąsiadujących na liście elementów o tej samej wartości funkcji haszującej, która zwraca odpowiednią wartość na podstawie adresu obiektu pozycji katalogu i nazwy pliku.

Metody związane z obiektem pozycji katalogu są pisywane przez strukturę dentry_operations, której adres jest przechowywany w polu d_op. Oto i one:

d_revalidate
sprawdza poprawność obiektu pozycji katalogu przed wykorzystaniem go przy tłumaczeniu ścieżki dostępu do pliku
d_hash
funkcja haszująca
d_compare
porównuje dwie nazwy plików w danym katalogu
d_delete
wywoływana przy usuwaniu ostatniego odniesienia do obiektu pozycji katalogu (d_count staje się 0)
d_release
wywoływana, gdy obiekt pozycji katalogu ma zostać przekazany do tzw. alokatora płytowego
d_iput
wywoływana, gdy obiekt pozycji katalogu staje się ujemny, czyli traci swój i-węzeł


next up previous contents
Next: Namei Up: Obsługa pamięci podręcznej pozycji Previous: Struktury odpowiedzialne za katalogi   Spis rzeczy
2001-12-19