虚拟内存管理主要就是管理3GB的用户空间。内核为了管理用户空间主要使用了
两个重要的数据结构,mm_struct和vm_area_struct。mm_struct是对一个进程内存描
述符,对整个进程的内存空间进行描述,进程的地址空间由多个虚存区组成,内核就使
用vm_area_struct是对虚存区进行描述。多个虚存区有两种组织方式(目前知道就两种)
一种是链表,一种是红黑树(基于树的查找,快速定位某个虚寻区)
----------------------------------------------------------------------------------------------
一、mm_struct结构字段分析。
- struct vm_area_struct * mmap;
mmap是指向组织虚存区(vm_area_struct)的链表,而且是链表的头节点。可以通过该
字段找到虚存区的链表头节点后,遍历该链表,查看进程各个虚存区的情况。
该字段是虚存区通过红黑树组织的根节点,通过该字段可以使用二叉树遍历的方式遍历
各个虚存区。
这个就是通过进程中有多少个虚存区,也就是vm_area_struct链表有多少个节点。
该字段是保存该进程页目录的基地址,每次切换到给进程执行,该值都会被读出,读出后
__pa(pgd)换算成物理地址后写入到CR3寄存器中。进程执行完后该值会从新写入到进程PCB
中的pgd中。
----------------------------------------------------------------------------------------------
二、vm_area_struct结构字段分析。
该字段是该虚存区的开始地址。
该字段是该虚存区的末尾地址。
- struct vm_area_struct *vm_next, *vm_prev;
该字段使用链表组织使用的字段,链表节点的前驱接节点和节点的直接后继。
- const struct vm_operations_struct *vm_ops;
该虚存区的“操作集”
---------------------------------------------------------------------------------------------
三,用户空间示意图。
-------------------------------------------------------------------------------------------
阅读(1355) | 评论(0) | 转发(0) |