Wnioski

Wyniki eksperymentów prowadzą do kilku wniosków.

Zastosowanie drzew AVL, zgodnie z przewidywaniami, przyspieszyło działanie systemu w porównaniu z algorytmem działającym na listach. Świadczy o tym czas wykonania dla programu map oraz liczby odwiedzonych węzłów dla wszystkich testowanych programów. Z drugiej strony przyspieszenie w typowych aplikacjach jest nieodczuwalne i praktycznie niemożliwe do zaobserwowania.

Sama implementacja drzew AVL przysporzyła autorom Linuksa wielu problemów -- kod osadzony w jądrze trudno się testuje, a każdy błąd pociąga za sobą z reguły konieczność restartowania komputera.16.12

W komentarzach umieszczonych w kodzie jądra, o czym wspomniano we wstępie, znajduje się informacja, iż można spotkać programy, które korzystają nawet z kilku tysięcy obszarów w swojej przestrzeni adresowej. Jednakże wśród dostępnych aplikacji nie udało się znaleźć takich, które przekroczyłyby 100 obszarów i jednocześnie często wymuszały wywołania funkcji find_vma().

Stosowanie innych struktur danych i związanych z nimi algorytmów wyszukiwania do odnajdowania obszarów w przestrzeni użytkownika nie usprawni działania systemu, skoro różnice dla algorytmów O(n) i O(log n) są tak niewielkie (dla wartości n spotykanych w zwykłych programach).

Już podczas pisania pracy pojawiła się nowa wersja jądra Linuksa (2.2.0 i dalsze). W wersji tej zrezygnowano z drzew AVL na rzecz listy z buforem. Kod jądra uprościł się znacznie (np. plik mmap.c jest o około 300 wierszy krótszy niż w wersji 2.0.35), natomiast, jak można wnioskować z uzyskanych tu wyników, czas wykonania większości programów wydłużył się niewiele.
 


Tomek Blaszczyk

1999-05-21