【操作系统】Core i7地址翻译过程

先看看酷睿i7的结构,左边是处理器部分,有自己的data缓存和instruction缓存,右边是mmu部分,有自己的data TLB和instruction TLB。

这里有L1和L2两层缓存,是因为,有时会遇到指令比数据多的情况,有时是数据比指令多,这样就不好定义L1这两部分缓存各自的大小,如果设置两层,不管是这两部分哪部分不够用了,都可以从第二从找地方用。

然后看地址翻译过程,英特尔的虚拟地址是48位的,但是酷睿i7不是64位的吗,这是因为前16位会被用来区分这个地址是内核的还是用户的。

这48位的前36位是虚拟页号VPN,后12位是偏移量,拿到这个之后首先取出VPN去TLB里找,这36位又会分成高32位作为匹配项,后4位也就是16个组,这是因为data TLB是64个条目,4路组相联,那么就会有64/4=16组。先拿低4位找到对应的组,再拿高32位看是否与标记位匹配,如果匹配那么就TLB命中,直接拿到物理页号PPN加上偏移量去内存中寻址。

如果没有命中,那就需要去内存的页表中取查找,首先通过基址寄存器CR3拿到内存页表的物理首地址,找到第一级,通过VPN1来确定第二级页表的位置,再通过VPN2来确定第三级页表的位置,再通过VPN3来确定第四级页表的位置,再通过VPN4来确定第四级页表中的偏移,来拿到物理页号,然后加上偏移量去寻址。

上面是地址翻译的过程,下面是寻址的过程。

52位物理地址高40位是标记位,低12位分别是组索引和偏移,先根据组索引找到对应的组,每组里有八路八行,就也是64个标记,根据偏移来确定唯一的标记,拿这个标记和高40位的标记比,一致则L1高速缓存命中,不一致就要去L2、L3甚至内存中去找。

从上面的分析可以看出,虚拟地址的12位偏移量和物理寻址的低12位是一样的,一开始处理器就可以拿到这12位,那么处理器就可以在翻译虚拟地址的同时,拿着这12位去物理缓存中寻找唯一的标记位,等到地址翻译结束时,物理缓存也准备好做标记匹配了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值