计算机原理 4.13 TLB

1、虚实地址转换过程存在的问题

命中的情况:

 

 

 首先,cpu基于虚拟地址访问MMU,在MMU中,由虚地址剥离出的虚页号与MMU中的页表寄存器进行偏移,得出在主存中的页表中的与虚页号对应的那个页表项的物理地址,从主存中将对应的那个页表项送到MMU中,由MMU判断由虚地址对应的物理页是否在主存当中,本次是命中的情况,也就是虚地址对应的物理页在主存中,那么将这个物理地址和虚地址中的页偏移量组合,形成与虚地址对应的在主存中的物理地址,然后基于这个物理地址去访问主存,就能得到与虚地址对应的那个数据。

不命中的情况(缺页):

 

 

 首先,cpu基于虚地址去访问MMU,在MMU中,虚地址被拆分为虚页号和页偏移量,MMU基于虚页号和页表寄存器得到页表项的地址,基于页表项的地址去访问主存,主存将对应的页表项返回到MMU中,这次MMU判断这个物理页不在主存当中,也就是没有命中,即缺页的情况,因此就发生了缺页异常,这个时候在操作系统的参与下,会运行一个缺页异常处理程序,去将那个还存放在辅存中的与虚页号对应的物理页调入到主存中来,在这之前,需要调动替换算法,先把主存中的页表项中的一项先调到辅存中,腾出位置来,然后再把辅存中与虚页号对应的物理页调入到主存中。然后,缺页异常处理程序会给MMU返回一个缺页异常的处理结果,会告诉MMU这个问题已经处理完了,然后cpu还会继续执行刚才没有执行完的指令,也就是cpu会根据那个虚地址访问MMU,MMU根据虚页号和页表寄存器得出页表项的地址,基于页表项的地址去访问主存,主存将对应的页表项返回到MMU中,这次,MMU肯定会判断这个物理页在主存中,然后这个物理页结合页偏移量得出虚地址对应的主存中的物理地址,再基于这个物理地址去主存中访问,然后主存返回与虚地址相对应的数据。

由以上步骤可知,无论命中或不命中,cpu的效率都会降低,这是我们不希望看到的,所以引入了TLB

2、TLB的工作原理

根据局部性原理,增加一个小容量、告诉存储部件,存放当前访问页表地址变换条目,该存储部件称为TLB(Translation  Lookaside  Buffer:地址转换后备缓冲器)

TLB类似页表,也是PTE的集合(PTE就是页表项)。为实现对TLB的快速访问,类似于Cache中的映射方法,对来自于CPU的虚页号进行逻辑划分,得到相应的标记和索引字段。

 

 

 3、基于TLB的虚地址转换

 

 

 

 

 有了TLB之后,MMU不用再靠访问主存来得到虚拟页对应的物理页,而是靠访问TLB来获得。cpu基于虚拟地址访问MMU时,虚拟地址分为虚拟页号和页内偏移,而因为TLB存放的是页表的子集,所以仅靠虚拟页号是找不到具体页表项位置的,所以虚拟页号又分为了Tag和Index。用Tag和Index就能够准确的找到一个页表项的位置。然后取出页表项中的物理页号,与虚拟地址的页内偏移构成物理地址。然后MMU判断该物理地址是否在主存中,如果是就从主存中取出数据,如果不是,则抛出异常。调用缺页异常处理程序,把辅存中的物理地址拿到主存中。然后再执行和上面相同的操作。

 

posted @ 2020-06-22 10:25  ice--cream  阅读(685)  评论(0编辑  收藏  举报