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_t | context; | |
}; |
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. |