历史上的今天
返回首页

历史上的今天

今天是:2024年10月26日(星期六)

2021年10月26日 | ARMv7-A 的 MMU 浅析

2021-10-26 来源:eefocus

MMU 是硬件对内存管理的支持,具体的,每个处理器之间或多或少有一些差异,而每个处理器的不同架构之间的实现也有差别,技术不断在进步,而实际的需求,性能的提升,使用场景的复杂化,都促使其不断的发展。


MMU 主要功能之一是虚拟地址到物理地址的转换,这个需要软件和硬件配合完成,软件需要针对不同的硬件进行策略。这里主要分析 ARMv7-A 体系架构下的 MMU 的基本原理。


ARM 官方的 datasheet 的下载链接 :


ARMv7-A_and_R_Architecture_Reference_Manual:


https://developer.arm.com/docs/ddi0406/latest


在这篇 Datasheet 中,


B3 Virtual Memory System Architecture (VMSA)


章节介绍了虚拟内存系统相关的内容


VMSA 是针对 ARMv7-A 架构的虚拟内存系统架构,与 VMSA 对应的还有 PMSA,这个是 ARMv7-R 系列的处理器支持的内存保护系统架构,这里不做研究,仅仅初探 ARMv7-A 系列相关的内容。


1. 简介

ARMv7 的 VMSA 包含安全扩展,多核处理器扩展、大物理地址扩展、TrustZone扩展、虚拟化扩展。若支持大的物理地址,则必须支持多核处理器;若支持虚拟化,则必须支持大的物理地址、多核处理器、TrustZone。加入这些扩展后,相应的MMU(虚拟地址到物理地址的隐射功能)结构也改变了许多。本文首先分析加入扩展后MMU的整体结构,然后详细介绍地址转换中用到短描述符格式(32位)和长描述符格式(64位),以及如何实现虚拟地址到物理地址的查询。


在 ARMv7 的 VMSA 中,MMU 控制了地址转换(虚拟到物理),权限控制。MMU 的控制是通过系统控制寄存器来进行配置(system control registers),当然,也支持关闭 MMU 功能。


ARMv7-R 结构的 VMSAv7 根据处理器的实现和具体场景,支持的情况不一样,分为几种情况,而每种情况又分为不同的 stage:


对于扩展的 VMSAv7 来说分为 Secure 和 non-Secure:


Secure state 下 对于 memory system control 只有一个 stage

Non-Secure state 下,对于 memory system control :

当处理器在 PL2 的时候,只有一个 stage

当处理器在 PL0 或者 PL1 的时候,有两个 stage

所以展开来说,分为:


Secure PL1&0 stage 1 MMU

Non-secure PL2 stage 1 MMU

Non-secure PL1&0 stage 1 MMU

Non-secure PL1&0 stage 2 MMU.

同时,一个 CPU 的实现中,如果没有包含 Virtualization Extensions 的话,那么


不支持在 PL2 执行

在 Non-Secure 下,仅仅支持 Non-Secure PL1 & 0 stage 1 的 MMU

先扯一些题外话,关于 ARMv7 架构的一些东东:


在 ARMv7 架构上,比较突出的特性是支持了:包括大内存(Large Memory)、虚拟化(Virtualization)和安全(Security)。


1. 大内存(Large Memory):


由于处理器性能越来越强,运行于其上的软件也来越复杂,复杂到单一应用对内存的需求可能超出32-bit架构所能支持的最大内存(4G),这就是Large memory需求的起因。不过,后来的Cortex-A15(ARMv7架构)通过 Large Physical Address Extensions (LPAE) 技术,可以支持高达40bits的物理地址空间。但受限于32-bit的指令集,虚拟地址空间依旧只有32bits(4G),如果有应用需要更大的虚拟内存,怎么办?只能定义一个新的架构,使用64-bit的指令集(也即我们常说的ARM64)。


2. 虚拟化(Virtualization)和安全(Security):


ARM v6引入了security extension,把硬件资源划分成了两个部分secure world和normal world。当 CPU 运行在 secure world 的时候,它可以访问所以的硬件资源,但当CPU运行在normal world的时候,它只能访问normal world的资源。


ARM v7引入了virtualization extension,在 normal world 里面加入了一个新的CPUmode:HYP mode。


这样CPU 在normal world运行的时候就有三种模式:USR mode, SVC mode和 HYP mode,分别对应 PL0, PL1, PL2 (PL:privilege level),number越大,权限越高。


我对这里所说的权限的理解是:寄存器的访问和指令的执行。比如说一些特殊的寄存器(HVBAR)只能再HYP mode里面才能访问,一些特殊的指令(HVC)只能再SVC 或者 HYP mode执行。而CPU处于哪个模式是由CPSR这个寄存器决定的。


