Documente Academic
Documente Profesional
Documente Cultură
Gestiunea memoriei
Fiecare nod
are procesorul propriu
are zone de memorie proprii: DMA, NORMAL, HIGHMEM
Alocarea de pagini
alloc_pages(gfp_mask, order)
Algoritmul buddy
Sunt folosite 11 liste pentru blocuri de 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024
PAGINI
Fiecare zon de memorie are alocatorul buddy propriu
Fiecare zona are asociat un vector de descriptori de blocuri libere, cte o intrare
pentru fiecare dimensiune de bloc
Descriptorul de blocuri libere conine numrul de pagini libere i capul listei de blocuri
libere
Blocurile sunt nlnuite cu ajutorul cmpului lru din descriptorul de pagini
Paginile libere folosite de buddy au flagul PG_buddy setat
Descriptorul de pagina menine dimensiunea blocului n cmpul private pentru a
putea face uor verificrile necesare pentru coagularea a dou blocuri libere ce sunt
adiacente
Alocatorul slab
De ce slab?
Kernelul tinde s aloce/dealoce succesiv acelai tip de structuri de date (de exemplu
PCB-uri); folosirea cache-ului din slab reduce frecvena operatiilor (mai costisitoare)
de alocare/dealocare
Multe cereri de alocare frecvente folosesc aceeai dimensiune pentru fiecare alocare:
pentru aceste tipuri se pot crea zone speciale, care s conin blocuri de dimensiunea
dorit => se reduce astfel fragmentarea interna
Pentru cereri ce nu folosesc aceai dimensiune la alocare (mult mai puin frecvente)
se poate folosi n continuare abordarea geometric (i cache)
Reduce foot-print-ul pentru alocare/dealocare pentru c nu se mai caut pagini libere
ci sunt luate direct din cache-uri (cache-urile de obiecte sunt concentrate ntr-o zon
de memorie i sunt mult mai mici dect structurile folosite de buddy)
Distribuie obiectele n memorie astfel nct s acopere uniform liniile de cache
Descriptorii de cache
Descriptorii de slab
Descriptorii de obiecte
Descriptorii de obiecte
Colorarea slab-ului
Descriptor
spaiu de adres
Descriptor
zon
Descriptor
zon
Descriptor
zon
Descriptor
zon
Descriptor
zon
Descriptor
zon
Tabela
de
pagini
n kernel-space
pentru apeluri vmalloc
descriptorul de zon: struct vm_struct
descriptorul spaiului de adres: list simplu nlnuit de descriptori
de zon
n user-space
descriptorul de zon: struct vm_area_struct
descriptorul spaiului de adres: arbore red-black
kswapd
kernel thread care evacueaz paginile
este activat atunci cnd numrul de pagini libere scade sub o limit
ntrebri