1 一块虚拟内存空间用该结构来表示,然后所有的虚拟地址空间块构成了一个链表。并且形成了一个AVL树。便于查找。
2
3
4 Vm_area_struct 结构。
5
6 Typedef struct tag_vm_area_struct
7
8 {
9
10 Struct mm_struct* mm;
11
12
13 //决定了一个虚拟地址空间的Start和End
14
15 Unsigned long vm_start;
16
17 Unsigned long vm_end;
18
19
20 //该块空间的访问属性和其他属性
21
22 Pgprot_t vm_page_prot;
23
24 Unsigned long vm_flags;
25
26
27 //虚拟地址空间块的链表
28
29 Struct vm_area_struct * vm_next;
30
31
32 //虚拟地址空间块的AVL树
33
34 Short vm_avl_height;
35
36 Struct vm_area_struct * vm_avl_left;
37
38 Struct vm_area_struct * vm_avl_right;
39
40
41 Struct vm_operational_struct * vm_ops;
42
43
44
45 Struct vm_area_struct * vm_next_share;
46
47 Struct vm_area_struct * vm_pprev_share;
48
49
50
51 Unsigned long vm_pgoff;
52
53
54 Struct file * vm_file;
55
56
57 Unsigned long vm_raend;
58
59
60 Void * vm_private_data;
61
62
63 }vm_area_struct;
64
65
66
67
68 Mm_struct 结构
69
70
71 是进程整个用户空间的抽象。
72
73
74 Struct mm_struct
75
76 {
77
78 Struct vm_area_struct * mmap; //vm区域的链表头
79
80 Struct vm_area_struct * mmap_avl; //vm的avl树
81
82 Struct vm_area_struct * mmap_cache; //vm区域缓冲cache
83
84
85 Pgd_t * pgd; //页面目录表
86
87
88 Atomic_t mm_users;
89
90 Atomic_t mm_count;
91
92
93
94 //vm的个数
95
96 Int mapcount;
97
98
99 Struct semaphore mmap_sem;
100
101
102 Spinlock_t page_table_lock;
103
104
105 Stuct list_head mmlist;
106
107
108 Unsigned long start_code, end_code, start_data, end_data;
109
110
111 Unsigned long start_brk, brk, start_stack;
112
113
114 Unsigned long arg_start, arg_end, env_start, env_end;
115
116
117 Unsigned long rss, total_vm, locked_vm;
118
119 Unsigned long def_flags;
120
121 Unsigned long cpu_vm_mask;
122
123 Unsigned long swap_cnt;
124
125 Unsigned long swap_address;
126
127 Mm_context_t context;
128
129 };
130
2
3
4 Vm_area_struct 结构。
5
6 Typedef struct tag_vm_area_struct
7
8 {
9
10 Struct mm_struct* mm;
11
12
13 //决定了一个虚拟地址空间的Start和End
14
15 Unsigned long vm_start;
16
17 Unsigned long vm_end;
18
19
20 //该块空间的访问属性和其他属性
21
22 Pgprot_t vm_page_prot;
23
24 Unsigned long vm_flags;
25
26
27 //虚拟地址空间块的链表
28
29 Struct vm_area_struct * vm_next;
30
31
32 //虚拟地址空间块的AVL树
33
34 Short vm_avl_height;
35
36 Struct vm_area_struct * vm_avl_left;
37
38 Struct vm_area_struct * vm_avl_right;
39
40
41 Struct vm_operational_struct * vm_ops;
42
43
44
45 Struct vm_area_struct * vm_next_share;
46
47 Struct vm_area_struct * vm_pprev_share;
48
49
50
51 Unsigned long vm_pgoff;
52
53
54 Struct file * vm_file;
55
56
57 Unsigned long vm_raend;
58
59
60 Void * vm_private_data;
61
62
63 }vm_area_struct;
64
65
66
67
68 Mm_struct 结构
69
70
71 是进程整个用户空间的抽象。
72
73
74 Struct mm_struct
75
76 {
77
78 Struct vm_area_struct * mmap; //vm区域的链表头
79
80 Struct vm_area_struct * mmap_avl; //vm的avl树
81
82 Struct vm_area_struct * mmap_cache; //vm区域缓冲cache
83
84
85 Pgd_t * pgd; //页面目录表
86
87
88 Atomic_t mm_users;
89
90 Atomic_t mm_count;
91
92
93
94 //vm的个数
95
96 Int mapcount;
97
98
99 Struct semaphore mmap_sem;
100
101
102 Spinlock_t page_table_lock;
103
104
105 Stuct list_head mmlist;
106
107
108 Unsigned long start_code, end_code, start_data, end_data;
109
110
111 Unsigned long start_brk, brk, start_stack;
112
113
114 Unsigned long arg_start, arg_end, env_start, env_end;
115
116
117 Unsigned long rss, total_vm, locked_vm;
118
119 Unsigned long def_flags;
120
121 Unsigned long cpu_vm_mask;
122
123 Unsigned long swap_cnt;
124
125 Unsigned long swap_address;
126
127 Mm_context_t context;
128
129 };
130