1. 从ARM32到ARM64

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

1.1 ARM32的TLB机制

如上图所示,上一讲我们讲了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寄存器格式

1.2.2 ARM64的TTBR0寄存器格式



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

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

ARM64的TLB机制

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

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

ARM64中的ASID地址空间标识符的更多相关文章

  1. extern的原理很简单,就是告诉编译器:“你现在编译的文件中,有一个标识符虽然没有在本文件中定义,但是它是在别的文件中定义的全局变量,你要放行!”

    extern的原理很简单,就是告诉编译器:“你现在编译的文件中,有一个标识符虽然没有在本文件中定义,但是它是在别的文件中定义的全局变量,你要放行!”

  2. c中的关键字、标识符、注释

    一. 学习语法之前的提醒 1) C语言属于一门高级语言,其实,所有高级语言的基本语法组成部分都是一样的,只是表现形式不太一样 2) 就好像亚洲人和非洲人,大家都有人类的结构:2只 手.2只脚.1个头, ...

  3. Java中关于注释、标识符、变量、常量、数据类型、类型转换、转移字符以及数值型的表现形式的详解

    Java文件的注意事项 在同一个Java文件中,可以定义多个类,但是被public修饰的类只能够有一个,并且此类名要与文件名一致. 在同一个类中,可以定义多个方法,但是名字叫做main的方法只能有一个 ...

  4. strcasecmp在VS2010中提示未定义标识符

    分析: strcasecmp(*,*)是用来比较字符串,定义在string.h头文件中,但是在windows下即使添加string.h头文件,依然会报错. 解决: 添加 #if defined(_MS ...

  5. OS之内存管理 ---基本的内存管理策略(二)

    分段 基本方法 分段就是基于用户视图的内存管理方案.逻辑地址空间是由一组段构成的,每个段都有名称和长度.地址指定了段名称和段内偏移.因此用户通过两个量来指定地址:段名称和段偏移. 为了简单,进行对段的 ...

  6. ASID 与 MIPS 中 TLB 相关

    ASID 为了提高TLB的性能,将TLB分成Global和process-specific.global 是指常驻在tlb中不会被刷出的,例如内核空间的翻译,process-specific 是指每个 ...

  7. java中的标识符、修饰符、关键字

    关键字的特点:1.完全小写的字母,2,在增强版记事本中有特殊颜色 例如@是电子邮箱当中有特殊含义的.被保留的.不能随意使用的字符,关键字. 例如图中public.class.static.void是关 ...

  8. .NET平台系列17 .NET5中的ARM64性能

    系列目录     [已更新最新开发文章,点击查看详细] .NET团队使.NET 5大大提高了常规性能和ARM64性能.在<.NET5中的性能改进>博客中可以查看总体改进情况.在这篇文章中, ...

  9. 《APUE》中的函数整理

    第1章 unix基础知识 1. char *strerror(int errnum) 该函数将errnum(就是errno值)映射为一个出错信息字符串,返回该字符串指针.声明在string.h文件中. ...

  10. 从编译器角度理解C++中的引用和指针

    欲分析指针和引用,则要分析变量名和地址之间的关系(不管你理解还是不理解,无论你是从老师那里听到的,还是网上看到的,应该都知道两句话:1. 指针就是地址,2.引用就是给变量起个别名) 所以我们就要来分析 ...

随机推荐

  1. win10远程桌面连接报错:出现身份验证错误,要求的函数不受支持(CredSSP)

    问题 解决办法 找到路径:计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System 在Syste ...

  2. SEO初学指南之关键词研究(1) - 入门

    Hi,我是听风. 第一篇给大家科普了什么是SEO以及搜索引擎的原理,这篇文章我们正式进入关键词研究的章节. 本片文章将学习什么是关键词以及如何挑选符合预期的关键词. 一.什么是SEO关键词 简单来说就 ...

  3. midjourney 入门操作

    midjourney 入门操作 settings面板 选择模型 当从 V6 切换到 Niji模型时,Current suffix会添加参数 default V6面板功能介绍 RAW Mode功能 -- ...

  4. SemanticKernel/C#:检索增强生成(RAG)简易实践

    检索增强生成(RAG)是什么? RAG是"Reference-based Generative model with Attention"的缩写,也可以被称为"Retri ...

  5. 英语词汇:simplistic和simple区别

    "Simplistic" 和 "simple" 都表示简单,但它们有不同的含义和语境: Simplistic: 含义: 过于简单化的,有贬义,表示忽略了复杂性或 ...

  6. AI未来应用的新领域:具有领域知识的专属智能拼音输入法 —— 医生专属的智能输入法

    本人上个月去辽宁中医看了些小毛病,在和医生交流的时候随便小聊一下,其中一个主要的话题就是"医生是否需要练习五笔".众所周知,医生的主要工作是看病,而需要使用输入法打字写病历只是看病 ...

  7. MindSpore 框架的官方预训练模型的加载 —— MindSpore / hub 的安装

    MindSpore计算框架提供了一个官方版本的预训练模型存储库,或者叫做官方版本的预训练模型中心库,那就是 MindSpore / hub . 首先我们需要明确概念: 第一个就是 mindspore_ ...

  8. 外网的一个还不错的高性能计算教程: High Performance Computing

    地址: https://info.gwdg.de/wiki/doku.php?id=wiki:hpc:start =========================================== ...

  9. WhaleStudio 2.6重磅发布!调度模块WhaleScheduler更新78项核心功能

    我们很高兴地宣布WhaleStudio 2.6版本的正式发布!新版本中包含了数据调度模块WhaleScheduler和数据集成模块WhaleTunnel的百余项核心功能更新,本文摘选了WhaleSch ...

  10. 9组-Beta冲刺-1/5

    一.基本情况(15分) 队名:不行就摆了吧 组长博客:9组-Beta冲刺-1/5 GitHub链接:https://github.com/miaohengming/studynote/tree/mai ...