System operacyjny musi kontrolować stan poszczególnych ramek w systemie. Służy do tego tablica mem_map zawierająca po jednym wpisie typu page dla każdej ramki fizycznej.
Struktura opisu ramki:
struct page { // struktura opisująca jedną ramkę w systemie struct list_head list; struct address_space* mapping; unsigned long index; struct page* next_hash; atomic_t count; // 0 - ramka wolna, >0 - ilość odwołań unsigned long flags; // flagi opisujące ramkę struct list_head lru; unsigned long age; wait_queue_head_t wait; // kolejka czekających na I/O na ramce struct page** pprev_hash; struct buffer_head* buffers; void* virtual; struct zone_struct* zone; // strefa, z której pochodzi ramka } mem_map_t; mem_map_t* mem_map; // alokowana pamięć na tyle struktur typu // mem_map_t ile ramek w systemie.
Ważniejsze flagi (pole flags):
Tablica mem_map inicjowana jest przy starcie systemu przez funkcję free_area_init.
Użyteczne makro MAP_NR(addr) wylicza numer ramki (indeks w tablicy mem_map) o adresie addr.