Ta prezentacja dotyczy mechanizmów wykorzystywanych przez funkcje
kmalloc oraz kfree.
Operacje przydziału pamięci dla jądra występują dość często i muszą być w związku z tym wykonywane efektywnie.
Ogólna idea pamięci przydziału pamięci w jądrze opiera się na alokatorze płytowym. Pamięć jest fizycznie alokowana i inicjowana całymi płytami (ang. slab). Wówczas utworzenie i zwolnienie obiektu nie wymaga na ogół fizycznego przydziału pamięci, wystarczy użyć pamięci z płyty.
Zarządzając swoją pamięcią jądro używa trójpoziomowych struktur danych:
W obrębie jednego cache trzymane są dowiązanie do płyt z obiektami tego samego rozmiaru.
Do przydziału pamięci przez kmalloc używane jest 13 cache - każdy przeznaczony dla obiektów o rozmiarze będącym kolejną potęgą dwójki: 32B, 64B, 128B, 256B, ..., 128kB. W tym rozwiązaniu fragmentacja wewnętrzna nie przekracza nigdy 50%.
Płyty w obrębie jednego cache trzymane są na uporządkowanej liście:
Ważniejsze pola w strukturze kmem_cache_s:
c_namec_firstp, c_lastpc_freeps_nextp pierwszego deskryptora
płyty zawierającej przynajmniej jeden wolny obiekt
c_numc_gfporderc_nextpPłyta zarządza ciągłym obszarem pamięci, do którego można wrzucić pewną ilość obiektów o konkretnym rozmiarze j.w.
Ważniejsze pola w strukturze kmem_slab_s:
s_inuses_mems_freeps_nextp, s_prevpRysunek poniżej przedstawia powiązania pomiędzy cache'ami i płytami.
Deskryptory pomagają utrzymywać listę wolnych miejsc na płycie.
Deskryptory obiektów są trzymane w dwóch miejscach w zależności od rozmiaru obiektów przechowywanych na płycie.
Ważniejsze pola w strukturze kmem_bufctl_s:
buf_next_pbuf_slabpRysunki poniżej przedstawiają organizację deskryptorów obiektów w zależności od rozmiaru obiektów przechowywanych na płycie.
Na systemach wieloprocesorowych każdy cache ma krótką tablicę dla poszczególnych procesorów. Większość żądań przydziału i zwalniania pamięci może być obsłużona przy pomocy tej tablicy. Wymiana pomiędzy globalną cache i tą tablicą występuje tylko kiedy tablica się przepełni. W ten sposób ograniczona jest liczba operacji spin-lock (operacji na semaforach).
Przedstawiłem:
kmalloc oraz
kfree
Prezentację można pobrać ze strony http://rainbow.mimuw.edu.pl/~la181249/university/so/kmalloc_and_kfree.html