JJJ:arm64架构下的asid相关

每个程序员都应该了解的“虚拟内存”知识 [编辑注:本文是Ulrich Drepper的“每个程序员应该了解的内存方面的知识”文章的第三部分;这一部分谈论了虚拟内存,特别是TLB性能。没有阅读第1部分和第2部分的人可能现在就想读一读了。和往常一样,请将排字错误报告之类发送到lwn@lwn.net,而不要发送到这里的评论。] 4 虚拟内存 处理器的虚拟内存子系统为每个进程实现了虚拟地址空间。这让每个进程认为它在系统中是独立的。虚 阅读详情

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

ABAQUS应用15——Abaqus软件中边界条件与力学中自由度的关系 核心关系:Abaqus通过约束自由度实现边界条件,自由度类型由单元决定。正确设置步骤:确定模型类型(实体/梁/壳)。识别节点的自由度(平动或转动)。根据实际约束施加对应的自由度限制。验证:通过检查变形模式、反力分布等确认边界条件合理性。正确理解自由度与边界条件的关系,是确保有限元模型准确模拟实际物理行为的关键。 阅读详情

相关推荐

Exchange 2013/2016/2019修改附件大小限制

Exchange 2013/2016/2019邮件大小限制 可以在三个位置上配置Exchange上的默认邮件大小限制: 组织传输设置 发送/接收连接器设置 用户邮箱设置 1.打开Exchange Management Shell 使用命令查看默认限制 get-transportconfig | ft maxsendsize, maxreceivesize get-receiveconnector | ft name, maxmessagesize get-sendconnector | ft

高级基础架构专家-Hunter 6094

地址空间标识符ASID

处理器给进程分配ASID时,如果ASID分配完了,那么把全局ASID加1,重新从1开始分配ASID,针对每个处理器,使用该处理器的reserved_asids保存该处理器正在执行的进程的ASID,并且把该处理器的active_asids设置0。1、如果进程的ASID与全局ASID版本号相同,那么调用函数atomic64_xchg 把当前处理器的active_asid设置成进程的ASID,并且返回active_asids的旧值。进程数量超过255,两个ASID可能相同,内核引入版本号,解决。

2350

基于价值的深度强化学习:DQN

本文主要是介绍DQN原理和算法伪代码和代码实现,算法实现包括pytorch版本和stable-baselines3版本

溯源的专栏 1082

ARM系列之MMU TLB和ASID基础概念介绍。

通常情况下,在使用 Cortex-A 系列处理器的时候,典型场景是跑多任务 OS;每一个任务(或者成为应用),都有它独立的虚拟地址空间,以及他的独立的 Translation Table;但是对于 OS 来说,Kernel 的 Translation Tables 其实是固定的,只是进程之间的 Translation Tables 不一样而已;当一个进程启动的时候,OS 负责为他 code 和 data 段建立映射表(Translation Tables);

ZP1015 4258

解密DS90UB983-Q1的汽车电子魔法:如何通过FPD-Link IV实现4K视频的无缝传输

本文深入解析了德州仪器DS90UB983-Q1串行器芯片如何通过FPD-Link IV技术在汽车电子中实现4K视频无缝传输。文章详细介绍了该技术的核心功能,包括多流传输(MST)模式、热插拔检测(Hot Plug Detect)机制以及电磁兼容性设计,为车载信息娱乐系统提供了高带宽、低延迟的可靠解决方案。

i3j4k5的博客 239

清华源pip install出现ERROR: Could not find a version that satisfies the requirement的解决方案

本文主要介绍了清华源pip install出现ERROR: Could not find a version that satisfies the requirement的解决方案,希望能对学习python的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 8万+

ASID

为了提高TLB的性能,将TLB分成Global和process-specific。global 是指常驻在tlb中不会被刷出的,例如内核空间的翻译,process-specific 是指每个进程独有的地址空间,当发生进程切换的时候,这部分tlb可以被刷出 为了支持process-specific的tlb,arm提出了ASID(Adress Space ID)的硬件解决方案,这样TLB就可以识别出...

jason的笔记 9170

JavaScript - Blob / File / base64 使用场景介绍与相互转换

前言 本文首先介绍一下这三种对象使用场景,最后介绍下它们之间互转格式的解决方案。 您前端一旦涉及到文件或图片上传到服务器, 就势必离不了Blob/File/base64三种主流的类型。 Blob MDN:https://developer.mozilla.org/zh-CN/docs/Web/API/Blob 您可以观察到,像一些图片处理插件(例如有名的vue-cropper)图片裁剪插件, 它们将图片处理完毕后,都将使用blob对象返回处理好的图片,供开发者用于上传服务器。

