Next: Przykład
Up: Algorytm Buddy
Previous: Wyjście
- przeszukaj listę zawierającą wolne bloki pamięci wielkości (czyli
k-ty element tablicy).
- jeśli znaleziony został wolny spójny blok pamięci to :
- (*) jeśli rozmiar bloku jest taki jak zamówienie - przydzielamy go,
wyrzucamy z listy wolnych, odświeżamy mapę bitową - zwracamy zaalokowany fragment
- jeśli rozmiar bloku jest większy od zamówienia - wyrzucamy go z
listy wolnych, dzielimy blok na dwie połówki (bliźniaków) jedna z nich
staje się wolnym blokiem o mniejszym rozmiarze (dodajemy ją na początek listy, aktualizujemy mapę bitową)
i zaczynamy zajmować się drugą połówką tak jakby był to dopiero co znaleziony blok pamięci
(skaczemy do (*))
- jeśli nie ma wolnego bloku tej wielkości to :
- jeśli k osiągnęło już maksymalną wartość (MAX_ORDER
2)
to kończymy - nie ma wystrczająco dużo wolnej pamięci
- wpp. zwiększamy k i zaczynamy zabawę od początku
Kuba Gorski
2001-12-12