转自网站: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缺失重填过程是由硬件来完成的,具体过程如下:(参考:<<ARM920T的MMU与Cache>>文章)

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

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

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

4)  过程称为Translation Table Walk从TTB走到一级页表,又走到二级页表,又走到物理页面,一次寻址其实是三次访问物理内存。注意这个“走”的过程完全是硬件做的,每次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等。

常见架构TLB miss处理方法(转)的更多相关文章

  1. coreseek常见错误原因及解决方法

    coreseek常见错误原因及解决方法 Coreseek 中文全文检索引擎 Coreseek 是一款中文全文检索/搜索软件,以GPLv2许可协议开源发布,基于Sphinx研发并独立发布,专攻中文搜索和 ...

  2. ADB几种常见的错误及解决方法

    下面列举出几种常见的错误及解决方法. Q1:无效的安装包,安装包已损坏[INSTALL_FAILED_INVALID_APK] A1:请检查安装包是否完整.如果是xpk包,可以通过 手动安装xpk来检 ...

  3. Python中常见字符串去除空格的方法总结

    Python中常见字符串去除空格的方法总结 1:strip()方法,去除字符串开头或者结尾的空格>>> a = " a b c ">>> a.s ...

  4. magento常见的问题及解决方法

    刚接触magento时,会遇到很多问题,大多数都是些magento配置及操作上的问题,因为刚接触magento不久所有对这些问题比较陌生也不知道如何处理.今日根据模版堂技术指导下和网上的相关例子,这里 ...

  5. JAVA常见中文问题的解决方法(转)

    JAVA常见中文问题的解决方法 http://www.java-cn.com/club/article-5876-1.html 以下解决方案是笔者在日常生活中遇到的,希望能对你解决JAVA中文问题有所 ...

  6. Excel公式的常见错误值及其解决方法

    Excel公式的常见错误值及其解决方法 经常用Excel的朋友可能都会遇到一些莫名奇妙的错误值信息:# N/A!.#VALUE!.#DIV/O!等等,出现这些错误的原因有很多种,如果公式不能计算正确结 ...

  7. ABSD 基于架构的软件设计方法方法简介(摘抄)

    ABSD(Architecture-Based Software Design)基于架构的软件设计方法 有三个基础: 第一个基础是功能分解.在功能分解中,ABSD方法使用已有的基于模块的内聚和耦合技术 ...

  8. PLC常见四大故障及其处理方法

    众所周知,PLC即可编程控制器,是一种专门为在工业环境下应用而设计的数字运算操作的电子装置. 但PLC在运行中总是会出现一些故障问题,下面就为大家介绍一下PLC常见四大故障及其处理方法 PLC常见四大 ...

  9. 微信小程序常见错误及基本排除方法

    也接触了不少人解决问题的过程里,有一些比较难以排查的可能性列举在这,方便大家看一下:   也欢迎大家把自己常用的排除方法列举在这,一起互相学习探讨!1:ES6:使用es6可能导致安卓端真机调试时很多问 ...

随机推荐

  1. c#语法笔记

    书写代码需要注意的地方: 1.代码中出现的所有标点都是英文半角 shift键快速切换中文半角和英文半角 shift+空格 切换全角/半角 2.在c#代码中,每行代码的结束,我们都以分号结束,注意:这个 ...

  2. CSS3 垂直树状图——运用 :before 和 :after

    直接上图(原网址),还有步骤想详解视频.自己CSS3练习demo. [demo] [HTML] <div class="tree"> <ul> <li ...

  3. JS定位PDF页码。

    由于项目中的PDF文章段落标题有些是英文,对其翻译后需要定位到具体的页码. 查询相关资料及进行尝试后发现可以用如下方法可以实现 function gotoPage(page) {            ...

  4. 诡异的问题“该字符串未被识别为有效的 DateTime”

    问题描述:"该字符串未被识别为有效的 DateTime"这个异常相信大家都会碰到,但是这一次真的无法理解,服务器运行一段时间之后才会出现这个问题,并且是系统中所有和日期相关的模块, ...

  5. CSS之导航菜单

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. SQL_转换格式的函数—CAST()和CONVERT()

    将一种数据类型的表达式显式转换为另一种数据类型的表达式.CAST 和 CONVERT 提供相似的功能. cast SELECT CAST('12.5' AS int) --在将 varchar 值 ' ...

  7. sqlserver之二进制和字符串sql语句

    正常情况下我们对数据库的操作就是如下的写法来操作数据库 ID AS 编号,BookName AS 书名 FROM dbo.books ORDER BY ID; ; 但是在客户正在使用的数据库里,我们开 ...

  8. 第四篇、CocoaPods 镜像的更新 原来的淘宝镜像已经不再更新

    在开发应用,我们常常使用cocoaPods来管理第三方框架,但是原来的淘宝的镜像不更新了 新的镜像地址:https://gems.ruby-china.org/

  9. 博客迁到CSDN

    之前一直是博客园和CSDN博客同步更新 现在不在博客园继续写博客,十一国庆节假后只用CSDN博客了.祝各位访客国庆节快乐! CSDN博客地址: http://blog.csdn.net/it_liuc ...

  10. 暑假集训(4)第六弹——— 组合(poj1067)

    题意概括:上一次,你成功甩掉了fff机械兵.不过,你们也浪费了相当多的时间.fff团已经将你们团团包围,并且逐步 逼近你们的所在地.面对如此危机,你不由得悲观地想:难道这acm之路就要从此中断?虽然走 ...