具有快表的地址变换机构

一、局部性原理

int i=0;
int a[100];
while(i<100)
{
    a[i]=i;
    i++;
}

对于上述程序,1号内存块存放程序对应的指令,10号内存块存放程序中定义的变量

因为有一个while循环,程序执行的时候,会频繁的访问1号,10号内存块

1.时间局部性

如果执行了程序中的某条指令,那么不久后这条指令很有可能再次执行;

如果某个数据被访问过,不久之后该数据很可能再次被访问。(因为程序中存在大量的循环)

2.空间局部性

一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也很有可能被访问。(因为很多数据在内存中都是连续存放的)

上小节介绍的基本地址变换机构中,每次要访问一个逻辑地址,都需要查询内存中的页表。由于局部性原理,可能连续很多次查到的都是同一个页表项。既然如此,能否利用这个特性减少访问页表的次数呢?

二、快表

TLB——Translation Lookaside Buffer

根据功能可以译为快表,直译可以翻译为旁路转换缓冲,也可以把它理解成页表缓冲。

快表,又称联想寄存器(TLB),是一种访问速度比内存快很多的高速缓冲存储器,用来存放当前访问的若干页表项,以加速地址变换的过程。与此对应,内存中的页表常称为慢表。

三、地址变换过程

1.CPU给出逻辑地址,由某个硬件算得页号、页内偏移量,将页号与快表中的所有页号进行比较。

2.如果找到匹配的页号,说明要访问的页表项在快表中有副本,则直接从中取出该页对应的内存块号,再将内存块号与页内偏移量拼接形成物理地址,最后,访问该物理地址对应的内存单元。因此, 若快表命中,则访问某个逻辑地址仅需一次访存即可。

3.如果没有找到匹配的页号,则需要访问内存中的页表,找到对应页表项,得到页面存放的内存块号,再将内存块号与页内偏移量拼接形成物理地址,最后,访问该物理地址对应的内存单元。

因此,若快表未命中,则访问某个逻辑地址需要两次访存(注意:在找到页表项后,应同时将其存入快表,以便后面可能的再次访问。但若快表已满,则必须按照一定的算法对旧的页表项进行替换)

由于查询快表的速度比查询页表的速度快很多,因此只要快表命中,就可以节省很多时间因为局部性原理,一般来说快表的命中率可以达到90%以上。

命中快表——只需要一次访问内存(访问物理地址对应的内存)

没有命中快表——需要访问两次内存

第一次:访问存放在内存中的页表,找到页表项地址,取出对应的内存块号

第二次:由内存块号和页内偏移量,得出物理地址,然后访问物理地址对应的内存

例:某系统使用基本分页存储管理,并采用了具有快表的地址变换机构。访问一次快表耗时1us,访问一次内存耗时100us。若快表的命中率为90%,那么访问一个逻辑地址的平均耗时是多少?

(1+100)×0.9+(1+100+100)×0.1 = 111 us

有的系统支持快表和慢表同时查找,如果是这样,平均耗时应该是(1+100)×0.9+(100+100)×0.1=110.9 us

若未采用快表机制,则访问一个逻辑地址需要100+100 = 200us显然,引入快表机制后,访问一个逻辑地址的速度快多了。

四、总结

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值