http://blog.chinaunix.net/uid-20729583-id-1884615.html

struct mm_struct {
    /*
        指向线性区对象的链表头
    */
    struct vm_area_struct    *mmap;
    /*
        指向线性区对象的红-黑树
    */    
    struct rb_root        mm_rb;
    /*
        指向最后一个引用的线性区对象
    */
    struct vm_area_struct     *mmap_cache;
    /*
        在进程地址空间中搜索有效线性地址区间的方法
    */
    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;
    /*
        
    */
    unsigned long task_size;
    
    unsigned long cache_hole_size;
    /*
        内核从这个地址开始搜索进程地址空间中线性地址的空闲区间
    */
    unsigned long free_area_cache;
    /*
        指向页全局目录
    */
    pgd_t *pgd;
    /*
        存放共享mm_struct数据结构的轻量级进程的个数
    */
    atomic_t mm_users;
    /*
        内存描述符的主使用计数器,每次mm_count递减时,内核都要检查它是否变为0,如
        果是,就要解除这个内存描述符,因为不再有用户使用它
    */
    atomic_t mm_count;
    /*
        线性区的个数
    */
    int map_count;
    /*
            
    */
    struct rw_semaphore mmap_sem;
    /*
        线性区的自旋锁和页表的自旋锁
    */
    spinlock_t page_table_lock;
    /*
        存放链表相邻元素的地址,第一个元素是init_mm的mm_list字段
    */
    struct list_head mmlist;
    
    mm_counter_t _file_rss;
    mm_counter_t _anon_rss;
    /*
        进程所拥有的最大页框数    
    */
    unsigned long hiwater_rss;
    /*
        进程线性区中的最大页数
    */
    unsigned long hiwater_vm;
    /*
        进程地址空间的大小,"锁住"而不能换出的页的个数,共享文件内存映射中的页数,
        可执行内存映射中的页数    
    */
    unsigned long total_vm,locked_vm,shared_vm,exec_vm;
    /*
        用户态堆栈中的页数,在保留区中的页数或者是在特殊线性区中的页数,线性区默认
        的访问标志,this进程的页表数        
    */
    unsigned long stack_vm,reserved_vm,def_flags,nr_ptes;
    /*
        可执行代码开始地址,结束地址,已初始化数据的开始地址,结束地址
    */
    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;
    /*
        开始执行ELF程序时会使用到saved_auxv参数        
    */
    unsigned long saved_auxv[AT_VECTOR_SIZE];
    /*
        用于懒惰TLB交换的位掩码
    */
    cpumask_t    cpu_vm_mask;
    /*
        指向有关特定体系结构信息的表
    */
    mm_context_t context;
    /*
        
    */
    unsigned int faultstamp;
    /*
        
    */
    unsigned int token_priority;
    /*
        
    */
    unsigned int last_interval;
    /*
        线性区默认的访问标志(访问设置相关位的时候,必须使用原子操作来解决)
    */
    unsigned long flags;
    /*
        正在把进程地址空间的内容卸载到转储文件中的轻量级进程的数量
    */
    int core_waiters;
    /*
        指向创建内存转储文件时的补充原语
    */
    struct completion *core_startup_done,core_done;
    /*
        用于异步I/O上下文链表的锁    
    */
    rwlock_t ioctx_list_lock;
    /*
        异步I/O上下文链表
    */
    struct kioctx *ioctx_list;
};

最新文章

  1. Linux学习(一):从图形界面进入命令行及命令行进入图形界面
  2. 易全解token获取
  3. jQuery LigerUI 最新版压缩包(含chm帮助文档、源码、donet权限示例)
  4. LCS记录路径
  5. poj 2774 Long Long Message 后缀数组LCP理解
  6. 注册一个比较大小Handlebars
  7. 遍历页面上所有TextBox,并赋值为String.Empty
  8. WP独立文件资源字典
  9. poj 4088:Set操作
  10. 移动端App混合开发问题 汇总
  11. Java中几种常量池的区分
  12. BZOJ 2738: 矩阵乘法 [整体二分]
  13. System Error. Code:1722. RPC服务器不可用解决办法
  14. jQuery初识之选择器、样式操作和筛选器(模态框和菜单示例)
  15. 【用户权限】MongoDB用户权限
  16. java(三)数据库部分
  17. 人人开源分模块,非原生html报错,很难查找问题所在,有vue语法
  18. Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#<Object>‘的解决方法
  19. vb.net 使用MD5密碼加密
  20. noi.ac 257 B

热门文章

  1. 利用RELK进行日志收集
  2. nginx —— 理解nginx_upstream_jvm_route模块解决tomcat多节点session不一致问题
  3. 关于box-shadow、border-radius不兼容ie8的解决办法
  4. python面向对象, 单例模式
  5. 研磨设计模式学习笔记3--适配器模式Adapter
  6. github 0 学习
  7. str 操作方法
  8. Django重新整理2
  9. python3.4 x86_64-linux-gnu-gcc Error
  10. 我使用的brackets插件