next up previous contents
Next: Realizacja Up: Algorytm ``bliźniaków'' Previous: Struktury danych   Spis rzeczy

Przydział i zwolnienie pamięci - opis

Przydział pamięci realizowany jest przez funkcje:
unsigned long __get_free_pages(int gfp_mask, unsigned long order);
Jest również zestaw makr będących rodzajem nakładki na tą funkcję i ułatwiających jej wołanie w typowych przypadkach. Funkcja ta próbuje przydzielić $2^{order}$ bajtów. Maska gfp_mask określa sposób szukania wolnych ramek. Oto najważniejsze flagi:

Dotyczące stref przydziału:

__GFP_HIGHMEM
- strona z pamięci wyższej.
__GFP_DMA
- strona nadająca się do transferu DMA.

Dotyczące polityki przydziału:

__GFP_WAIT
- gdy ustawiona oznacza, że przy przydzieleniu pamięci jądro może próbować zwolnić pamięć przez obudzenie wątku kswapd. Wiąże się to oczywiście z przeszeregowaniem i w pewnych sytuacjach może być niewskazane (obsługa przerwania, modyfikacja istotnych struktur jądra).
__GFP_IO
- czy w celu realizacji żądania można zainicjować operację I/O w celu dokonania wymiany pewnych stron na dysk.
__GFP_HIGH
- żądanie najwyższego priorytetu (może uzyskać dostęp do ramek ``rezerwowych'').
Na ogół używa się pewnych predefiniowanych masek złożonych z tych flag. Najczęściej używane są:
GFP_ATOMIC = (__GFP_HIGH)
- nie zezwala na oczekiwanie i zmianę kontekstu. Używane w procedurach obsługi przerwań i przy modyfikacji krytycznych struktur danych.
GFP_KERNEL = (__GFP_HIGH | __GFP_WAIT | __GFP_IO | __GFP_FS)
- żądanie ze strony jądra z możliwością oczekiwania i zmiany kontekstu. Używane w większości wypadków gdy ścieżka wykonania procesu użytkownika jest w jądrze.

Analogicznie funkcje zwalniające przydzieloną wcześniej pamięć to:
void free_pages(unsigned long addr, unsigned long order);
void __free_pages(struct page *page, unsigned long order);

Oto jak obrazowo działa przydział i zwalnianie pamięci:

\includegraphics{pic/figBuddy2.eps}
Realizacja prośby o przydzielenie bloku 4 ramek
\includegraphics{pic/figBuddy3.eps}
Zwolnienie ramki o numerze 2


next up previous contents
Next: Realizacja Up: Algorytm ``bliźniaków'' Previous: Struktury danych   Spis rzeczy
Adam Koprowski 2001-12-18