首页 > 其他分享 >ARM64中的ASID地址空间标识符

ARM64中的ASID地址空间标识符

时间:2024-06-10 11:12:16浏览次数:30  
标签:ASID ARM32 TLB ARM64 寄存器 进程 标识符

1. 从ARM32到ARM64

从ARM32到ARM64不止将处理器从32位升级到了64位,还有许多性能的技术也得到了极大的提升,光是个头长了可不行啊!能耐也得跟着长啊!哈哈哈

1.1 ARM32的TLB机制

image

如上图所示,上一讲我们讲了TLB的每一条表项都有一个bit用来表示自己是全局的(内核空间)还是本地的(用户空间)。当进程发生切换是,操作系统必须将TLB中缓存用户空间转换关系的表项全部清空,以保证下一个进程不会使用上一个进程的地址转换关系。

这样,在ARM32中每切换一次进程就需要刷一次TLB表中的本地表项,如果进程切换的频繁,处理器损失的性能是比较大的。

1.2 ASID(地址空间标识符)

上一篇文章我们提到了鸡肋的FCSE技术,其实从ARMv6开始,ARM就反对使用任何FCSE机制。到了ARMv7时代,FCSE是可选的,直到ARMv7多处理架构才彻底淘汰了FCSE(起码从白皮书上搜这个关键字是找不到了),到了ARMv8,处理器迎来了64位的时代,ASID技术已经早已成熟。

ASID这项技术在ARMv7多处理器架构就开始使用了,只不过在ARMv7里,ASID是8位的,也就是256就溢出了,而在ARMv8架构中,ASID可以配置为16位,也就是计到65536才会溢出,ASID位数扩大的好处文章后面会讲。为每一个进程分配一个ASID的话,256个就溢出了,所以在Linux中ASID溢出后就要重新洗牌了。

说到ASID,还要从ARM的TTBR寄存器开始说起,前面文章我们讲过了MMU的TTBR寄存器,但是并没有给出TTBR寄存器的bit描述,这里列出ARM32和ARM64的TTBR寄存器格式描述

1.2.1 ARM32的TTBR0寄存器格式

image

1.2.2 ARM64的TTBR0寄存器格式

image
可以看出在ARM32的TTBR寄存器里是没有ASID这个属性的,粗暴点的说,操作系统切换进程其实就是切页表,切页表就是改写TTBR寄存器的值,那么很容易知道Linux会为每一个进程分配一个独用的ASID码,Linux为每个为进程分配的ASID值都不相同。

这么一来,MMU再做页表转换时也会把当前的ASID值缓存到TLB快表里,

ARM64的TLB机制

image

有了ASID后,TLB跟以前也不一样了,在进程切换的时候,操作系统也不需要去刷TLB了,因为MMU在做地址转换时会将TLB表项里的ASID和当前进程的ASID值做比较,只有ASID值相等,MMU才认为这条表项是我需要的。

所以和没有ASID技术的ARM32相比,ARM64在进程切换上提升了较大的性能。

标签:ASID,ARM32,TLB,ARM64,寄存器,进程,标识符
From: https://www.cnblogs.com/linhaostudy/p/18240491

相关文章

  • RDK X3(arm64) 测试国产双目摄像头Astra Pro Plus
    0.环境-亚博智能的ROSMASTER-X3标准版(双目是AstraProPlus)-RDKX31.01.RDKX31.0串口通信波特率921600root/rootmobaterm->Session->VNC   ->192.168.8.108:5900   ->runrise2.是否识别到设备2.1USB扩展版上电前:root@ubuntu:~#lsusbB......
  • 标识符
    标识符(identifier)指的是用来识别各种值的合法名称。最常见的标识符就是变量名,以及后面要提到的函数名。JavaScript语言的标识符对大小写敏感,所以a和A是两个不同的标识符。标识符有一套命名规则,不符合规则的就是非法标识符。JavaScript引擎遇到非法标识符,就会报错。中文是合......
  • Java标识符 注意点⚠️
    标识符就是用于给Java程序中变量、类、方法等命名的符号所有的标识符都应该以字母(A-Z或者a-z),美元符($),或者下划线(_)开始StringAhello="";Stringahello="";String$hello="";String_hello="";标识符的首字符之后可以是字母(A-Z或者a-z),美......
  • UUID vs. 雪花算法:生成唯一标识符的选择
    在软件开发中,经常需要生成唯一标识符来区分对象或实体,以确保数据的唯一性和安全性。UUID(UniversallyUniqueIdentifier)和雪花算法(SnowflakeAlgorithm)是两种常见的唯一标识符生成方法。UUID特点:全球唯一性:根据标准规范生成,几乎可以肯定地说,在给定的时间和空间范围内,UUID几......
  • 标识符的分类
    标识符(identifier)是标识某个实体的符号,是程序员给变量、常量、函数、语句块等起的名字。标识符只能由字母、数字和下划线组成,且不能以数字开头。C语言的标识符可以分为三类。1.关键字关键字(Keyword)指编程语言标准中规定好的具有固定含义的词汇,如int、if、else、for等都是关......
  • JavaSE 关键字和标识符
    目录关键字标识符标识符命名规则标识符命名规范字面值关键字具有特殊含义的命名时不可以与关键字重名标识符也就是名字,对类名,变量名称,方法名称,参数名称等修饰标识符命名规则以字母,下划线_或者$开头,其后可以是字母,数字,下划线或$如:Aa$hm5abc69_如:helloHELL......
  • 从MASM全局标识符谈模块化开发
      博主学习的第一个编程语言是C语言(跟谭教授学的),当时时就疑惑一个问题,为什么要将源码分成多个文件,每个文件编译成目标文件(obj)文件后,再通过连接程序(link)将多个目标文件连接成单个执行文件。后来通过更深入的开发一些规模稍大一点的软件,及了解计算机的发展历史后,逐渐清晰起来:......
  • arm64 下内核 crash—— 非法地址
    下面是在实际工作中遇到的一次内核(5.4.110)访问非法内存地址(空指针)导致出错的现场,在这里记录一下简单的分析流程为以后遇到类似的问题作为参考。[220.619861]UnabletohandlekernelNULLpointerdereferenceatvirtualaddress0000000000000023[220.628815]Memabort......
  • Burp Suite Professional 2024.4 for macOS x64 & ARM64 - 领先的 Web 渗透测试软件
    BurpSuiteProfessional2024.4formacOSx64&ARM64-领先的Web渗透测试软件世界排名第一的Web渗透测试工具包请访问原文链接:BurpSuiteProfessional2024.4formacOSx64&ARM64-领先的Web渗透测试软件,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org......
  • Python基础知识——缩进、标识符、保留字
    标识符标识符就是程序中,使用的各种名称,例如:变量名、常量名、类名等等。在Python中,对标识符格式的要求与C/C++、Java等差不多:第一个字符必须是字母表中的字母或下划线_;标识符的其他的部分,由字母、数字和下划线组成;标识符对大小写敏感;标识符不能与保留字相同。比如:nu......