Opis struktury mm_struct

struct mm_struct {
struct vm_area_struct *mmap;
struct vm_area_struct *mmap_avl;
struct vm_area_struct *mmap_cache;
pgd_t *pgd;
atomic_t mm_users;
atomic_t mm_count;
int map_count;
struct rw_semaphore mmap_sem;
spinlock_t page_table_lock;
struct list_head mmlist;
unsigned long start_code;
unsigned long end_code;
unsigned long start_data
unsigned long end_data;
unsigned long start_brk;
unsigned long brk;
unsigned long start_stack;
unsigned long arg_start;
unsigned long arg_end;
unsigned long env_start;
unsigned long env_end;
unsigned long rss;
unsigned long total_vm;
unsigned long locked_vm;
unsigned long def_flags;
unsigned long cpu_vm_mask;
unsigned long swap_address;
unsigned dumpable:1;
mm_context_tcontext;
};

Znaczenie pól:

*mmap wskaźnik na listę obszarów pamięci wirtualnej.
*mmap_avl wskaźnik na korzeń drzewa AVL z obszarami pamięci wirtualnej.
*mmap_cache wskaźnik na ostatnio znaleziony obszar pamięci wirtualnej. Używane tylko przy wyszukiwaniu pasującego VMA do danego adresu. W około 35% przypadków jest tu poszukiwany wskaźnik.
*pgd wskaźnik do głównego katalogu stron.
mm_users ilość współużytkowników tej struktury.
mm_count ilość odwołań do struktury.
map_count ilość przydzielonych obszarów pamięci wirtualnej.
mmap_sem semafor ...
page_table_lock  ... i blokada wirująca do ochrony dostępu do struktury.
mmlist pole przez które mm_struct jest dołączany do globalnej listy aktywnych zarządców pamięci (ang. memory manager).
start_code adres początku segmentu kodu.
end_code adres końca segmentu kodu.
start_data adres początku segmentu danych.
end_data adres końca segmentu danych.
start_brk adres początku segmentu na dane niezainicjalizowane.
brk aktualna pozycja końca segmentu danych niezainicjalizowanych.
start_stack adres początku stosu, a raczej jego spodu, wierzchołek zawsze jest w rejestrze ESP.
arg_start adres początku segmentu zawierającego parametry wywołania.
arg_end adres końca segmentu zawierającego parametry wywołania.
env_start adres początku segmentu zmiennych środowiskowych.
env_end adres końca segmentu zmiennych środowiskowych.
rss liczba ramek procesu.
total_vm liczba stron procesu.
locked_vm liczba zablokowanych stron procesu.
def_flags różne flagi (takie jak przy vm_area_struct).
cpu_vm_mask maski procesora.
swap_address zmienna ta pokazuje na wirtualny adres z pod którego należy zacząć wyrzucać pamięć procesu podczas wymiany. Początkowo ustawiona jest na zero. Zwiększana jest o rozmiar strony po każdej wymianie strony z przestrzeni adresowej procesu. Gdy podczas jednej wymiany zostaną wymienione wszystkie strony procesu, to zmienna jest zerowana, wpp. trzyma adres od którego należy zacząć wymianę przy następnym podejściu.
dumpable:1 flaga informująca o tym czy pamięć może być zrzucana.
context aktualny kontekst procesu.


Tomasz Szymko 27 listopada 2001