linux内存描述符,Linux之内存描述符mm_struct

1 structmm_struct {2 struct vm_area_struct * mmap; //指向虚拟区间(VMA)的链表

3 struct rb_root mm_rb; //指向线性区对象红黑树的根

4 struct vm_area_struct * mmap_cache; //指向最近找到的虚拟区间

5 unsigned long(*get_unmapped_area) (struct file *filp,6 unsigned long addr, unsigned longlen,7 unsigned long pgoff, unsigned long flags);//在进程地址空间中搜索有效线性地址区

8 unsigned long(*get_unmapped_exec_area) (struct file *filp,9 unsigned long addr, unsigned longlen,10 unsigned long pgoff, unsigned longflags);11 void(*unmap_area) (struct mm_struct *mm, unsigned long addr);//释放线性地址区间时调用的方法

12 unsigned long mmap_base; /*base of mmap area*/

13 unsigned long task_size; /*size of task vm space*/

14

15 unsigned longcached_hole_size;16 unsigned long free_area_cache; //内核从这个地址开始搜索进程地址空间中线性地址的空闲区域

17 pgd_t * pgd; //指向页全局目录

18 atomic_t mm_users; //次使用计数器,使用这块空间的个数

19 atomic_t mm_count; //主使用计数器

20 int map_count; //线性的个数

21 struct rw_semaphore mmap_sem; //线性区的读/写信号量

22 spinlock_t page_table_lock; //线性区的自旋锁和页表的自旋锁

23

24 struct list_head mmlist; //指向内存描述符链表中的相邻元素

25

26 /*Special counters, in some configurations protected by the27 * page_table_lock, in other configurations by being atomic.28 */

29 mm_counter_t _file_rss; //mm_counter_t代表的类型实际是typedef atomic_long_t

30 mm_counter_t _anon_rss;31 mm_counter_t _swap_usage;32

33 unsigned long hiwater_rss; //进程所拥有的最大页框数

34 unsigned long hiwater_vm; //进程线性区中最大页数

35

36 unsigned longtotal_vm, locked_vm, shared_vm, exec_vm;37 //total_vm 进程地址空间的大小(页数)38 //locked_vm 锁住而不能换出的页的个数39 //shared_vm 共享文件内存映射中的页数

40

41 unsigned longstack_vm, reserved_vm, def_flags, nr_ptes;42 //stack_vm 用户堆栈中的页数43 //reserved_vm 在保留区中的页数或者在特殊线性区中的页数44 //def_flags 线性区默认的访问标志45 //nr_ptes 进程的页表数

46

47 unsigned longstart_code, end_code, start_data, end_data;48 //start_code 可执行代码的起始地址49 //end_code 可执行代码的最后地址50 //start_data已初始化数据的起始地址51 //end_data已初始化数据的最后地址

52

53 unsigned longstart_brk, brk, start_stack;54 //start_stack堆的起始位置55 //brk堆的当前的最后地址56 //用户堆栈的起始地址

57

58 unsigned longarg_start, arg_end, env_start, env_end;59 //arg_start 命令行参数的起始地址60 //arg_end命令行参数的起始地址61 //env_start环境变量的起始地址62 //env_end环境变量的最后地址

63

64 unsigned long saved_auxv[AT_VECTOR_SIZE]; /*for /proc/PID/auxv*/

65

66 struct linux_binfmt *binfmt;67

68 cpumask_t cpu_vm_mask; //用于惰性TLB交换的位掩码

69 /*Architecture-specific MM context*/

70 mm_context_t context; //指向有关特定结构体系信息的表

71

72

73 unsigned intfaultstamp;74 unsigned inttoken_priority;75 unsigned intlast_interval;76

77 unsigned long flags; /*Must use atomic bitops to access the bits*/

78

79 struct core_state *core_state; /*coredumping support*/

80 #ifdef CONFIG_AIO81 spinlock_t ioctx_lock; //用于保护异步I/O上下文链表的锁

82 struct hlist_head ioctx_list;//异步I/O上下文

83 #endif

84 #ifdef CONFIG_MM_OWNER85 struct task_struct *owner;86 #endif

87

88 #ifdef CONFIG_PROC_FS89 unsigned longnum_exe_file_vmas;90 #endif

91 #ifdef CONFIG_MMU_NOTIFIER92 struct mmu_notifier_mm *mmu_notifier_mm;93 #endif

94 #ifdef CONFIG_TRANSPARENT_HUGEPAGE95 pgtable_t pmd_huge_pte; /*protected by page_table_lock*/

96 #endif

97 #ifdef __GENKSYMS__98 unsigned long rh_reserved[2];99 #else

100 //有多少任务分享这个mm OOM_DISABLE

101 union {102 unsigned longrh_reserved_aux;103 atomic_t oom_disable_count;104 };105

106 /*base of lib map area (ASCII armour)*/

107 unsigned longshlib_base;108 #endif

109 };

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值