baron · 3月20日 · 四川

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

快速连接

👉👉👉【精选】ARMv8/ARMv9架构入门到精通-目录 👈👈👈


 title=

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 的切换

在这里插入图片描述


关注"Arm精选"公众号,备注进ARM交流讨论区。
图片1.png

推荐阅读
关注数
9466
内容数
212
以易懂、渐进、有序的方式,深入探讨ARMv8/ARMv9架构的核心概念。我们将从基础知识开始,逐步深入,覆盖最新的架构,不再纠缠于过时技术。本系列内容包含但不限于ARM基础、SOC芯片基础、Trustzone、gic、异常和中断、AMBA、Cache、MMU等内容,并将持续更新。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息