Next: Struktury danych
Up: Alokator płytowy
Previous: Rozwiązanie
  Spis rzeczy
Oto kilka rzeczy, które o działaniu alokatora płytowego warto wiedzieć:
- Alokator płytowy do przydziału pamięci na swoje potrzeby odwołuje
się do systemu bliźniaków.
- Pamięci podręczne podzielone są na ogólne i szczególne.
- Pamięci podręczne ogólne podzielone są na 13 rozmiarów rozłożonych
geometrycznie. Tak więc dostępne są obiekty o rozmiarach dla
bajtów (co daje obszary od 32 do 131072 bajtów). Poza tym do
pamięci podręcznych ogólnych zaliczamy pamięci podręcznej przechowujące
deskryptory wszystkich innych używanych pamięci podręcznych
(cache_cache) i pamięć na deskryptory płyt występujące poza płytami
(o tym zaraz).
- Pamięci podręczne szczególne tworzone są przez jądro i przechowują
obiekty pewnego konkretnego przeznaczenia. Na przykład pamięć podręczna sock
przechowująca obiekty zawierające informacje o gniazdach (ang. socket), albo
files_cache - informacje o otwartych plikach.
- Aby dowiedzieć się o pamięciach podręcznych obecnie używanych w
systemie, wraz z pewnymi informacjami o ich użyciu warto zajrzeć do:
/proc/slabinfo.
- Każda pamięć podręczna ma swój deskryptor; podobnie każda płyta i
każdy obiekt w płycie.
- Deskryptory mogą znajdować się, albo w płycie, albo też poza nią.
Jednak albo deskryptor płyty i deskryptory obiektów są umieszczane w płycie, albo
zarówno jedne jak i drugie poza nią. W obecnej wersji algorytm decydujący o
rozmiarze płyty i tym gdzie umieścić deskryptory jest dość prosty2 - dla obiektów
mniejszych od 512 bajtów przyjmowane jest przechowywanie deskryptorów w
płycie; następnie jako ilość
ramek tworzących płytę wybierana jest najmniejsza potęga 2, tak by zmieścił
się choć jeden obiekt w płycie i by pamięć nie zajęta na obiekty i
deskryptory w płycie nie przekroczyła 1/8 rozmiaru płyty (najczęściej będzie to po prostu 1); wreszcie
jeśli dla obiektów o rozmiarze bajtów deskryptory zmieszczą się
bezpośrednio w płycie to są w niej umieszczane.
- Płyty wewnątrz pamięci podręcznej są uporządkowane w ten sposób, że
na początku są płyty całkowicie zajęte, później częściowo zajęte, a na końcu
całkowicie wolne.
- Można zażądać by obiekty w pamięci były wyrównywane, to znaczy
przechowywane tylko w adresach fizycznych podzielnych przez podaną wartość.
Stosowane jest głównie wyrównywanie do granicy słowa maszynowego.
- Stosuje się dodatkowo zabieg tzw. kolorowania płyt. Polega on na
tym, że w pewnych sytuacjach na końcu płyt pozostaje trochę wolnego miejsca
(jeśli rozmiar obiektów nie pasuje dobrze do rozmiaru ramki). Kolejne płyty
otrzymują wtedy różne kolory, tzn. różna część tego obszaru jest przenoszona
z końca na początek płyty co zmienia położenie obiektów w płycie. Zabieg ten
ma na celu zwiększenie prawdopodobieństwa, że pamięć podręczna procesora
będzie równomiernie wykorzystywana.
- Z każdą pamięcią podręczną związany jest konstruktor i destruktor
obiektów3, które wołane są odpowiednio przy alokacji i
dealokacji obiektów. Jądro praktycznie nie wykorzystuje tego mechanizmu
(choćby ze względów wydajnościowych), jednak w pełni go wspiera.
Next: Struktury danych
Up: Alokator płytowy
Previous: Rozwiązanie
  Spis rzeczy
Adam Koprowski
2001-12-18