zoukankan      html  css  js  c++  java
  • mm_struct简要解析

    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;
    };

  • 相关阅读:
    C#获取当前路径的七种方法
    map容器对象插入数据的4种方式【转】
    为VMware虚拟机内安装的Ubuntu 16.04设置静态IP地址【转】
    Ubuntu16手动配置IP地址
    当前上下文不存在名称“***”
    C++读写文件ofstream,ifstream,fstream)[转]
    atoi()函数
    C++常用输出 cout、cerr、clog
    Lucene教程(转)
    selenium环境搭建1
  • 原文地址:https://www.cnblogs.com/feng9exe/p/6883707.html
Copyright © 2011-2022 走看看