内存管理篇-15虚拟地址和MMU工作原理

        隔了两天再更新。。。周四下班太晚。周五出去吃夜宵回来太晚。。。

1.虚拟地址的基本概念

为什么需要虚拟地址?

虚拟地址:开启MMU之后,程序运行访问某个虚拟地址时,在CPU内部MMU会转换成物理地址,然后在通过CPU管脚发出去。对于DDR来说,不关心程序发出的地址,只认识CPU管脚的地址。---感觉这里没说清楚。

物理地址:相对于CPU管脚来说,发出去的地址称为物理地址。

线性地址、逻辑地址:x86上的概念

总线地址:挂载总线上的每个设备都会给他一个编址,构成不同的地址域。

MMU作用:将虚拟地址转换成物理地址

下面是一个load/store的过程: 

注:现代处理器cache基本上采用了pipt的方式。因此MMU单元返回物理地址后,首先是去cache找到对应内存地址的数据。

2.MMU工作原理

        虚拟页号、物理页号:MMU的转换也是以页为单位进行转换。所以MMU就是负责将程序的虚拟地址映射到物理内存中的实际物理地址。

        MMU的工作原理就是将上述几个专用名称组合在一起。当 CPU 访问内存时,MMU 会根据虚拟地址进行以下步骤的地址转换:提取页号:从虚拟地址中提取页号(Page Number)。查找页表项:使用页号作为索引,在页表中查找对应的页表项。获取物理地址:从页表项中获取物理地址,并与虚拟地址中的偏移量(Offset)组合成完整的物理地址。

页表:MMU的转换需要一个转换表,表里保存虚拟页号和物理页号的关系。在进行转换的时候,MMU中的table walk unit单元去内存中查看翻译表(存放在物理内存上的一段数据),

MMU使能:通过协处理器命令访问修改寄存器

TLBs:其实就是一段翻译表的缓存

缺页处理:如果 MMU 发现请求访问的页面不在物理内存中(即发生了缺页中断),它会暂停当前的操作并将控制权交给操作系统。操作系统会负责将缺失的页面从磁盘换入物理内存,并更新页表。之后,MMU 会恢复之前的指令执行。

注意:对于cache和memory,它只认识物理地址,不认识虚拟地址。其实也很好理解,假设CPU发出一个load指令,第一时间让MMU找到对应的物理地址(去自己的缓存tlb中查找有没有对应的物理地址,或者自己通过table walk unit单元去翻译,反正MMU单元负责把物理地址搞过来就行),第二时间:将得到的物理单元去cache找数据,没有的话就去内存中找。

 3.虚拟地址到物理地址的转换原理

        0-11位作为偏移,虚拟页号到物理页号做一个转换即可。例如0x80003160的低12位0x160作为偏移,(查找page table后)再通过虚拟页帧号找到物理页帧号。(例子中0x80003 -> 0x60003,再讲物理页帧号和偏移凑在一起得到物理地址)。

        基本原理的关键就在于页表,假设32位地址,去掉12位偏移,剩下20位都作为页帧号的话,此时需要2^20次方个映射条目,最少需要4M个条目(这个page table保存在内存上),每个进程都维护这样的页表会很浪费内存。因此需要引入多级页表。(底下这个图有点问题的,VPN是不放在page table中的,它只是根据vpn当作整个page table的偏移,例如这里的0x80003就代表是page table的0x80003项entry保存了它的物理地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LuckyDog0623

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值