PL0进PL1通过SWI指令(system call),PL1回PL0通过复原CPSR。


类似的,hypervisor也是由HYP exception vector和handler。一个最简单的hypervisor就是HVBAR寄存器定义vector的位置,在offset 0x14的地方放一个eret指令。这样的hypervisor可以处理kernel发起的HVC call


与 PL0、PL1、PL2 对应的是 CPU mode


usr,只在PL0中使用,可以是安全或者非安全的,一般情况下,用户软件处于非安全态的usr下,而secure的应用程序则处于安全的usr下

sys, und, fiq, irq, svc, abt,只在PL1中,可以是安全或者非安全的,一般情况下,非安全的os或者虚拟扩展下的guest os位于非安全的mode下,而secure os位于安全的mode下

hyp, 只能在非安全态的PL2中,一般情况下,虚拟扩展的hypervisor实现在这个模式

2.  ARMv7-A MMU 特性

2.1 权限控制

对于指令和数据,支持:


no access

read-only

write-only

read/write

 

2.2 地址翻译

地址翻译单元的输入是虚拟地址,输出是物理地址,由于存在几种不同的配置,所以 MMU 的地址转换分为如下几种情况:

而这几种模式下,修改的寄存器也不一样:

所以最后对应的图为:

安全模式的PL1&0隐射,页表控制寄存器TTBCR,页表基址寄存器TTBR0/TTBR1,这些寄存器需要在S模式的PL1设置;


非安全模式的PL2隐射,页表控制寄存器HTCR,页表基址寄存器HTTBR,需要在NS的PL2设置;


非安全模式的PL1&0的一级映射,页表控制寄存器TTBCR,页表基址寄存器TTBR0/TTBR1,需要在NS模式的PL1设置;


非安全模式的PL1&0的二级映射,页表控制寄存器VTCR,页表基址寄存器VTTBR,需要在NS的PL2设置;


2.2.1 地址描述符

地址描述符分为两种:


短描述符和长描述符,长描述符是针对大物理地址扩展,这里仅仅简单分析短描述符


短描述符


在 datasheet 的 B3.5 章节有比较详细的描述,主要讲了短描述符的分类,寄存器的配置,以及怎么去进行 table walk 的


短描述符的分类:


(1) SuperSection:24位。16MB 的 blocks,可选的,主要是支持大物理地址扩展必须支持


(2) Section: 20位。1MB 的 blocks


(3) Large pages : 16位。64KB 的 blocks


(4) Small pages : 12位。4KB 的 blocks (Linux 用这种)


当使用短描述符的时候(short-descriptor)的 translation table format 的时候,硬件支持两级页表,主要描述这个的有几个寄存器:


TTBCR


TTBR0


TTBR1


如果 SuperSection 或者 Section 的话,只需要一级页表即可,如果支持 4KB 或者 64KB 的页面,需要用到二级页表。以 4KB 的页映射为例:

当 TLB Miss 的时候,处理器进行 table walk:


1. 根据 TTBCR 寄存器和虚拟地址来判断使用哪个页表基地址寄存器(TTBR0 或者 TTBR1)。其中放置了一级页表的基地址


2. 处理器根据虚拟地址的 bit[31:20]作为索引,在一级页表中查找页表项,一级页表一共有 4096 个 页表项(4K 个 entry)


3. 一级页表的表象中存放了二级页表的基地址,处理器根据虚拟地址的 bit[19:12]作为索引值,在二级页表中找到对应的表,二级页表一个 256 个表项


4. 二级页表的页表项里面存放了又 4KB 页的物理基地址,加上最后的 bit[11:0] 的offset,寻找到最终的物理内存。


4KB 映射的一级页表表项和二级页表的表项其实也是 32bits 的,只不过其他的一些 bit 被硬件用作其他作用:


一级表项:

二级页表项是:

TTBR0 或者 TTBR1 的选取:


根据 TTBCR.N 中的这个 N 的值来进行选取:


如果 N = 0 的话,则一直使用 TTBR0


如果 N > 0 的话,则 bits [31:31-N] 的虚拟地址部分,如果全部等于 0,则使用 TTBR0 ,否则使用 TTBR1


官方文档上的虚拟地址到物理地址的转换过程如下(这里仅仅分析 Small page 也就是 4K 的情况,其他的情况请自行阅读文档):

参考文献:


https://blog.csdn.net/zzk315/article/details/53075073


http://www.cnblogs.com/fozu/p/4601291.html


https://zhuanlan.zhihu.com/p/21300203


http://www.wowotech.net/armv8a_arch/armv8-a_overview.html

推荐阅读

史海拾趣

Horn公司的发展小趣事

