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 条目才会被认为是有效的。</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值