本文节录自自撰《Linux内核原理》的部分章节。
A.58 ARMv8架构TLB (Transaction Lookaside Buffers)基本信息 (一)
A.58.1 格式
ARMv8的TLB没有固定格式。这点在架构手册中有说明:

(截图自架构手册D5.9.2 About Armv8 Translation Lookaside Buffers (TLBs)章节)
一般包含的字段:虚拟地址,物理地址,缓存策略,访问权限,ASID和VMID。
A.58.2 TLBI指令
I: Invalid
格式:
![]()
(截图自架构手册C3.1.6 System instructions )

常用Invalid操作:
|
编号 |
操作符 |
操作 |
|
1 |
ALLEn |
使ELn中所有TLB无效。 |
|
2 |
ALLEnIS |
使ELn中所有内部共享的TLB无效。 |
|
3 |
ASIDE1 |
使EL1中ASID包含的TLB无效。 |
|
4 |
ASIDE1IS |
使EL1中ASID包含的内部共享TLB无效。 |
|
5 |
VAAE1 |
EL1中虚拟地址指定的所有TLB无效。 |
|
6 |
VAAE1IS |
EL1中虚拟地址指定的所有内部共享TLB无效。 |
|
7 |
VAEn |
ELn中所有虚拟地址指定的TLB无效。 |
|
8 |
VAEnIS |
ELn中所有虚拟地址指定的内部共享TLB无效。 |
A.58.3 Linux的相关API
在arch/arm64/include/asm/tlbflush.h中定义。
|
编号 |
操作符 |
操作 |
|
1 |
flush_tlb_all |
CPU上全部TLB无效。 |
|
2 |
flush_tlb_mm |
进程的用户空间全部TLB无效。 |
|
3 |
flush_tlb_page |
虚拟地址对应的page的TLB无效。 |
|
4 |
flush_tlb_range |
进程地址空间中一段地址的TLB无效。 |
|
5 |
flush_tlb_kernel_range |
内核地址空间中一段地址的TLB无效。 |
194

被折叠的 条评论
为什么被折叠?



