ARMv8高速缓存(Cache)和内存管理单元(MMU)

ARMv8高速缓存(Cache)和内存管理单元(MMU)

1 Cache

在这里插入图片描述

1.1 Cache概述

处理器的存储器的时钟频率的不一致导致了二者访存速率的差异,Cache则是用于在一定成本范围内弥补此种差异的高速缓存器件。

“…the frequency of external buses and of memory devices has not scaled
to the same extent…, A cache is a small, fast block of memory that
sits between the core and main memory.”

Cache的缓存工作方式由Cachde控制器(Cache Controller)控制,若Cache中存有处理器访问的地址上的数据/指令(即cache命中,称为hit),则将其提供给处理器,否则(即miss)向下一层次存储器请求补充处理器访问的数据/指令到Cache。

部分命中时,先向处理器提供已存有的数据,再向下一层次处理器请求补充。

“…the core first retrieves that part of the cache line that contains
the requested data…then read the rest of the cache line, in the
background.”

1.2 Cache策略

Cache策略(Cache Policies)即Cache的工作规则,规定Cache何时填充数据(即填充策略)、如何响应STR指令(即写策略)。填充策略有Write Allocation、Read Allocation两种。写策略有Write-back、Write-through两种。

Write Allocation指在Write Miss发生时填充新行(Cache填充的最小单位就是行)。

Read Allocation指在Read Miss发生时填充新行。

Write-back指仅在行被修改后并将被覆盖/清除时更新到下一级存储器,其余时候对数据的修只发生在处理器和Cache之间(会标记为dirty)。

Write-through指同时修改Cache和下一级存储器(不会标记为dirty)。

1.3 POC和POU

POC和POU是用于描述系统局部某个存储器的地位的概念。在不同的访问者(处理器、DMA等)能访问同一个存储器的时候,这个存储器就是Point of Coherency, POC。而Cache、TLB能访问的同一个存储器,则称为Point of Unification, POU。

详细记一下:有了POU这个概念,我们就能更方便地描述invalidation和cleaning等和Cache相关的操作了。在有这个概念之前,描述存储器和Cache的关系需要说“上级高速缓存关联的下级存储器“,现在我们可以直接说”这个Cache的POU“,如果限定了语境,直接说”POU“就知道是指的哪个存储器了。总之这就是一个存储层级体系概念,没有太多特别的。

1.4 Cache的Invalidation和Cleaning

Invalidation指通过清除Cache行的valid位。

Cleaning指把标记为dirty的Cache行写到下一层次存储器并清除dirty位。

相关操作指令见DEN0024A_v8_architecture_PG ARM® Cortex® -A Series Version: 1.0 Programmer’s Guide for ARMv8-A Table 11-1


2 MMU

在这里插入图片描述

2.1 架构特性

MMU用于控制内存的Cache策略、内存属性、访问权限并提供虚拟地址映射功能。

“…controls the cache policy, memory attributes, and access
permissions, and provides Virtual to Physical Address translation. “

ARMv8中与MMU关联的寄存器主要有映射控制寄存器(Translation Control Register,TCR_ELx)、用于存放一些预置的内存属性的内存属性间接寄存器(Memory Attribute Indirection Register,MAIR_ELx)、存放映射表基地址的映射表基地址寄存器(Translation Table Base Register,TTBR0_ELx)。

地址映射最大位宽48bits,支持4KB./16KB/64KB三种粒度(Granule Size),最深4级映射。
除ARMv7-A支持的ARMv7-A Long Descriptor format和Armv7-A Short Descriptor format之外,ARMv8新增一种映射表描述符ARMv8-A AArch64 Long Descriptor format。

2.2 访问权限控制

内存属性包含的访问权限属性需要特别关注,支持分别对EL0的非特权访问和EL1/2/3D的特权访问设置访问权限,如下表。

3 地址映射

此处的地址映射(address translation)特指将指令使用的地址(包括存储在PC、SP、LR、ELR中的地址)转换为物理内存中的地址的过程。
“Address translation converts the addresses used by instructions to the addresses used by the physical memory system.”

3.1 映射范围

