2.2 内存篇-虚拟内存管理

1:虚拟内存管理机制

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

2:进程虚拟地址空间

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

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:一些标识位
在这里插入图片描述

4:新建一个VMA

mma:在进程的用户空间创建一个新的虚拟内存区
在这里插入图片描述

5:请页机制

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

6:进程装载过程

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

7:简介malloc

如下图所示,内核并不会马上分配物理内存,依然需要请页机制
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值