zoukankan      html  css  js  c++  java
  • 常见架构TLB miss处理方法(转)

    转自网站:http://blog.sina.com.cn/s/blog_633f462901018reb.html

    0.       综述

    总的来说TLB miss处理分为硬件处理和软件处理两种,硬件处理代表架构为X86,X86-64,IBM VM370;软件处理代表为: MIPS, SPARC, Alpha;同时兼容软硬件处理的架构:PowerPC。以下便简要介绍各个架构的TLB MISS处理过程及其特性。

     

    1.       ARM架构

    ARM架构的TLB虽然程序员可见,但是并不能像MIPS架构那样可以显示的向TLB中写入固定的内容,TLB缺失重填过程是由硬件来完成的,具体过程如下:(参考:<<ARM920TMMUCache>>文章)

    1)  ARMMMUCache集成在15号协处理器中。其中第2号寄存器存着页表的基地址(TTB);第8号寄存器提供了TLB invalidTLB操作;第10号寄存器提供了TLB锁定操作。

    2)  TTB中的内容为基地址,以VA[31:20]为索引在表中查出第二级页表(Coarse Page Table)的基地址,同样是物理地址,也就是说第二级页表也是直接按这个地址存在物理内存中的。

    3)  VA[19:12]为索引在第二级页表中查出物理页面的基地址加上VA[11:0]这个偏移量就可以取出相应地址上的数据。

    4)  过程称为Translation Table WalkTTB走到一级页表,又走到二级页表,又走到物理页面,一次寻址其实是三次访问物理内存。注意这个的过程完全是硬件做的,每次CPU寻址时MMU就自动完成以上四步,不需要编写指令指示MMU去做,前提是操作系统要维护页表项的正确性,每次分配内存时填写相应的页表项,每次释放内存时清除相应的页表项,在必要的时候分配或释放整个页表。

    5)  除了硬件TTW,CP15的8号寄存器支持的TLB操作如下:

    a)         无效指令TLB

    b)         无效指令单一入口

    c)         无效整个数据TLB

    d)         无效数据单一入口

    e)         无效所有TLB

    因此由上面分析可以看到ARM的类似X86架构是硬件完成TLB重填,而且不能显示访问TLB的每一项。

     

    2.       SPARC架构

    SPARC架构类似MIPS,使用的是软件管理TLB重填异常,TLB中也拥有区分不同地址空间的标识符 context id,是否使用特权级是根据操作模式和TRAP LEVEL决定的。SPARC的TLB重填异常如下:

    1)   发生TLB异常时陷入操作系统

    2)   操作系统首先查询TSB中是否存在缺失项

    a)         如果有load到TLB中

    b)         如果没有则执行TSB缺失函数

    3)   SPARC访问TLB的命令是ldxa,stxa等,具体方式见linux内核中 arch/sparc/ kernel/itlb_miss.S文件中填充TLB的部分

     

     

    3.       POWERPC架构

    POWERPC架构的TLB MISS有硬件查询的部分有软件查询的部分。其TLB MISS处理的方式如下,一共两轮查询

    1)  首先查询处理器中的DBAT和IBAT寄存器,这些寄存器只有4或8个,用于映射内核地址,最大能映射到256M。如果这次查询成功则不进行下轮查询。

    2)  若第一次查询不成功,则进行第二轮查询,这轮查询不一定被所有的类型的POWERPC处理器支持,查询中首先通过段寄存器获得一个52位地址。这52位线性地址使用hash表存放其页表。硬件获得52地址对应的hash值,查询页表。如果不存在则解决hash 冲突继续查,如果继续查不中则陷入到OS中进行处理。

    3)  POWERPC G1系列不支持查询hash表,而使用软件方式查询标准页表,之后写入TLB;G2~G4系列均采用硬件查询hash表。最新的POWERPC处理器支持两种方式选择。

    4)  POWERPC系列访问TLB指令类似tlbre, tlbwe等,有点类似MIPS。

     

    4.       Alpha架构

    Alpha同样使用软件TLB重填,同样具有ASID用于保证TLB中存在不同地址空间的项。但是Alpha的TLB重填很奇特,使用机器码来完成三级页表的查询,换句话说Alpha的TLB miss重填函数固化在机器码中。

     

    5.       X86,x86-64架构

    X86使用的是硬件页表查询,特点是:

    1)   操作系统并不知道有TLB存在

    2)   CPU保证TLB和页表一致性。即当页表改变或者切换时需要刷新TLB。

    3)   TLB中不存在ASID。

    4)   OS不能单一操作某一TLB表项,只能通过INVLPG指令无效整个TLB。

    5)   X86的硬件page table walk过程略~

     

    6.       MIPS架构

    MIPS使用的是软件TLB miss方法,使用ASID区分不同的用户空间。具体过程如下:

    1)  访问地址TLB不存在时候,陷入内核产生TLB miss异常。

    2)  TLB miss 处理函数查询三级页表获得地址并填入TLB

    3)  MIPS架构中访问TLB指令时:tlbwi,tlbri等。

  • 相关阅读:
    Java程序员必知的8大排序(转载)
    Eclipse快捷键大全(转载)
    Java强引用、 软引用、 弱引用、虚引用(转)
    java数据类型二(转)
    为什么静态成员、静态方法中不能用this和super关键字(转)
    POJ 2002
    POJ 3126的教训
    POJ 3349
    POj 1105解题报告
    POJ 3278
  • 原文地址:https://www.cnblogs.com/qiuheng/p/5685589.html
Copyright © 2011-2022 走看看