映射空间的大小(位宽)可以通过读取只读寄存器寄存器ID_AA64MMFR0_EL1的PA段获知,PA[0:4]的值和映射空间大小的关系参考下图。A53为1TB。
在这里插入图片描述

注意这个大小是架构所能支持的极限大小,实际的映射的虚拟地址和物理地址范围是通过TCR_ELx寄存器的{I}PS段和TnSZ段配置的。
映射输入(虚拟地址)的大小(位宽)可通过TCR_ELx寄存器的TnSZ段配置。
在这里插入图片描述

映射输出(物理地址)的大小(位宽)可通过TCR_ELx寄存器的{I}PS段(EL1是IPS段,EL2和EL3是PS段)配置,其值与输出位宽的关系如下图。A53上电默认为32bits。
在这里插入图片描述

每个entry对应的虚拟地址范围大小与映射的粒度(granule)关联,如下表。
在这里插入图片描述

3.2 映射过程

映射过程可参考下图。
在这里插入图片描述

映射表中的描述符可分为Table Descriptor、Block Descriptor和Page Descriptor三类,Table Descriptor描述下级Translation Table的位置和属性、后两种描述符指明对应地址空间的属性。

3.3 映射表描述符格式

在处于AArch64运行状态下的异常等级中,映射表描述符(Translation Table Descriptor)统一使用VMSAv8-64格式——包括无效描述符格式(Invalid Descriptor Format)、映射表描述符格式(Translation Table Descriptor Format)、块或页描述符格式(Block or Page Descriptor Format)共四种。
描述符类型取决于描述符的最低两bits和描述符的lookup level。

物理地址空间位宽48Bits时的Block Descriptor格式如下
在这里插入图片描述

3.4 被映射空间的内存属性

我们已经知道,映射表描述符除了附近两级描述映射表的结构、虚拟地址和物理地址的映射关系之外,还描述被映射地址空间的内存属性。
相关的描述记录在描述符的Upper attributes和Lower attributes两个段中。
在这里插入图片描述

3.4.1 内存类型和缓存属性

内存类型(Memory Type)和是否缓存(Cacheability)由描述符的AttrIndx[2:0]决定。这个段的值将用于选择MAIR_ELx寄存器中预置的属性。

MAIR_ELx寄存器最多可预置8个8bits的属性描述,其结构如下如所示。
在这里插入图片描述

3.4.2 内存的共享属性

内存的共享属性(Shareability)由Lower attributes中的SH[1:0]决定。
在这里插入图片描述

3.5 ARMv8映射表总结

ARMv8以TTRB0寄存器的值为基地址,根据各级描述符构建映射表结构。
映射表描述符分为Table、Block和Page三类,Table Descriptor指向下一级映射表。
Block和Page描述符中需要关注的配置包括Block/Page起始地址、内存的Cacheability和Shareability。
描述符代表的地址空间大小(位宽)与粒度(granule)和描述符的层级(level)有关。

这里以48bits物理地址位宽、4KB粒度为例说明一下。映射表lv1中的每个描述符对应1GB的地址空间。描述符的[47:30]是OA,[7:6]对应Shareability,[4:2]用用于选择MAIR_ELx中的预置内存属性。

参考