为了更好地服务全球客户,Horn公司积极实施全球化战略。通过在海外设立分公司和与分销商建立紧密合作关系,Horn公司的产品和服务能够迅速覆盖到全球各地。这种全球化布局不仅提升了公司的市场影响力,还促进了技术交流与合作,为公司带来了更多的发展机遇。

ALTERA(阿尔特拉)公司的发展小趣事

自1969年成立以来,Horn公司便致力于开发和生产切槽、侧铣和槽铣刀具。起初,公司聚焦于为小型机械加工企业提供高质量的工具解决方案。在创始人Paul Horn的领导下,公司迅速建立了技术团队,专注于刀具材料的研发与生产工艺的改进。这一时期,Horn公司凭借其出色的产品质量和定制化的服务,在行业内逐渐树立了良好的口碑。

Connector City公司的发展小趣事

为了降低生产成本、提高生产效率,Connector City公司开始实施产业链整合战略。公司与上游原材料供应商和下游客户建立了紧密的合作关系,实现了供应链的优化和协同发展。通过整合产业链资源,公司不仅降低了采购成本和市场风险,还提高了产品质量和交货速度,进一步增强了市场竞争力。

Aplus Flash Technology Inc公司的发展小趣事

Aplus Flash Technology Inc公司自成立以来,一直致力于闪存技术的研发与生产。在电子行业的激烈竞争中,公司凭借对技术的深入理解和持续创新,成功研发出了一款高性能、低成本的闪存芯片,迅速占据了市场份额。这款芯片不仅满足了消费者对电子设备存储容量和速度的需求,还因其出色的稳定性和耐用性赢得了客户的广泛好评。Aplus Flash Technology Inc公司因此成为了闪存市场的佼佼者,为公司的进一步发展奠定了坚实基础。

格科微电子(GALAXYCORE)公司的发展小趣事

近年来,电子行业面临着原材料价格上涨、贸易壁垒增多等挑战。Aplus Flash Technology Inc公司也受到了这些因素的影响,生产成本上升,市场竞争压力加大。为了应对这些挑战,公司及时调整了发展战略,加大了对技术研发的投入,提高了生产效率和质量。同时,公司还积极开拓国际市场,通过参加国际电子展会、建立海外销售网络等方式,拓展海外市场份额。这些举措使公司在面对市场挑战时保持了稳健的发展态势。

Graseby Infrared公司的发展小趣事
在进行任何维修或检查前,必须先切断电源,确保电路处于安全状态。

问答坊 | AI 解惑

印度模拟电路市场将激增达3亿美元

印度2005年的模拟电路市场规模达2.21亿美元,今年将猛增35%,达3亿美元,比业界先前的预期增长了50%以上。   印度半导体产业协会称,印度2007年的模拟电路销售额将再增长40%,达4.27亿美元,一直到2010年都会保持快速增长,到那时该市场将达到近1 ...…

查看全部问答>

有没有PCB的高手来指点一下啊?????

请教一下,PCB中的焊盘跟过孔在应用上有什么区别啊?焊盘的中间必须有一个过孔吗?画PCB图自制元件时要加贴片的焊盘用工具栏里的焊盘把中间的过孔去掉呢还是自己随便画个方形呢?请高手指点一下啊!谢谢了!…

查看全部问答>

各位大哥,请帮我看看这个 IC 卡(SLE4442卡)问题啊?谢谢

1: 向 IC 卡里写数据 是不是必须通过效验了才能写啊? 2: 效验 到底是效验什么东西? 是密码,还是? 3: 假设有人自己做个写卡器, 想卡里写个很大的数据, 然后做到您的读卡器里读 这样,就不行了 怎么防止这样的情况啊 是不是在卡里 ...…

查看全部问答>

基于MSP430 的触摸按键2

继续上一个帖子的内容。主要讲基于MSP430构建触摸按键的方式。大家有什么建议意见都可以说,纯交流学习…

查看全部问答>

关于AD835使用中的困惑

我在淘宝上购买了2家店各2片AD835,购入价为48元1片,在使用其模拟乘法器实现幅度调制(AM)时完全按照手册所列示例搭建电路,但都无法实现,W出来的信号始终的0V,1、4脚载波用10KHZ、1VPP,8脚调制信号用500HZ、1VPP,网上也有类似的问题,但不知 ...…

查看全部问答>

BOOSTXL-SENSHUB这个比较适合diy

http://www.ti.com.cn/tool/cn/boostxl-senshub …

查看全部问答>

加速度传感器自身坐标系原点的确定

加速度传感器自身坐标系的坐标原点如何确定。…

查看全部问答>

McuPlayer--跟着我从零开始入门FPGA(一周入门XXOO系列) (转)

原帖请见: http://www.amobbs.com/thread-5476115-1-1.html 觉得写的很好,于是就整理了个pdf,分享给大家。…

查看全部问答>