TLB之flush操作[二]

本文详细介绍了ARMv8-A架构中TLB flush(或invalidate)的操作,涉及指令TLBI的使用,如TLBI VAE1, X0等,以及如何根据不同的参数实现对TLB条目的特定选择或全部清除。同时对比了x86架构中的相应指令,如INVLPG、INVPCID等,并以Linux操作系统为例,展示了flush_tlb_all()和flush_tlb_mm()等API如何调用底层指令完成TLB管理。" 108793434,8074708,配置 VLAN 实践:交换机与网络互连,"['网络', '交换机配置']
摘要由CSDN通过智能技术生成

【相关指令】

在ARMv8-A中,TLB flush/invalidate(通常ARM/x86处理器手册中称为invalidate,linux系统中称为flush,以下的讨论统称为flush)的指令为:

TLBI {IS} {, }
其中,"level"为1到3,对应ARMv8的三个exception level,即EL1,EL2,EL3,通常EL1运行linux等操作系统,EL2在虚拟化模式下运行hypervisor。

"type"相当于一个filter,指按照什么规则去选择被flush的item,包括VA(Virtual Address),IPA(Intermediate Physical Address),ASID(Adress Space Identifier),VMID(Virtual Mechine Identifier)等。在虚拟化模式下,IPA即EL1层的物理地址,它需要经过EL2层的转化才能成为最终的物理地址。ASID是区别有相同虚拟地址的不同进程的,VMID是区别有相同虚拟地址的不同虚拟机的。

"Xt"是可选参数,表示通用寄存器X0到X30。例如 “TLBI VAE1, X0”,表示将flush虚拟地址(type为VA)等于X0寄存器值的这个TLB entry。当然也可以使用“TLBI ALLELn”将TLB中的所有entries全部flush。

“IS”(Inner Shareable)也是可选参数。Inner和Outer是描述cache属性的,通常一个CPU独有的(比如L1 cache)和一个cluster下的CPU共享的(比如L2 cache)被定义为inner,不同cluster的CPU共享的(比如L3 cache)被定义为outer。

TLB也是一种cache,但不管是L1 data/instuction TLB,还是L2 LTB,都是每个CPU单独一份,所以都是inner的。Shareable是描述内存属性的,表示该内存区域是否可被多核共享。

对于多核共享的内存,当其中的某个核,比如,对共享内存中的某个page做了访问限制,它需要通过发出IPI(Inter Processor Interrupt)的方式,来通知其他核flush各自的TLB,这种方式被称为TLB击落(shootdown),在ARM指令上的体现就是TLBI IS。

和ARM使用一条指令配合不同参数来处理不同的TLB flush操作有所不同,作为CISC(复杂指令集)的典型代表,x86采用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值