Chinaunix首页 | 论坛 | 博客
  • 博客访问: 291190
  • 博文数量: 49
  • 博客积分: 3083
  • 博客等级: 中校
  • 技术积分: 710
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-27 08:22
文章分类

全部博文(49)

文章存档

2009年(8)

2008年(41)

分类: LINUX

2008-09-08 11:31:28

/*
*
*/

struct mm_struct {
        struct vm_area_struct  *mmap;               /* 内存区域链表 */
        struct rb_root         mm_rb;               /* 虚拟内存区域红黑树 */
        struct vm_area_struct  *mmap_cache;         /* 最后使用内存区域 */
        unsigned long          free_area_cache;     /* 第一个地址空间洞 */
        pgd_t                  *pgd;                /* 页全局目录 */
        atomic_t               mm_users;            /* 该地址空间用户 */
        atomic_t               mm_count;            /* 主使用记数 */
        int                    map_count;           /* 内存区域数目 */
        struct rw_semaphore    mmap_sem;            /* 内存区域信号量 */
        spinlock_t             page_table_lock;     /* 页表锁 */
        struct list_head       mmlist;              /* 包含全部mm_structs的链表 */
        unsigned long          start_code;          /* 代码段开始地址 */
        unsigned long          end_code;            /* 代码段的结束地址 */
        unsigned long          start_data;          /* 数据段首地址 */
        unsigned long          end_data;            /* 数据段尾地址 */
        unsigned long          start_brk;           /* 堆首地址 */
        unsigned long          brk;                 /* 堆尾地址 */
        unsigned long          start_stack;         /* 进程栈的首地址 */
        unsigned long          arg_start;           /* 命令行参数的首地址 */
        unsigned long          arg_end;             /* 命令行参数的尾地址 */
        unsigned long          env_start;           /* 环境变量首地址 */
        unsigned long          env_end;             /* 环境变量尾地址 */
        unsigned long          rss;                 /* 所分配的物理页 */
        unsigned long          total_vm;            /* 全部页面数目 */
        unsigned long          locked_vm;           /* 默认访问标志 */
        unsigned long          cpu_vm_mask;         /* 懒惰(lazy)TLB交换掩码 */
        unsigned long          swap_address;        /* 最后被扫描地址 */
        unsigned               dumpable:1;          /* 是否可以产生内存信息转储? */
        int                    used_hugetlb;        /* 是否使用了hugetlb ? */
        mm_context_t           context;             /* 体系结构特殊数据 */
        int                    core_waiters;        /* 内核转储等待线程 */
        struct completion      *core_startup_done;  /* core开始完成 */
        struct completion      core_done;           /* core结束完成 */
        rwlock_t               ioctx_list_lock;     /* AIO I/O链表锁 */
        struct kioctx          *ioctx_list;         /* AIO I/O链表*/
        struct kioctx          default_kioctx;      /* AIO 默认 I/O 上下文t */
};

/*
*vm_area_struct结构体描述了指定地址空间内连续区间上的一个独立内存范围
*定义文件在linux/mm.h中
*/
struct vm_area_struct {
        struct mm_struct             *vm_mm;        /* 相关的mm_struct结构体 */
        unsigned long                vm_start;      /* 区间首地址 */
        unsigned long                vm_end;        /* 区间尾地址 */
        struct vm_area_struct        *vm_next;      /* VMA链表 */
        pgprot_t                     vm_page_prot;  /* 访问控制权限 */
        unsigned long                vm_flags;      /* 标志 */
        struct rb_node               vm_rb;         /* 树上该VMA的节点 */
        union {         /* 或者是关联于address_space->i_mmap字段,或者是关联于i_mmap_nonlinear字段 */
                struct {
                        struct list_head        list;
                        void                    *parent;
                        struct vm_area_struct   *head;
                } vm_set;
                struct prio_tree_node prio_tree_node;
        } shared;
        struct list_head             anon_vma_node;     /* anon_vma目录项 */
        struct anon_vma              *anon_vma;         /* 匿名的VMA对象 */
        struct vm_operations_struct  *vm_ops;           /* 相关的操作表 */
        unsigned long                vm_pgoff;          /* 文件中的偏移量 */
        struct file                  *vm_file;          /* 被映射的文件(假如存在) */
        void                         *vm_private_data;  /* 私有数据 */
};


阅读(1540) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~