🏆 前端领域优质创作者 4491

Linux进程管理:(三)进程调度

文章说明:Linux内核版本:5.0架构:ARM64参考资料及图片来源:《奔跑吧Linux内核》

qq_58538265的博客 1619

Python爬虫实战:百度贴吧帖子与评论抓取全攻略(附舆情分析技巧)

基础配置# 要爬取的贴吧名称(替换成自己需要的,比如“XX手游吧”)TIEBA_NAME = "XX手游"# 分页参数(每页50条帖子,可根据需求调整)PAGE_NUM = 3 # 爬取前3页帖子,共150条# 请求头(从浏览器复制自己的,更真实)Win64;

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2382

【ACP】2025-最新-疑难题解析- 练习一汇总

他们对您的方案比较满意,作为一个特别看重用户体验的创业公司,他们有一个比较担心的问题:在后端云服务器 ECS 实例相对空闲时,可能会触发减少 ECS 实例的伸缩活动,这时候运行在即将移出伸缩组的 ECS 实例上的应用会被终止,那么发起这些应用的用户的体验会变差。:在使用阿里云的负载均衡 SLB 实例时,做了如下健康检查的配置:响应超时时间为 5 秒,健康检查间隔为 2 秒,不健康阈值为 3,健康阈值为 3,即对于确认一个后端服务器 ECS 实例是健康的,需要连续三次得到正常响应。以下说法哪一项是正确的?

jundao1997的专栏 324

Linux内核进程上下文切换深入理解

我都知道操作系统的一个重要功能就是进行进程管理,而进程管理就是在合适的时机选择合适的进程来执行,在单个cpu运行队列上各个进程宏观并行微观串行执行,多个cpu运行队列上的各个进程之间完全的并行执行。进程管理是个复杂的过程,例如进程的描述、创建和销毁、生命周期管理、进程切换、进程抢占、调度策略、负载均衡等等。本文主要关注进程管理的一个切入点,那就是进程的上下文切换,来理解linux内核是如何进程进程上下文切换的,从而揭开上下文切换的神秘面纱。 (注意:本文以linux-5.0内核源码讲解,采用arm64架构)

lx123010的专栏 7621

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

VMID、ASID、PASID

ASID PASID VMID

qq_45024274的博客 2805

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

TLB、PCID与ASID的故事

转载:TLB、PCID与ASID的故事 最近学习过程中了解到TLB和PCID、ASID等概念,突然发现自己将TLB与Cache的概念容易搞混。于是深入了解这几个名词和关系,本周做一些总结。本文的各部分内容分布如下: TLB的引入 TLB与Cache PCID和ASID的引入与作用 一、TLB的引入 1.1 二级页表的地址访问 让我们想象这样的应用场景:CPU执行指令时,直接访问的是虚拟地址,若想获取到内存的真实数据时,需要先将虚拟地址转化为物理地址,然后由CPU访问物...

dongcheng_2015的博客 1122

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

TLB的ASID字段及其异常处理

通常情况下,TLB是全局共享的,意味着所有的进程都可以访问TLB中的缓存条目。然而,当多个进程共享同一个TLB时,可能会出现问题,因为不同进程可能会使用相同的虚拟地址对应不同的物理地址,这会导致TLB中的缓存条目不正确。总的来说,当TLB未命中时,硬件会引发异常,操作系统会处理异常并尝试解决TLB错误,最终使得CPU能够重新执行指令并成功命中TLB。此时,CPU会重新尝试之前发生异常的指令,因为现在TLB中已经有了正确的映射,所以这次指令应该会命中TLB,从而继续执行。这会导致引发一个异常,即TLB异常。

Kegi_的博客 795

asid

应用程序空间指示ASID(Application Space Identifier)是ARMv6体系中增加的又一关键特性。当nG位置位时,地址转换使用虚拟地址和ASID相结合的方法以减少上下文切换的时间。

jklinqing007的专栏 684

冷月手撕408之操作系统(5)-进程概述

操作系统的进程概述主要是介绍了进程的概念,进程的组成(进程实体)、进程的特征、进程的五状态模型、进程控制,其中重点掌握PCB、五状态模型及其状态转换。 主要的重点冷月做出了标识,知识点如下图(pdf版或xmind源文件请关注公众号:学长冷月,回复操作系统)。 冷月点睛 程序是静态的存储在计算机硬盘里面的计算机代码,而进程是程序在数据上的一次动态执行。 进程实体也叫进程映像,包括程序段、数据段、PCB。是进程的静态组成。 PCB,进程控制块,进程存在的唯一标识,常驻内存中。 进程最主要、最基本的特征是动态性

