struct mm_struct {
struct vm_area_struct
*
mmap;
/
*
list
of VMAs
*
/
struct rb_root mm_rb;
struct vm_area_struct
*
mmap_cache;
/
*
last find_vma result
*
/
unsigned
long
(
*
get_unmapped_area) (struct
file
*
filp,
unsigned
long
addr, unsigned
long
len
,
unsigned
long
pgoff, unsigned
long
flags);
void (
*
unmap_area) (struct mm_struct
*
mm, unsigned
long
addr);
unsigned
long
mmap_base;
/
*
base of mmap area
*
/
unsigned
long
mmap_legacy_base;
/
*
base of mmap area
in
bottom
-
up allocations
*
/
unsigned
long
task_size;
/
*
size of task vm space
*
/
unsigned
long
cached_hole_size;
/
*
if
non
-
zero, the largest hole below free_area_cache
*
/
unsigned
long
free_area_cache;
/
*
first hole of size cached_hole_size
or
larger
*
/
unsigned
long
highest_vm_end;
/
*
highest vma end address
*
/
pgd_t
*
pgd;
atomic_t mm_users;
/
*
How many users with user space?
*
/
atomic_t mm_count;
/
*
How many references to
"struct mm_struct"
(users count as
1
)
*
/
int
map_count;
/
*
number of VMAs
*
/
spinlock_t page_table_lock;
/
*
Protects page tables
and
some counters
*
/
struct rw_semaphore mmap_sem;
struct list_head mmlist;
/
*
List
of maybe swapped mm's. These are globally strung
*
together off init_mm.mmlist,
and
are protected
*
by mmlist_lock
*
/
unsigned
long
hiwater_rss;
/
*
High
-
watermark of RSS usage
*
/
unsigned
long
hiwater_vm;
/
*
High
-
water virtual memory usage
*
/
unsigned
long
total_vm;
/
*
Total pages mapped
*
/
unsigned
long
locked_vm;
/
*
Pages that have PG_mlocked
set
*
/
unsigned
long
pinned_vm;
/
*
Refcount permanently increased
*
/
unsigned
long
shared_vm;
/
*
Shared pages (files)
*
/
unsigned
long
exec_vm;
/
*
VM_EXEC & ~VM_WRITE
*
/
unsigned
long
stack_vm;
/
*
VM_GROWSUP
/
DOWN
*
/
unsigned
long
def_flags;
unsigned
long
nr_ptes;
/
*
Page table pages
*
/
unsigned
long
start_code, end_code, start_data, end_data;
unsigned
long
start_brk, brk, start_stack;
unsigned
long
arg_start, arg_end, env_start, env_end;
unsigned
long
saved_auxv[AT_VECTOR_SIZE];
/
*
for
/
proc
/
PID
/
auxv
*
/