<<<<<<<<<<           >>>>>>>>>>

Struktury danych - zone_list_struct

 
 
 
 
 
 
 
 
 

Struktura zawiera jedynie tablicę wskaźników do stref pamięci. Dzięki takiej strukturze można łatwiej zaprogramować alokację ramek. Przypuśćmy, że chcemy zamówić ramkę z pamięci dostępnej dla DMA lub normalnej (ale nie wysokiej). Wtedy funkcja alokująca pamięć dostaje strukturę zone_list_struct. Pierwszym elementem tablicy zones będzie wskaźnik do strefy pamięci normalnej (bo najpierw spróbujemy zaalokować blok pamięci normalnej, jako że pamięć DMA jest cenniejsza), drugim do strefy pamięci DMA, a trzecim zero. Procedura alokująca pamięć przegląda kolejne elementy tablicy i próbuje zaalokować blok żądanego rozmiaru ze strefy wskazywanej przez aktualny element tablicy. Kończy, gdy uda jej się zaalokować pamięć (i wtedy zwraca zaalokowany obszar) lub gdy dojdzie do wskaźnika zerowego (i wtedy zwraca błąd - brak wolnych ramek).

Skoro są tylko 3 strefy pamięci, a w tablicy zones są różne wskaźniki do stref (w dowolnych kolejnościach), to łatwo policzyć, że różnych struktur zone_list_struct jest 16. Można zatem utworzyć statyczną tablicę wszystkich możliwych struktur zone_list_struct . Rodzaj zamówienia byłby indeksem do tablicy tych struktur. Tak właśnie jest w jądrze 2.4.7.

Rozwiązanie korzystające z zone_list_struct jest bardzo eleganckie, gdyż dodanie nowej strefy pamięci nie wymaga zmiany procedur alokujących i zwalniających ramki.