/*
*
*/
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; /* 私有数据 */
};
阅读(1522) | 评论(0) | 转发(0) |