Github仓库 WaterCutter/pickArm

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
# 学习对象在全民造车、造芯的大时代,在努力去解决卡脖子的时代,ASIC硬件、SOC底层软件、Linux Kernel等操作系统软件(内核/驱动)、软硬件方面的系统架构师等的岗位需求也越来越明显,社会一直都是非常缺人的,缺的是核心的那一小撮、领头的那一小撮,社会所缺的更是能够软硬件融合的那一小撮人……总之,要想在这个时代,站稳自己的脚跟,能够在大公司或行业上拥有一席之地,就必需深入学习底层技术原理,核心技术才是您的看家本领。本课程设计之初,主要针对SOC底层软件开发的者、系统开发者,或者励志成为这样的人。既适合资深/高级工程师来查缺补漏,又适合初级工程师入门。(理论上该课程和ASIC硬件电路设计无关,该课程偏软件,但事实购买该课程的做ASIC的同学已然超过了15%)适用人群1、芯片开发者(包括底层软件、或做ASIC硬件的)。不限行业,例如车、云、物联网、移动端等领域;2、汽车行业开发者(主机厂、tier1、SOC厂家、各级供应商);3、嵌入式开发者、kernel开发者、驱动、软件工程师;4、学生。既适合学生从入门到精通,也适合资深工程师查缺补漏;您的收益:1、全体系的掌握ARMv8/ARMv9的核心知识点(ARM基础、异常中断GIC、MMU/Cache、architecture...);2、掌握ARM架构、掌握SOC架构、掌握常规IP(gic、smmu、timer、AXI/ACE/CHI、TZC400...);3、快速熟悉常规系统软件(bootrom、spl、ATF、TEE、bootloader、kernel...), Secureboot安全启动...4、技术水平提升N个level, 掌握快速的学习方法;# 学习什么在ARM蓬勃发展的年代,不仅仅涉及到物联网IOT、移动领域(如手机)、汽车电子领域,现在还涉及到PC、服务器的,简直就是各行各业。ARMv8出来已经有10年了,ARMv9也2年时间了。在技术不断更新迭代的背景下,此时再去学习十五年前的ARMv7、二十年前的ARMv5/v6显然不是明智的选择。本课程主要基于当前最新的架构,ARMv8的aarch64和ARMv9,如涉及具体的ARM Core IP主要还是以最新的ARM Core IP为主,软件架构也是以当前最主流的/未来所趋势的架构来讲解。以下也给大家列举初了一个ARM产品的timeline的总结(在本课程中有着大量的这种总结),从这张图中,您是可以清晰的看到本课程拥有独具一格的风格、拥有全网最新(且唯一)的资料总结或学习路线。# 本课程大纲和规划(课程持续更新中,课程总量统计:2022/10/02  当前是 61节课, 22小时)第一章:主要是快速学习: ARM简介、指令集、寄存器总结等。第二章:本系列视频的一大亮点,系统全面地讲解了arm异常中断gic等相关的软硬件知识,本人一直在倡导“学arm安全其实就是学arm架构,学arm架构其实就是学习arm的异常和中断”,异常中断是领着你进入架构的入门,是让你变成系统软硬件架构师的必走之路。第三章:安全专题,这也是本视频最核心的东西。因为你无论买书还是看博客等,你都很难找到讲解安全的教程,这里就是有和无的区别。本人系统的整理的安全的知识,带领你快速入门。第四章:mmu专题,透过事务看本质的讲解,白话式的演讲。在所有模块中,mmu也算是相对较简单模块。相信人人听得懂,人人学得会。第五章:cache专题,一切追求实事求是,不人云亦云,一切知识点都有迹可循,推翻了网络的很多观念。在众多模块中,cache算是一个比较难的模块。了解了cache后,才能算真正了解系统的软硬件架构。第六章:虚拟化,本人不擅长,会啥就随便讲点啥。(以后学会了再来补)第七章:architecture,就是零散和零碎的系统架构知识,如exclusive、arch timer、reset、系统启动、SOC设计、AMBA/AXI/ACE、DSU、WFE/WFI这样的。第八章: 新增的ARMv9 CCA/RME安全架构专题第九章:主要放置一些直播课。# 课程收益1、知道我学习什么,我要怎么去学习,从此之后有了一个明确的学习路线。2、认识一些共同目标的人,相互讨论问题,共同进步。勤学、共学、助学。3、ARM不再神秘,SOC不在神秘,让您短期内就能cover住全局4、熟悉ARM Architecture架构知识5、熟悉SOC架构知识6、熟悉主流的系统软件框架7、熟悉各项硬件原理和机制,如异常中断、MMUcache、TLB、VMSA、Trustzone6、深入了解当前的系统架构、软硬件架构,能够看懂这些大家,将来也能够自己设计。7、熟悉系统的启动流程、Secureboot等8、熟悉各类标准和规范9、能够进入芯片厂商干活、能够在非芯片产生成为技术担当。10、学习资料的获取方法,会看11500多页的ARM手册,会看数以百计的ARM各项参考手册。 本课程会持续更新。也希望通过本课程的学习,能够让大家的ARMv8/ARMv9开发技术能有质的飞越,能找到自己心仪的工作。在购买之前,也建议大家看一看第一章第一节的课程介绍。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值