学长冷月的博客 2215

RISC-V 虚拟存储系统(文档阅读学习)

RISC-V 虚拟存储系统相关内容,主要来自RISC-V特权手册第五章和第九章。

qq_40379102的博客 6885

深入理解Linux内核之主调度器(下)

4.进程上下文切换接前文:深入理解Linux内核之主调度器(上)前面选择了一个合适进程作为下一个进程,接下来做重要的上下文切换动作,来保存上一个进程的“上下文”恢复下一个进程的“上下文”,...

宋宝华 1888

ARM64中的ASID地址空间标识符

文章目录1. ARM32至ARM64的蜕变1.1 ARM32的TLB机制1.2 ASID(地址空间标识符)1.2.1 ARM32的TTBR0寄存器格式1.2.2 ARM64的TTBR0寄存器格式ARM64的TLB机制 1. ARM32至ARM64的蜕变   从ARM32到ARM64不止将处理器从32位升级到了64位,还有许多性能的技术也得到了极大的提升,光是个头长了可不行啊!能耐也得跟着长啊!哈哈哈 1.1 ARM32的TLB机制   如上图所示,上一讲我们讲了TLB的每一条表项都有一个bit用来表示自己

明故宫的记忆 2622

进程切换分析(2):TLB处理

http://www.wowotech.net/process_management/context-switch-tlb.html 一、前言 进程切换是一个复杂的过程,本文不准备详细描述整个进程切换的方方面面,而是关注进程切换中一个小小的知识点:TLB的处理。为了能够讲清楚这个问题,我们在第二章描述在单CPU场景下一些和TLB相关的细节,第三章推进到多核场景,至此,理论部分结束。

zdy0_2004的专栏 6004

Safe and Efficient Implementation of a Security System on ARM using Intra-level Privilege Separation

内容摘要: 此文中作者介绍了ARM64中一种同特权级下(EL1/2/3)下系统自隔离的方法——Hilps, 此方法和之前学术界的SKEE[5]效果类似,但实现方法不同. Hilps是针对AARCH64平台的,可以实现同特权级(EL1/2/3)系统自保护的安全特性,其将同特权级(如kernel在EL1)分为Inner/Outer mode两个模式,其中: Outer mode是正常系统(内核)运行的环境 Innermode则相对具有更高的特权, Innermode会保护系统中所有的页表...

ashimida 782

TLB中ASID和nG bit的关系

贴一篇当年关于TLB的笔记。 TLB是硬件上的一个cache,用于提升访问页表(这里应该是二级页表)的速度。MMU在将虚拟地址转换成物理地址时首先去TLB中找合适entry,如果能找到,则立即返回物理地址;如果TLB中找不到,则需访问Memory中的页表,且会加载相关entry到TLB中,以备下次MMU转换使用。 这个过程中存在一个问题,因为process的页表具有私密性,且kernel pr...

月出皎兮。 佼人僚兮。 舒窈纠兮。 劳心悄兮。 2512

事务ASID原则

事务的ACID原则分别是 Atomicity(原子性):要么同时成功,要么同时失败,不会出现一个失败一个成功的情况。 Consistency(一致性):在事务开始之前和事务结束以后,数据库的完整性没有被破怀。 Isolation(隔离性):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致的数据不一致。 Durability(持久性):意味着在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚 隔离性导致的问题 脏读:一

qq_46027706的博客 653

内存管理——页表

Linux内核页表管理-那些鲜为人知的秘密 1.开场白 环境: 处理器架构:arm64 内核源码:linux-5.11 ubuntu版本:20.04.1 代码阅读工具:vim+ctags+cscope 通用操作系统,通常都会开启mmu来支持虚拟内存管理,而页表管理是在虚拟内存管理中尤为重要,本文主要以回答几个页表管理中关键性问题来解析Linux内核页表管理,看一看页表管理中那些鲜为人知的秘密。 2.页表的作用是什么? 1)地址转换 将虚拟地址转换..

u014426028的博客 1万+
上一篇: JJJ:per-cpu变量
下一篇: JJJ:Linux - 高精度定时器 hrtimer
你板子冒烟了
博客等级 码龄8年 1278粉丝 582原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值