ASID

  • 为了提高TLB的性能,将TLB分成Global和process-specific。global 是指常驻在tlb中不会被刷出的,例如内核空间的翻译,process-specific 是指每个进程独有的地址空间,当发生进程切换的时候,这部分tlb可以被刷出,为了支持process-specific的tlb,arm提出了ASID(Adress Space ID)的硬件解决方案,这样TLB就可以识别出这个 TLB 页表项是属于哪一个进程的。
  • 在 MIPS 中,有两个地方会出现ASID,每一个TLB表项会有一个ASID,标识这个表项是属于哪一个进程的,CP0_EntryHI 中的ASID是当前进程的ASID,所以进程对TLB的查询操作,即使VPN命中,但若该表项不是global且ASID与CP0_EntryHi的ASID不一致,则也视作TLB缺失 -- 这样就不用每次切换进程都要 flush 所有 tlb

MIPS 中 TLB/MMU 相关寄存器

TLB 关键字域

  • EntryHi 包含 VPN2 和 ASID 字段

    • VPN2 就是 TLB 表项对应的虚拟页表号,在 MIPS 设计中,一个 TLB 表项存储的是两个相邻虚拟页对应的物理页框号,所以 VPN2 只有 21 位(除去页内偏移12位和第13位)
    • ASID 字段,是当前进程的ASID,在对 TLB 访问查询中起到验证的作用(具体见 ASID 部分)。
  • EntryLo0-1
    • PFN 对应的物理页框号
    • D(dirty) 标志位,置位时允许写入;0 不允许写入,若写入则发生异常
    • V(valid) 有效位
    • G(global) 表明该 TLB 表项是全局的还是属于特定进程的,若是全局的,则对该 TLB 表项的读取都会无视 ASID 是否匹配
  • EntryHi 与 EntryLo 一道负责 TLB 的写入与读取操作,tlbr 将读到的 TLB 表项写入 EntryHi(注意这一步会覆盖原本的 ASID,执行之后需要恢复)与 EntryLo 之中。
  • PageMask
    • 用于支持更大的页,PageMask 寄存器值为 1 的位,在执行 TLB 表项匹配时被忽略(即 PageMask 寄存器值为 1 的位被视作页内偏移位),如: PageMask 低 12 位为 1,则表明页大小为 4KB。
    • 另外,在 MIPS 体系中,页的大小在 4KB 和 16MB 之间以四倍递增。

TLB 选择寄存器

  • index

    • 值为 0 到 表项总数 - 1 之间的一个数,用于指出 tlbr、tlbwi 读写的是第几个 TLB 表项。
  • Random
    • 保存 TLB 的一个索引,CPU 每执行一条指令就向下递减计数一次,该值充当 tlbwr 的 TLB 索引,在需要更新 TLB 时,帮助实现随机替换策略。

页表存取辅助寄存器

  • Context 和 XContext

    • 辅助处理 TLB 重填异常,其中 XContext 是 MIPS64 位中增加的
    • 32位的 Context 数据域为:
    31 - 23 22 - 4 3 - 0
    PTEBase BADVPN2 0
    • PTEBase 存储页表空间的起始地址(因为起始地址是 8M 对齐)
    • BADVPN2 是 BADAddr 的 VPN2 域,BADAddr 是引起重填异常的虚拟地址
    • 实际上 32 位中一个页表项只有 64 位大(VPN2 下),但是 MIPS 为了与 64 位页表兼容,预留成 2*64 位大
    • 因为 PTEBase 是页表空间的起始地址,BADVPN2 标明该 BADAddr 所对应的是第 BADVNP2 个页表项,故 BADVPN << 4 就是 BADAddr 对应的页表项相对于页表空间起始地址的偏移,所以当发生重填异常的时候,Context 存储的就是对应页表项的虚拟地址,即需要加载到 EntryLo0-1中的数据项的地址。所以依靠 Context 的辅助,能够极大程度的简化重填异常处理的过程。

TLB 重填异常处理

mfc0 k1, C0_CONTEXT
lw k0, 0(k1)
lw k1, 8(k1)
mtc0 k0, C0_ENTRYLO0
mtc0 k1, C0_ENTRYLO1
ehb
tlbwr
eret
  • ehb 汇编指令用于保证 ehb 之前对协处理器 0 的操作都会在执行该条指令之后指令时已完成

参考资料:See MIPS Run Linux (2nd edition)

