zoukankan      html  css  js  c++  java
  • 计算机原理 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判断该物理地址是否在主存中,如果是就从主存中取出数据,如果不是,则抛出异常。调用缺页异常处理程序,把辅存中的物理地址拿到主存中。然后再执行和上面相同的操作。

  • 相关阅读:
    PHP比较操作符
    一个给图片加水印的程序
    PHP开发人员:充实您的XML工具箱
    PHP时间函数
    (Oralce)Web翻页优化实例
    PHP文件操作函数
    PHP图象函数
    PHP逻辑操作符
    PHP位操作符
    PHP目录遍历函数
  • 原文地址:https://www.cnblogs.com/fate-/p/13175545.html
Copyright © 2011-2022 走看看