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
上一篇:ARMv7-A 处理器窥探(2) —— CP15 协处理器
下一篇:一文看懂ARM Cortex-M处理器
推荐阅读
史海拾趣
随着电子行业的竞争日益激烈,Ambersil公司意识到,要想在市场中立足,必须注重产品质量。公司加大了对生产线的投入,引进了先进的生产设备和技术,严格把控产品质量。同时,公司还建立了完善的售后服务体系,及时解决客户在使用过程中遇到的问题。这些举措使得Ambersil公司的产品在市场上赢得了良好的口碑。
面对国内外市场变化及成本增长的压力,灿科盟在2012年决定在江西省九江市设立新的生产基地。这一基地主要负责产品的生产组装,有效降低了生产成本,提高了交货速度。同时,公司也加强了与当地供应商的合作,确保原材料的稳定供应。
Carlo Gavazzi公司由加瓦齐家族在1931年创立,最初可能只是一个小规模的电气公司。然而,凭借创始人对技术的深刻理解和前瞻性的市场洞察力,公司迅速在行业中崭露头角。在随后的几十年里,公司不断扩展业务范围,逐步建立起自己在电气和电子领域的地位。
人才是企业发展的根本动力。华瓷深知这一点,因此在人才战略和团队建设上投入了大量精力。公司注重员工的培训和发展,为员工提供广阔的发展空间和良好的职业前景。同时,华瓷还积极引进国内外优秀人才,打造了一支高素质、专业化的团队。这支团队为公司的发展提供了有力的支持和保障。
随着公司产品的不断优化和升级,Aplus Integrated Circuits开始寻求与国际市场的接轨。公司积极参与国际电子行业的交流与合作,与多家国际知名企业建立了稳定的合作关系。通过引进国外先进的技术和管理经验,公司的产品逐渐走向国际化,市场竞争力得到了进一步提升。
背景:随着中国经济的快速发展和消费者对电子产品需求的不断增加,Galaxy公司敏锐地捕捉到这一市场机遇。
行动:在2003年初,Galaxy以缜密的市场调研为基础,全力部署进入大陆市场。同年6月,公司推出了以“影驰”命名的Geforce家族系列产品,迅速吸引了众多游戏发烧友和电子产品爱好者的关注。随后,公司又在多个城市设立了销售和服务网点,为消费者提供更加便捷的产品体验和服务。
成果:经过多年的深耕细作,Galaxy在大陆市场取得了显著成绩,品牌影响力不断增强,市场份额稳步提升。
1.将你所要设计的开关电源的输出参数输入表格,此表中列出了4个输出参数,分别为电压输出1,电流输出1;电压输出2,电流输出2;电压输出3,电流输出3;电压输出4,电流输出4; 2.输入你所用的磁芯特性参数:有效磁芯截面积,有效磁路长度,初始磁导率,这三个参 ...… 查看全部问答∨ |
|
大家好!!!我不是东西!我乱发垃圾信息!!!我真该死!!!!我老婆生孩子没屁眼,孩子脸上还长个小JJ!!我老婆就跟第四者跑了,但是第三者和第五者还轮流早我家门前徘徊....我真郁闷啊.... [ 本帖最后由 西门 于 2009-8-7 15:26 编辑 ]… 查看全部问答∨ |
|
在PPP协议链路建立过程中!LCP和PAP都通过了!到了NCP阶段!一向ISP发送请求IP的报文,就收到链路终止报文!被踢下线了!不知道是什么原因!就是收到80 21 01 00 04 报文后,发送 80 21 01 00 16 03 06 00 00 00 00 81 06 00 00 00 00 83 06 00 0 ...… 查看全部问答∨ |
|
很多网友在学习 TI Stellaris 的时候,肯定会遇到各种疑问,这里是一个很好的交流平台,不管你是工程师还是一名学生,有问题就可以提出来,让我们大家来一起讨论。 不过,在提出问题的时候,为了更好让大家解决问题,在有些时候也需要提问者提供一 ...… 查看全部问答∨ |