ASID 与 MIPS 中 TLB 相关的更多相关文章

  1. MIPS中的异常处理和系统调用【转】

    转自:http://blog.csdn.net/jasonchen_gbd/article/details/44044091 权声明:本文为博主原创文章,转载请附上原博链接. 异常入口 系统调用是用户 ...

  2. kernel 3.10内核源码分析--TLB相关--TLB概念、flush、TLB lazy模式 【转】

    转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&id=4808877&uid=14528823 一.概念及基本原理 TLB ...

  3. 理解CSV文件以及ABAP中的相关操作

    在很多ABAP开发中,我们使用CSV文件,有时候,关于CSV文件本身的一些问题使人迷惑.它仅仅是一种被逗号分割的文本文档吗? 让我们先来看看接下来可能要处理的几个相关组件的词汇的语义. Separat ...

  4. Spring Framework------>version4.3.5.RELAESE----->Reference Documentation学习心得----->Spring Framework中web相关的知识(概述)

    Spring Framework中web相关的知识 1.概述: 参考资料:官网documentation中第22小节内容 关于spring web mvc:  spring framework中拥有自 ...

  5. storm-kafka组件中KafkaOffsetMetric相关统计指标说明

    storm-kafka组件中KafkaOffsetMetric相关统计指标说明 storm-kafka是storm提供的一个读取kakfa的组件,用于从kafka队列中消费数据.KafkaOffset ...

  6. Linux中mod相关的命令 内核模块化 mod相关命令都是用来动态加载内核模块/驱动程序模块

    Linux中mod相关的命令 内核模块化   mod相关命令都是用来动态加载内核模块/驱动程序模块 http://baike.baidu.com/link?url=lxiKxFvYm-UfJIxMjz ...

  7. 补充:sql server 中的相关查询、case函数

    相关查询(在同一个表中) 相关查询类似子查询,但是又不同于子查询:子查询中的子条件可以单独查出数据,但是相关查询的子条件不能查处数据.(可以理解成C#中for的穷举法,第一个for走一个,第二个for ...

  8. c语言中数组相关问题

    c语言中数组相关问题: 1.数组基本定义: 相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标.组成数组 ...

  9. 【Socket编程】Java中网络相关API的应用

    Java中网络相关API的应用 一.InetAddress类 InetAddress类用于标识网络上的硬件资源,表示互联网协议(IP)地址. InetAddress类没有构造方法,所以不能直接new出 ...

随机推荐

  1. linux命令之磁盘与文件系统管理命令(上)

    1.fdisk:磁盘分区工具 该命令是linux下常用的磁盘分区工具,但是只能给小于2TB的磁盘划分分区. 常用参数为-l,显示所有磁盘分区的信息. 示例: 1)显示磁盘分区列表 [root@boxi ...

  2. 解决winform datagridview的ClearSelection无效问题

    因为把方法放在了界面的构造方法里,此时datagridview还没绘制出来,所以ClearSelection方法无效,放在control或form的load方法里就没问题了 参考:https://ww ...

  3. js导出页面的表格到excel(NB的大神洗了好几个,挑一个记下来)

    var idTmr; function getExplorer() { var explorer = window.navigator.userAgent ; //ie if (explorer.in ...

  4. 根据浏览器判断是否为Android、ios或微信环境

    写h5页面时经常有业务逻辑需要判断页面所处的环境,这时我们可以通过navigator对象来获取浏览器相关信息加以判断,方法如下: let ua = navigator.userAgent; let i ...

  5. Oracle PL/SQL学习之你需要知道的快捷键

    1.格式化sql语句 Ctrl+A  然后  Ctrl+F7 2.窗口最大化最小化 首选项-->快捷键-->Maximize Toggle,然后修改成自己熟悉的快捷键设置.

  6. zookeeper 数据节点的增删改查

    1.连接服务端 [root@localhost bin]# ./zkCli.sh -server 127.0.0.1:2181 Connecting to 127.0.0.1:2181 2018-05 ...

  7. gdb调试工具常用命令

    编译程序时需要加上-g,之后才能用gdb进行调试:gcc -g main.c -o main gdb中命令: 回车键:重复上一命令 (gdb)help:查看命令帮助,具体命令查询在gdb中输入help ...

  8. 接口自动化测试框架 :APIAutoTest框架

    前言 随着测试技术的发展,接口自动化测试逐渐成为各大公司投入产出比最高的测试技术.介入时间早,执行效率高,稳定性高的优点,让越来越多的公司引入接口自动化测试. 框架简介 APIAutoTest是处理A ...

  9. 80x25彩色字符模式

    80x25彩色字符模式下显示缓冲区的结构: 在内存地址空间中,B8000H~BFFFFH共32KB的空间,为80x25彩色字符模式的显示缓冲区.往这个地址空间中写入数据,写入的内容会立即出现在显示器上 ...

  10. 3dsmax2015卸载/安装失败/如何彻底卸载清除干净3dsmax2015注册表和文件的方法

    3dsmax2015提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装3dsmax2015失败提示3dsmax2015安装未完成,某些产品无法安装,也有时候想重新 ...