context switch的切换过程(TTBR0的切换/ASID的介绍)

271 篇文章 410 订阅

快速链接:
.
👉👉👉 个人博客笔记导读目录(全部) 👈👈👈

在这里插入图片描述

context switch的切换

操作系统中可能存在多个任务, 内核调度器周期性地将执行从一项任务转移到另一项任务。在这个过程中,操作系统会保存上一个进程的执行状态,然后恢复下一个进程的执行状态,这个过程这称为context switch, 那么context switch的过程中,都保存和恢复了哪些东西呢,如下所示:

  • general-purpose registers X0-X30.
  • Advanced SIMD and Floating-point registers V0 - V31.
  • Some status registers.
  • TTBR0_EL1 and TTBR0.
  • Thread Process ID (TPIDxxx) Registers.
  • Address Space ID (ASID).
ASID的介绍

现代操作系统的所有应用程序似乎都从同一地址区域运,这就是我们所说的用户空间。在实践中,不同的应用程序需要不同的MMU映射。例如,每一个应用程序都有VA 0x8000地址,需要使用各自对应的页表进行转换.

理想情况下,我们希望不同应用程序的翻译都能够存储在TLB,而又希望在上下文切换时无需invalid TLB。但是处理器如何知道目前TLB存储的VA 0x8000是哪个进程的呢?在 Armv8‑A 中,答案就是使用ASID进行标识。
在这里插入图片描述
那么对于TLB条目中,缓存的ASID到底是来自TTBR0还是来自TTBR1呢,由TCR寄存器的配置决定:
在这里插入图片描述

对于 EL0/EL1 虚拟地址空间,Page Descriptor属性字段中的 nG 位将转换标记为Gloabl(G) 或non-Gloabl(nG)。例如,内核映射是Gloabl(G)翻译,应用程序映射是non-Gloabl翻译。Gloabl翻译适用于当前正在运的任何应用程序。非全局翻译仅适用于特定应用程序
在这里插入图片描述

non-Gloabl映射在 TLB 中使用 ASID进行标记。在 TLB 查找时,将 TLB 条目中的 ASID 与当前选择的 ASID 进行比较。如果它们不匹配,则不使用TLB 条目。下图显示了内核空间中没有 ASID 标记的全局映射和用户空间中具有 ASID 标记的非全局映射
在这里插入图片描述

TLB Entry里都有什么?

以cortex-A710为例,TLB Entry(L1 data TLB returned data)里都有什么?

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

Linux Kernel代码导读
TTBR0_EL1 和 ASID 的切换

在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码改变世界ctw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值