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

mm_struct简要解析的更多相关文章

  1. 简要解析XMPP框架及iOS-Objective-C的使用

    前言:这两天看了XMPP框架,查阅了一些资料,写下这篇文章记录一下学习笔记 一.简要解析XMPP核心部分 XMPP框架分为两个部分 1.核心部分 2.扩展部分 扩展部分主要讲好友列表(roster). ...

  2. SQL查询多条不重复记录值简要解析【转载】

    转载http://hi.baidu.com/my_favourate/item/3716b0cbe125f312505058eb SQL查询多条不重复记录值简要解析2008-02-28 11:36 以 ...

  3. java与C++之间进行SOCKET通讯要点简要解析

    原文链接: http://blog.csdn.net/hslinux/article/details/6214594 java与C++之间进行SOCKET通讯要点简要解析 hslinux 0.篇外语 ...

  4. NOIP 2018 提高组初赛试题 题目+答案+简要解析

    一.单项选择题(共 10  题,每题 2  分,共计 20  分: 每题有且仅有一个正确选项)       1. 下列四个不同进制的数中,与其它三项数值上不相等的是( ). A. (269) 16 B ...

  5. SDP简要解析

    1.概述SDP也是MMUSIC工作组的一个产品,在MBONE内容中用得很多.其目的就是在媒体会话中,传递媒体流信息,允许会话描述的接收者去参与会话.SDP基本上在internet上工作.他定义了会话画 ...

  6. volatile简要解析

    在当前的Java内存模型下,线程可以把变量保存在本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写.这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值 ...

  7. package.json字段简要解析

    name 必填 应用名称 version 必填 应用版本 description 选填 应用描述,多用于搜索,在npm search 时可以用到 keywords 选填 应用关键字,也多用于搜索 sc ...

  8. NOIP2018初赛总结(提高组)(试题+答案+简要解析)

    NOIP2018初赛总结(提高组) 更新完毕(纯手敲),如果有错误请在下面留言 单选题 T1.下列四个不同进制的数中,与其它三项数值上不相等的是 A.\((269)_{16}\) B.\((617)_ ...

  9. 有关LinkedList常用方法的源码解析

    上文里解析了有关ArrayList中的几个常用方法的源码——<有关ArrayList常用方法的源码解析>,本文将对LinkedList的常用方法做简要解析. LinkedList是基于链表 ...

随机推荐

  1. JavaScript base64多图上传

    <div> <form action="/home/Uplod" method="post" enctype="multipart/ ...

  2. 二分搜索 - Binary Search

    二分搜索是一种在有序数组中寻找目标值的经典方法,也就是说使用前提是『有序数组』.非常简单的题中『有序』特征非常明显,但更多时候可能需要我们自己去构造『有序数组』.下面我们从最基本的二分搜索开始逐步深入 ...

  3. redis初步学习 0

    2.1 Redis是什么 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统.Redis提供了一些丰富的数据 ...

  4. Java-IO中的节点流和处理流

    理解好Java-IO中的节点流和处理流是理解Java输入.输出的关键基础,因此,了解节点流和处理流相关的知识点尤为重要. 1.定义 (1)节点流:可以从或向一个特定的地方(节点)读写数据.如FileR ...

  5. Linux 文件锁flock 实现两个进程相互监听存活状态

    表头文件  #include<sys/file.h> 定义函数  int flock(int fd,int operation); 函数说明  flock()会依参数operation所指 ...

  6. 不要在Application中缓存数据

    在你的App中的很多地方都需要使用到数据信息,它可能是一个session token,一次费时计算的结果等等,通常为了避免Activity之间传递数据的开销,会将这些数据通过持久化来存储.   有人建 ...

  7. Robot Framework搭建

    需要安装的内容如下: 1. Python2.7.13(听说python3对RF支持的不是很好,所以我下的Python2) 2. wxPython 2.8.12.1(只能这个版本) 3. robotfr ...

  8. java替换word表格2007

    package demo;import java.io.FileOutputStream;import java.util.HashMap;import java.util.Iterator;impo ...

  9. SourceInsight,Understand,SecureCRT设置

    SourceInsight 设置字体 Option/Document  Option/Screen  Fonts   Understand https://scitools.com/download/ ...

  10. 转:POST 400 Bad Request The request sent by the client was syntactically incorrect

    最近在做Web开发的时候,使用$.post提交数据,但是回调函数却没有被触发,按F12看控制台输出是:POST *** 400 Bad Request 后台是SpringMVC的,设置了断点也不会被触 ...