感谢支持
我们一直在努力

Linux内存描述符mm_struct初窥

上次讲了Linux进程描述符(http://www.linuxidc.com/Linux/2012-02/53702.htm),这次我们在讲讲内存描述符,Linux的内存描述符也用一个结构体来表示,具体是mm_struct结构体,在linux/mm_types.h里定义。Linux操作系统就是用这个结构体实现内存的管理,我们先看一下具体的字段情况。



  1. struct mm_struct {  

  2.   //拥有该结构体的进程的虚拟地址空间的大小  

  3.  unsigned long task_size;    

  4.  /* if non-zero, the largest hole below free_area_cache */  

  5.  unsigned long cached_hole_size;   

  6.   

  7. /* first hole of size cached_hole_size or larger */  

  8.   unsigned long free_area_cache;   

  9.   

  10. //在用户空间下有多少用户使用该内存  

  11.   

  12.  atomic_t mm_users;   /* How many users with user space? */  

  13.   

  14. //该结构体的引用计数值  

  15.  atomic_t mm_count;    

  16.    

  17.   

  18. /*又出现了list_head,详情请参考,简单来讲,list_head和list_for_each、list_entry共同实现了其“包含体”的链表。*/  

  19.   

  20.  struct list_head mmlist;    

  21.   

  22.   

  23. /*以下是关于代码段、数据段,栈、环境变量、参数的起始地址或结束地址等*/  

  24.  unsigned long total_vm, locked_vm, shared_vm, exec_vm;  

  25.  unsigned long stack_vm, reserved_vm, def_flags, nr_ptes;  

  26.  unsigned long start_code, end_code, start_data, end_data;  

  27.  unsigned long start_brk, brk, start_stack;  

  28.  unsigned long arg_start, arg_end, env_start, env_end;  

  29.  /*  

  30.   * Last value of global fault stamp as seen by this process.  

  31.   * In other words, this value gives an indication of how long  

  32.   * it has been since this task got the token.  

  33.   * Look at mm/thrash.c  

  34.   */  

  35.  unsigned int faultstamp;  

  36.  unsigned int token_priority;  

  37.  unsigned int last_interval;  

  38.   

  39. };  

该结构体可以通过进程描述符来得到,比如current是当前进程的描述符,则current->mm是指向内存的指针。mm是指向struct mm_struct的指针。若还想对Linux的进程描述符有一定了解,可以参考task_struct。见 http://www.linuxidc.com/Linux/2012-02/53702.htm

赞(0) 打赏
转载请注明出处:服务器评测 » Linux内存描述符mm_struct初窥
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