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

相关推荐
小明bishe1817 小时前
计算机毕业设计之基于JAVA的植物科普网站
java·spring boot·spring·架构·课程设计
聪明的一休丶18 小时前
VLLM v0.24.0 版本深度解析:新引擎、新架构与大规模服务全家桶升级
python·架构·vllm
数据库小学妹20 小时前
KES是什么?国产数据库技术架构、核心能力与选型实战解析
数据库·经验分享·架构·国产数据库·数据库选型·信创数据库
会写代码的建筑师1 天前
C# 源生成器使用方法
后端·架构
没落英雄1 天前
3. DeepAgents 实战 - Memory Skills 与上下文工程
前端·人工智能·架构
Yeats_Liao1 天前
18:JavaBean简介及其在表单处理与DAO设计模式中的应用-Java Web
java·后端·架构
人工智能培训1 天前
大模型驱动下传统大数据架构的变革方向
大数据·人工智能·重构·架构·agent·agi
饼干哥哥1 天前
一篇文章卖了20万,开源CC+Obsidian打造的LLM Wiki 内容创作3.0系统
架构·开源·代码规范
想你依然心痛1 天前
固件架构演进:从裸机到RTOS到Linux的决策矩阵——复杂度、实时性、成本三维解析
架构·嵌入式·响应式编程·数据流·流处理·资源控制·背压
贺国亚1 天前
OpenClaw-架构原理与工程实践
架构