JJJ:arm64架构下的asid相关

文章目录

ASID

ASID(Address Space Identifier,地址空间标识符)用于区分不同的虚拟地址空间,确保每个进程的页表项是唯一的。

现代操作系统允许多个进程并发运行,每个进程都有自己的虚拟地址空间。为了高效地管理这些地址空间,ARM64 架构引入了 ASID 来唯一标识每个进程的页表。

TLB(Translation Lookaside Buffer)是加速虚拟地址到物理地址转换的一种硬件缓存,可以把它理解成一种快速页表。

TLB中的每一个条目,不仅包含虚拟地址和物理地址之间的映射,还包括 ASID。只有当虚拟地址和 ASID 都匹配时,才能找到对应的物理地址。

操作系统为每个进程分配一个唯一的 ASID。通常,ASID 是在一个范围内循环使用的,以确保不会耗尽可用的 ASID。

当进程切换时,操作系统会更新 TTBR0_EL1 和 TTBR1_EL1 寄存器中的 ASID 字段。如果新进程的 ASID 与旧进程不同,则 TLB 中的现有条目仍然有效;如果相同,则需要刷新 TLB(不然真的会访问到错误的物理地址)。如此可以减少不必要的TLB刷新次数

TTBR0_EL1:用于用户空间页表基址。

TTBR1_EL1:用于内核空间页表基址。

ASID版本号

实际使用的 ASID 可以看作是由两部分组成的:一部分是传统的 ASID,另一部分是版本号。

当一个新的进程创建时,操作系统会为它分配一个新的 ASID 和初始版本号(通常是 0)。

当 ASID 资源快耗尽时,操作系统可以通过增加版本号来重新利用旧的 ASID。每次 ASID 回收并重新分配时,版本号都会递增。

当版本号发生变化时,操作系统需要刷新 TLB,以确保所有旧的、不匹配的条目都被清除。这可以通过执行 TLB 无效化指令(如 TLBI 指令)来完成。

在 TLB 查找过程中,CPU 不仅会检查虚拟地址和 ASID,还会检查版本号。只有当三者都匹配时,TLB 条目才会被认为是有效的。

举例

参考:地址空间标识符ASID

寄存器TTBR0_EL1(转换表基准寄存器0)或TTBR1_EL1(转换表基准寄存器1)都可以用来存放ASID。

寄存器TCR_EL1的A1位决定使用哪个寄存器存放当前进程的ASID。

通常使用TTBR0_EL1寄存器TTBR0_EL1的位[63:48]存放当前ASID,[47:1]存放当前进程的页全局目录物理地址(如果是8位,[63:56]是保留位;)

以ASID为8位长度叙述

ASID只有256个值,其中0是保留值;进程数量超过255,两个ASID可能相同,内核引入版本号,解决。具体步骤如下:

1)每个进程有64位软件ASID,低8位存放硬件ASID,高56位存放ASID版本号;

2)64位全局变量asid_generation的高56位保存全局ASID版本号;

3)当进程被调度时,比较进程ASID版本号和全局ASID版本号,如果版本号相同,那么直接使用上次分配的硬件ASID,否则重新给进程分配硬件ASID。如果存在空闲的硬件ASID,那么选择一个分配给进程;如果没有空闲的硬件ASID,把全局ASID版本号加1,重新从1开始分配硬件ASIDA.因为刚分配的ASID可能和某个进程的硬件ASID相同,只是ASID版本号不同,页表缓存可能包含了这个进程的页表项,所以必须把所有处理器的页表缓存清空。

引入版本号好处:避免每次进程切换都需要清空页表缓存,只需要在硬件ASID回滚时,把处理器的页表缓存清空。

处理器给进程分配ASID时,如果ASID分配完了,那么把全局ASID加1,重新从1开始分配ASID,针对每个处理器,使用该处理器的reserved_asids保存该处理器正在执行的进程的ASID,并且把该处理器的active_asids设置0。active_asids为0 具有特殊意义,说明全局ASID版本号变化,ASID从255回到1

相关推荐
moton20173 小时前
云原生:构建现代化应用的基石
后端·docker·微服务·云原生·容器·架构·kubernetes
小肚肚肚肚肚哦5 小时前
函数式编程中各种封装的对比以及封装思路解析
前端·设计模式·架构
m0_748245528 小时前
冯诺依曼架构和哈佛架构的主要区别?
微服务·云原生·架构
倔强的石头10617 小时前
解锁辅助驾驶新境界:基于昇腾 AI 异构计算架构 CANN 的应用探秘
人工智能·架构
qzhqbb17 小时前
web服务器 网站部署的架构
服务器·前端·架构
weixin_SAG18 小时前
第3天:阿里巴巴微服务解决方案概览
微服务·云原生·架构
helianying5520 小时前
云原生架构下的AI智能编排:ScriptEcho赋能前端开发
前端·人工智能·云原生·架构
大梦百万秋1 天前
探索微服务架构:从单体应用到微服务的转变
微服务·云原生·架构