Oto podstawowe struktury używane do obsługi systemu bliźniaków:
#define MAXORDER 10
struct free_area_t { // bloki ramek o ustalonym rozmiarze
struct list_head free_list; // lista wolnych obszarów o danym rozmiarze
unsigned long* map; // mapa stanu `bliźniaków'
}
struct zone_t { // opis strefy
(...)
unsigned long pages_min, // progi ilości wolnych stron
pages_low,
pages_high;
free_area_t frea_area[MAXORDER]; // bloki o różnych rozmiarach
(...)
}
Aby sprawnie obsługiwać żądania przydziału i zwolnienia pamięci dla każdej grupy przechowywana jest mapa stanu bliźniaków (pole map ze struktury free_area_t). Dla każdych dwóch kolejnych bloków potrzebny jest 1 bit w tej mapie. Gdy jest on równy 0 oznacza to, że albo oba bloki są wolne, albo oba zajęte. Dzięki temu przy dealokacji pamięci wiemy czy nasz `brat bliźniak' jest wolny. Myślę, że lepiej wyjaśni to ilustracja:

