当前位置:网站首页>linux内核源码分析之页表缓存
linux内核源码分析之页表缓存
2022-07-25 16:17:00 【为了维护世界和平_】
处理器的内存单元(MMU)负责把虚拟地址转换成物理地址。为了改进虚拟地址到物理地址的转换速度,引入TLB的高速缓存。即页表缓存
页表缓存用来缓存最近使用过的页表项,有些处理器使用两级页表缓存:第一级TLB分为指令TLB和数据TLB,第二级TLB是统一TLB,即指令和数据公用TLB
TLB管理
如果内核修改了缓存在TLB中的数据,那么旧的数据必须废除,内核如何保证一致性?
| 函数 | |
| flush_tlb_all | 使所有TLB失效 |
| flush_tlb_mm | 使指定用户地址空间的所有TLB失效 |
| flush_tlb_range | 使指定的地址空间范围的TLB失效 |
| flush_tlb_page | 使指定用户地址空间里面的指定虚拟地址页的TLB表项失效 |
| flush_tlb_kernel_range | 使内核虚拟地址范围的TLB表项失效 |
| update_mmu_cache | 修改页表项后把页表项设置到页表缓存,由软件管理页表缓存的处理器必须实现此函数。 |
| tlb_migrate_finish | 内核把进程从一个处理器迁移到另外一个处理器后,调用此函数以更新页表缓存或上下文特定信息。 |
当TLB没有命中的时候,ARM64处理器的内存管理单元自动遍历内存中的页表,把页表项复制到TLB,不需要软件把页表写到TLB,所以ARM64架构没有提供写TLB的指令。
#define isb() asm volatile("isb" : : : "memory")
#define dmb(opt) asm volatile("dmb " #opt : : : "memory")
#define dsb(opt) asm volatile("dsb " #opt : : : "memory")
#define __TLBI_1(op, arg) asm ("tlbi " #op ", %0\n" \
ALTERNATIVE("nop\n nop", \
"dsb ish\n tlbi " #op ", %0", \
ARM64_WORKAROUND_REPEAT_TLBI, \
CONFIG_ARM64_WORKAROUND_REPEAT_TLBI) \
: : "r" (arg))
#define __TLBI_N(op, arg, n, ...) __TLBI_##n(op, arg)
#define __tlbi(op, ...) __TLBI_N(op, ##__VA_ARGS__, 1, 0)static inline void flush_tlb_all(void)
{
dsb(ishst);
__tlbi(vmalle1is);
dsb(ish);
isb();
}
展开后的程序为
static inline void flush_tlb_all(void)
{
//确保屏障前面的存储指令执行完,dsb是数据同步,ish表示共享域是内部共享,st表示存储
asm volatile("dsb ishst" : : : "memory");
//使所有核匹配当前VMID,阶段1和异常级别1的所有TLB表项失效
asm ("tlbi vmallelis" : :);
//确保TLB前面指令执行完毕
asm volatile("dsb ish" : : : "memory");
//指令同步屏障,指令冲刷处理器的流水线,重新读取屏障指令后面的所有指令
asm volatile("isb" : : : "memory")
}
local_flush_tlb_all用来使当前核的所有TLB表项失效
static inline void local_flush_tlb_all(void)
{
dsb(nshst);
__tlbi(vmalle1);
dsb(nsh);
isb();
}
和函数flush_tlb_all的区别如下
1)指令dsb中的ish换成了nsh,nsh是非共享,表示数据同步屏障指令仅在当前核起作用
2)指令tlbi没有携带is,表示仅仅使当前核的TLB表项失效。
地址空间标识
为了减少在进程切换时清空页表缓存的需要,ARM64处理器的页表缓存使用非全局位区分内核和进程的页表项。使用地址空间标识符ASID(Address Space Identifier)区分不同进程的页表项。
虚拟机标识符
虚拟机里面运行的客户操作系统的虚拟地址换成物理地址分两个阶段:第1阶段把虚拟 地址转换成中间物理地址,第2阶段把中间物理地址转换成物理地址。第1阶段转换由客户操作 系统的内存控制,和非虚拟化的转换过程相同。第2阶段转换由虚拟机监控器控制,虚拟机监 控器为每个虚拟机维护一个转换表,分配一个虚拟机标识符(Virtual Machine Identifier,VMID),寄存器VTTBR_EL2(虚拟化转换表基准寄存器,Virtualization Translation Table Base Register)存放当前虚拟机的阶段2转换表的物理地址。
参考链接
https://course.0voice.com/v1/course/intro?courseId=2&agentId=0
边栏推荐
- 食品安全丨无处不在的冷冻食品,你真的了解吗?
- Paper notes: highly accurate protein structure prediction with alphafold (alphafold 2 & appendix)
- What is a physical firewall? What's the effect?
- MySQL self incrementing lock
- How does win11's own drawing software display the ruler?
- MySQL 元数据锁(MDL)
- MySQL 悲观锁
- 如何构建面向海量数据、高实时要求的企业级OLAP数据引擎?
- doGet与doPost
- Sum arrays with recursion
猜你喜欢

如何构建面向海量数据、高实时要求的企业级OLAP数据引擎?

泰雷兹推出解决方案,助力SAP客户控制云端数据
![[image denoising] image denoising based on bicube interpolation and sparse representation matlab source code](/img/39/716c62d6ca533a7e84704b2c55d072.png)
[image denoising] image denoising based on bicube interpolation and sparse representation matlab source code
![[fault diagnosis] bearing fault diagnosis based on Bayesian optimization support vector machine with matlab code](/img/9e/138e4b160fa9bd6486fac44a788d09.png)
[fault diagnosis] bearing fault diagnosis based on Bayesian optimization support vector machine with matlab code

哪个led显示屏厂家更好

Is the win11 dynamic tile gone? Method of restoring dynamic tile in Win 11

JWT diagram

2W word detailed data Lake: concept, characteristics, architecture and cases

How does win11's own drawing software display the ruler?

聊聊如何用 Redis 实现分布式锁?
随机推荐
Pagehelper.startpage is not effective
[JS advanced] JS regular correlation functions and regular objects_ 02
pymongo保存dataframe格式的数据(insert_one, insert_many, 多线程保存)
leetcode:154. 寻找旋转排序数组中的最小值 II【关于旋转排序数组的中后定位二分法】
Mqtt x cli officially released: powerful and easy-to-use mqtt 5.0 command line tool
Quickly deploy mqtt clusters on AWS using terraform
The annualized interest rate of treasury bonds is too low. Is there a financial product with a higher annualized interest rate than the reverse repurchase of treasury bonds?
今天睡眠质量记录84分
tkinter模块高级操作(一)—— 透明按钮、透明文本框、自定义按钮及自定义文本框
Exploration of 6-wire SPI transmission mode
没错,请求DNS服务器还可以使用UDP协议
How to build an enterprise level OLAP data engine for massive data and high real-time requirements?
Equivalent change of resistance circuit (Ⅱ)
2w字详解数据湖:概念、特征、架构与案例
MySQL global lock
Release of v6.5.1/2/3 series of versions of Xingyun housekeeper: the ability of database OpenAPI continues to be strengthened
Paper notes: highly accurate protein structure prediction with alphafold (alphafold 2 & appendix)
Test Driven Development (TDD) online practice room | classes open on September 17
Save the image with gaussdb (for redis), and the recommended business can easily reduce the cost by 60%
How does win11's own drawing software display the ruler?