[OSy] vma_merge

Petr Tuma petr.tuma at dsrg.mff.cuni.cz
Sat Jan 12 14:02:42 CET 2008


Dobry den,

> Implementace typu, ze souvisy blok virtualni pameti ma souvislou
> fyzickou pamet. Pokud pak dostanu k mergovani dva sousedici virtualni
> bloky, kde kazdy ale ukazuje do jine casti fyzicke pameti, musi prijit
> na radu ono kopirovani do noveho souvisleho bloku fyzicke pameti.

Pravda, tohle usporadani je z hlediska rozsireneho zadani dost nevhodne. 
Nejen ze se spatne dela vma_merge, ale treba vma_resize pak nefunguje 
dobre s rozhranim frame alokatoru a obcas musi kopirovat data ...

Za techto okolnosti me nenapada zadna rozumne elegantni cesta jak 
implementovat vma_merge. Na vasem miste bych se asi snazil upravit 
spravce pameti tak, aby bloky virtualni pameti nemusely odpovidat 
souvisle fyzicke pameti (ostatne by to nemuselo vyjit tak slozite, pokud 
mate nejaky seznam bloku virtualni pameti a v kazdem jednu adresu 
zacatku fyzicke pameti, pak by slo treba z te jedne adresy udelat pole - 
v TLB handleru se pak neco ve stylu "entry = area->physical_base + 
offset" zmeni na "entry = area->physical_mapping [offset / page_size]" a 
to by mohlo byt vse - sice porad bude moznost, ze vma_merge bude 
potrebovat skoncit s ENOMEM, kdyz mu nepujdou spojit ta pole, ale 
celkova pametova narocnost uz nebude tak hrozna jako pri vasem 
stavajicim reseni).

V krajnim pripade bych asi zvolil upravu testu tak, aby toto konkretni 
chovani vma_merge nebylo na zavadu, napsal k tomu nejake vysvetleni a 
soustredil se na jine casti zadani s vedomim, ze zrovna tato nebude 
nejsilnejsi.

Petr Tuma





More information about the NSWI004 mailing list