2.2 内存篇-虚拟内存管理

时间:2024-03-16 07:09:37

1:虚拟内存管理机制

2.2 内存篇-虚拟内存管理
地址映射机制:内核通过映射机制,将内存从磁盘映射到虚拟地址空间
1:当进程执行时,发现访问的页没有映射到物理内存时,发出页请求,即请页机制
2:有空闲内存可分配就分配内存,这时用到的就是内存分配和回收机制
3:同时把正在使用的页记录在页缓存中,这时就用到了页缓存和刷新机制
4,5:如果此时没有空闲内存,那就需要交换机制腾出一部分内存
6:交互机制中也需要用到交换缓存
7:并且把物理页交换到交换文件后,通过修改页表来映射文件地址
8:通过TLB更快的找到物理内存

2:进程虚拟地址空间

1)所有的进程都有独立的4GB内存空间,用户空间3GB,内核空间1GB,所有进程共享1GB的内核空间
2.2 内存篇-虚拟内存管理
2)进程的空间布局如下:
每个进程编译链接后形成二进制镜像文件都要代码段(TEXT)和数据段(DATA,BSS),进程运行时都有独占得到堆(heap)和栈(stack),进程要映射的文件就被映射到内存映射区(MMR)
2.2 内存篇-虚拟内存管理

3:描述进程空间的数据结构

1)task_strcut(整个进程描述字段)
mm指向进程空间描述结构体

2)mm_strcut(对进程空间进行描述)
pgd:
指向该进程的页目录,当调度一个程序运行时,就将这个虚地址转化成物理地址,填入 CR3寄存器中

内存区管理方式:
当虚拟内存区较少时,采用单链表,使用mmap指针指向该链表
当虚拟内存较多时,采用红黑树结构,由mm_rb指向

3)vm_area_strcut(对用户空间的各个内存区进行描述)
vm_start/vm_end:vma的虚拟内存其实地址和终止地址
vm_port:保护权限
vm_flags:一些标识位
2.2 内存篇-虚拟内存管理

4:新建一个VMA

mma:在进程的用户空间创建一个新的虚拟内存区
2.2 内存篇-虚拟内存管理

5:请页机制

当一个进程运行时,CPU访问的是用户空间的虚拟地址,linux仅把当前所要使用的少量页面装入内存中。需要时通过请页机制将特定的页面调入内存,当访问的页不在内存时,就会产生一个页故障,进入缺页异常处理(do_page_fault)。

6:进程装载过程

1)内核根据建立的映射关系,找到所需要的内容在可执行文件中的位置
2)分配一个物理内存页面,并将可执行文件内容装载到该内存页
3)建立物理页面和虚拟地址空间的映射关系,也就是填充页表,然后将控制器交还给进程

7:简介malloc

如下图所示,内核并不会马上分配物理内存,依然需要请页机制
2.2 内存篇-虚拟内存管理