其中有一个被称为'内存描述符‘(memory descriptor)的数据结构mm_struct,抽象并描述了Linux视角下管理进程地址空间的所有信息。 mm_struct定义在include/linux/mm_types.h中,其中的域抽象了进程的地址空间,如下图所示: 1 struct mm_struct { 2 struct vm_area_struct * mmap; //指向虚拟区间(VMA)的链表 3 s...
在进程的task_struct结构体中包括1个指向mm_struct结构的指针,mm_struct用来描写1个进程的虚拟地址空间。进程的mm_struct则包括装入的可履行映像信息和进程的页目录指针pgd。该结构还包括有指向vm_area_struct结构的几个指针,每一个vm_area_struct代表进程的1个虚拟地址区间。vm_area_struct结构含有指向vm_operations_...
1、vm_mm 成员 struct mm_struct *vm_mm成员的作用是 指向 " 内存描述符 "mm_struct结构体 , 这是该 " 虚拟内存区域 "vm_area_struct所属的 " 进程的用户虚拟地址空间 "mm_struct内存描述符结构体 ; vm_area_struct结构体 是 " 虚拟内存区域 " ; mm_struct结构体 是 " 进程的用户虚拟地址空间 " ,...
struct mm_struct 每个进程或内核线程都由一个任务描述数据结构(task_struct)来管理,每个task_struct中有个struct mm_strcut数据结构指针,用来管理任务的虚拟地址空间;而内核线程是没有用户态虚拟地址空间,所以其mm字段为NULL;mm的数据结构如下: <include/linux/sched.h>structtask_struct{...structmm_stuct*mm;每...
每一个进程都可以被别的进程来共享,也就是和别的进程来共享mm_struct. 所有的mm_struct结构以链表的形式存在的。 另外需要说明的就是kernel线程是没有地址空间的,也就没有对应的mm_struct,kernel线程使用之前运行的进程的内存描述符。 程序中通常用到的地址常常具有局部性,当前最近一次用蛋糕的虚拟地址区间很可能下...
进程的 mm_struct 则包含装入的可执行映像信息以及进程的页目录指针pgd。该结构还包含有指向 vm_area_struct 结构的几个指针,每个 vm_area_struct 代表进程的一个虚拟地址区间。vm_area_struct 结构含有指向vm_operations_struct 结构的一个指针,vm_operations_struct 描述了在这个区间的操作。vm_operations 结构中...
struct mm_struct { struct vm_area_struct * mmap; /* 虚拟内存区域列表 */ struct rb_root mm_rb; struct vm_area_struct * mmap_cache; /* 上一次find_vma的结果 */ ... } 1. 2. 3. 4. 5. 6. 7. 树和链表 每个区域都通过一个vm_area_struct实例描述,进程的各区域按两种方法排序。
struct mm_struct { /* 指向线性区对象的链表头 */ struct vm_area_struct *mmap; /* 指向线性区对象的红-黑树 */ struct rb_root mm_rb; /* 指向最后一个引用的线性区对象 */ struct vm_area_struct *mmap_cache; /* 在进程地址空间中搜索有效线性地址区间的方法 ...
void(*unmap_area)(struct mm_struct *mm,unsignedlongaddr); unsignedlongmmap_base; unsignedlongtask_size;//拥有该结构体的进程的虚拟地址空间的大小 unsignedlongcached_hole_size; unsignedlongfree_area_cache; pgd_t*pgd;//指向页全局目录 atomic_tmm_users;//用户空间中有多少用户 ...
1struct mm_struct{2struct vm_area_struct*mmap;//指向虚拟区间(VMA)的链表3struct rb_root mm_rb;//指向线性区对象红黑树的根4struct vm_area_struct*mmap_cache;//指向最近找到的虚拟区间5unsignedlong(*get_unmapped_area)(struct file*filp,6unsigned long addr,unsigned long len,7unsigned long pgoff,...