ARM存储管理系统MMU
一、虚拟地址和物理地址的区别
CPU通过地址来访问内存中的单元,地址有虚拟地址和物理地址之分。如果CPU没有MMU(Memory Management Unit,内存管理单元),或者有MMU但没有启用,CPU在访问内存时发出的地址将直接传送到地址总线上,使具有相同地址的物理存储器被读写。这称为物理地址(Physical Address,以下简称PA),如下图所示:
图 1. 物理地址示意图
如果CPU启用了MMU,CPU核发出的地址将被MMU截获,从CPU到MMU的地址称为虚拟地址(Virtual Address,以下简称VA),而MMU将这个地址翻译成真正的物理地址发送到地址总线上,也就是将虚拟地址映射成物理地址,如下图所示:
图 2. 虚拟地址示意图
二、虚拟地址映射物理地址原理
页表是实现虚拟地址到物理地址转换的一个重要手段。我们在使用MMU以前,需要在内存中新建一个页表。表中的每一行(即一个字的大小)存放的是一个物理内存页的基地址,该页的访问权限和缓冲特性等,这里将页表中这样的一行称为一个地址变换条目。页表存放在内存中,CP15的C2寄存器用来存放页表的基地址。
多数使用虚拟存储器的系统都使用一种称为分页(paging)。虚拟地址空间划分成称为页(page)的单位。而相应的物理地址空间也被进行划分,单位是页框(frame).页和页框的大小必须相同。
虚拟地址被MMU分为两部分,,第一部分是页号索引(page Index),第二部分则是相对该页首地址的偏移量(offset)
当CPU访问一个地址时,该地址是虚拟地址,于是该地址被送到MMU,MMU再根据虚拟地址的高几位作为页号索引,在页表中寻找对应的地址变换条目。从地址变换条目中找到物理地址的页基地址,再加上虚拟地址中的偏移量,便得到了真正的物理地址,然后由MMU将物理地址发送到地址总线上,访问物理内存。
那么MMU是如何使用页号索引在页表中找到对应的地址变换条目呢?MMU会用CP15协处理其中的C2寄存器存放的页表基地址加上虚拟地址的页号索引值,然后便得到了页表中对应的地址变换条目的地址。其实页号索引就是相对于页表基地址的一个偏移量,然后使用基地址加偏移量的方式得到一个页表中的地址。
例:如图所示,如果分页大小为1M,虚拟地址为0x30000012,
虚拟地址的二进制码为 00110000 00000000 00000000 00010010 前12位为页号索引,后20位为偏移量,因为2^20 = 1M
前12位页号索引为00110000 0000 = 768,所以在页表中找到相对于页表基地址的偏移量为768的地址,然后得到地址变换条目。于是0x0300 << 20位,便得到了物理页基地址,再加上虚拟地址中的偏移位 0000 00000000 00010010 = 0x12,便得到了真正的物理地址 0x30000012 。
1、TLB的概念
从虚拟地址到物理地址的变换过程其实就是查询页表的过程,由于页表存放在内存中,这个查询过程通常代价很大。而程序在执行过程中具有局部性,也就是说,一段时间内,对页表的访问只是局限在少数几个单元中。根据这个特点,采用一个容量更小、访问速度更快的存储器来存放当前访问需要的地址变换条目。这个小容量的页表称为快表,也称TLB.
当CPU访问内存时,现在TLB中查找需要的地址变换条目。如果该条目不存在,CPU从位于内存的页表中查询,并把相应的结果添加到TLB中。这样,当CPU下一次又需要该地址变换条目时,可以从TLB中直接得到,从而使地址变换的速度大大加快。
当内存中的页表内容改变,或者通过修改CP15中的寄存器C2使用新的页表时,TLB的内容需要全部清除。MMU提供了相关的硬件支持这种操作。CP15中的寄存器C8用来 控制清除TLB内容的相关操作。
MMU可以将某些地址变换条目锁定在TLB中,从而使得进行与该地址变换条目相关的地址变换速度保持很快。在MMU中C10用于控制TLB内容的锁定。
注:TLB中存放的是地址变换条目,相当于一个小页表。
- 使无效TLB内容
当内存中的页表内容改变,或者通过修改协处理器CP15的寄存器来使用新的页表时,TLB中的内容需要全部或者部分使无效。所谓使无效是指将TLB中的某个地址的地址变换条目表示成无效,从而在TLB中找不到该地址变换条目,而需要到内存页表中重新查找该地址变换条目。如果不进行TLB的使无效操作,可能造成同一个虚拟地址对应于不同的物理地址(TLB中保存的还是旧的地址映射关系,而内存中的页表已经存了新的地址映射关系)。
有时候页表可能只是部分内容改变了,只影响了很少的地址映射关系,这种情况下,可以只使无效TLB对应的单个地址变换条目可能会提高系统性能。
系统协处理器CP15的寄存器C8就是清除TLB内容的相关操作。它是一个只写的寄存器。
MCR p15,0,Rd,c8,CRm,opcode_2
Rd中为要写入C8寄存器的内容,CRm和opcode_2的不同组合决定指令执行的不同操作。
指令 |
Rd |
含义 |
MCR p15, 0, Rd, c8, c5, 0 |
0 |
使无效整个指令TLB |
MCR p15, 0, Rd, c8, c5, 1 |
虚拟地址 |
使无效指令TLB中的单个地址变换条目 |
MCR p15, 0, Rd, c8, c6, 0 |
0 |
使无效整个数据TLB |
MCR p15, 0, Rd, c8, c6, 1 |
虚拟地址 |
使无效数据TLB中的单个地址变换条目 |
MCR p15, 0, <Rd>, c8, c7, 0 |
0 |
使无效整个数据和指令TLB |
MCR p15, 0, <Rd>, c8, c7, 1 |
虚拟地址 |
使无效数据和指令TLB中的单个地址变换条目 |
- 锁定TLB的内容
2、存储访问过程
a、使能MMU时的存储访问过程。
当ARM处理器请求存储访问时,首先在TLB中查找虚拟地址。如果系统中数据TLB和指令TLB是分开的,在取指令时,从指令TLB查找相应的虚拟地址,对于其他内存访问操作,从数据TLB中查找相应的虚拟地址。
如果虚拟地址对应的地址变换条目不在TLB中,CPU从位于内存的页表中查询,并把相应的结果添加到TLB中。如果TLB已经满了,还需要根据一定的淘汰算法进行替换。这样,当CPU下一次又需要该地址变换条目时,可以从TLB中直接得到,从而使地址变换的速度大大加快。
当得到了需要的地址变化条目以后,将进行以下操作
(3)根据存取权限控制位和域访问控制位确定该内存访问是否被允许。如果该内存访问不被允许,CP15向ARM处理器报告存储访问中止。
(4)对于不允许缓存的存储访问,使用步骤(1)中得到的物理地址访问内存。对于允许缓存的存储访问,如果在cache命中,则忽略物理地址;如果cache没有命中,使用步骤(1)中得到的物理地址访问内存,并把该块数据读取到cache中。
- 禁止MMU时,是否支持cache和write buffer由各个具体芯片的设计确定。如果芯片规定禁止MMU时禁止cache和write buffer,则存储访问将不考虑C、B控制位。如果芯片规定当禁止MMU时可以使能cache和write buffer,则数据访问时,C=0,B=0;指令读取时,如果使用分开的TLB则C=1,如果使用统一的TLB则C=0;
- 存储访问不进行权限控制,MMU也不会产生存储访问中止信号
- 所有的物理地址和虚拟地址相等,即使用平板模式
- 在使能MMU之前,要在内存中建立页号表,同时CP15中的各相关寄存器必须完成初始化。
- 如果使用的不是平板存储模式(物理地址和虚拟地址相等),在禁止/使能MMU时,虚拟地址和物理地址的对应关系会发生改变,这时应该清除cache中的当前地址变换条目
- 如果完成禁止/使能MMU的代码的物理地址和虚拟地址不相同,则禁止/使能MMU时会造成很大麻烦,因此强烈建议完成禁止/使能 MMU的代码的物理地址和虚拟地址最好相同
域: 标明了当前段属于哪个域 。Domain与AP配合使用,对访问权限进行检查
C: 如下表所示
B: 如下表所示
bits[1:0]:
31 0 |
|||||||||||||||
D15 |
D14 |
D13 |
D12 |
D11 |
D10 |
D9 |
D8 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
10:保留状态(我们最好不要填写该值,以免引起不能确定的问题)
11:当前级别下,对该内存区域的访问都不进行权限检查。 这时 AP位无效
b、二级映射
当使用二级映射时,一级页表L1仍然存在,但是一级页表中不再存放物理段基地址了,而是存放了二级页表的基地址,也就是二级页表的首地址。
一级页表要表示4G的地址范围,一共4096项,每一项都表示1M 的大小。二级页表相当于对一级页表这1M的范围作更详细的划分,所以每个二级页表要表示1M 的地址范围。
B: 如下表所示
ARM存储管理系统MMU相关推荐
- ARM存储器之:协处理器CP15
链接:http://www.eefocus.com/embedded/323216/r0 ARM存储器之:协处理器CP15 ARM存储系统有非常灵活的体系结构,可以适应不同的嵌入式应用系统的需要.AR ...
- ARM处理器之MMU和Cache
ARM处理器之MMU和Cache ARM920T的MMU和Cache都集成在CP15协处理器中,MMU和Cache的联系非常密切,以下是CP15协处理器的寄存器列表(摘自[S3C2410用户手册]), ...
- 若在一分页存储管理系统中,某作业的页表如表所示。已知页面大小为 1024字节,试将逻辑地址 1011,2148,3000,4000,5012转化为相应的物理地址。
题目: 若在一分页存储管理系统中,某作业的页表如表所示.已知页面大小为 1024字节,试将逻辑地址 1011,2148,3000,4000,5012转化为相应的物理地址. 页号 块号 0 2 1 3 ...
- 存储管理系统课程设计——C语言实现请求页式存储管理模拟系统
分页存储管理是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号,从0开始,如第0页.第1页等.相应地,也把内存空间分成与页面相同大小的若干个存储块,称为(物理)块或页框( ...
- 详述在设有快表的请求分页存储管理系统中,一个虚地址转换成物理内存地址的过程。
详述在设有快表的请求分页存储管理系统中,一个虚地址转换成物理内存地址的过程. first() {//检索快表if(找到){修改页表项访问位if(是写指令){修改位置为"1";}us ...
- 详述在设有快表的请求分页存储管理系统中,一个虚地址转换成物理内存地址的过程。...
详述在设有快表的请求分页存储管理系统中,一个虚地址转换成物理内存地址的过程. first() {//检索快表if(找到){修改页表项访问位if(是写指令){修改位置为"1";}us ...
- Memblaze发布企业级数据存储管理系统FlashRAID——从NVMe SSD出发,全面进击软件定义存储
北京,2016年6月15日-北京忆恒创源科技有限公司(Memblaze)于DCTC2016数据中心大会上宣布推出FlashRAID企业级数据存储管理系统.FlashRAID针对主流存储介质的特点,基于 ...
- java-net-php-python-51ssm文件存储管理系统计算机毕业设计程序
java-net-php-python-51ssm文件存储管理系统计算机毕业设计程序 java-net-php-python-51ssm文件存储管理系统计算机毕业设计程序 本源码技术栈: 项目架构:B ...
- java jsp 仓库存储管理系统的设计zcd900
技术:Java.JSP等 摘要:仓库存储管理系统的使用是生产企业的重要组成部分,在企业的日常管理中,它影响着企业的生产运营.日常成本控制等各个环节.传统的简单.静态的仓库作业已经无法保证企业各种资源的 ...
最新文章
- Factory-pattern 三种工厂模式
- LSB最低有效位和MSB最高有效位
- android-----JNI学习 helloworld
- thinkphp5如何使用layout
- CPU profiling
- C语言入门基础之输入和输出
- python java web前端 net 移动开发_JavaScript超越了Java,c,python等等成为Stack Overflow上最热门的...
- NYOJ-过河问题(贪心)
- 数据库与MySQL基本知识
- CocosBuilder 教程
- 看不懂简明python教程_简明python教程
- CH579 以太网转串口 串口服务器代码!需要自己编程提升能力的非常值得参考的代码
- python四级是什么水平_四级能过的水平大概什么水平?
- linux下刻录光盘读取不了_Linux下刻录光盘
- 华为测试心率软件,华为运动健康如何测心率 华为运动健康测心率方法
- Bypass UAC 提权
- iOS逆向:微信逆向及动态库开发过程中的坑
- 测绘资质办理需要注意的流程和规定
- 【C/C++】char * ,char ** ,char a[ ] ,char *a[]
- 顺丰快递代码表java,SF-CSIM-EXPRESS-SDK-V1.3 顺丰下单java后台demo代码 - 下载 - 搜珍网...
热门文章
- mi2 android 5.0 方法,下午5点 小米2/2S可直升安卓5.0
- 广州研究院消失了?211西安电子科技大学22考研招生目录
- 简单快译通英汉词典设计源码
- matlab求莱斯分布pdf,Matlab累积分布函数cdf与概率密度函数pdf
- 发票代码和发票号码知识点
- nature文章再也不会出现模糊图片An integrated imaging sensor for aberration-corrected 3D photography
- servicer使用
- 【SDCC讲师专访】专访架构师薛珂:弹性调度平台Saturn的架构设计
- freemarker标签里面的一些用法
- 【计算机网络】FDMA TDMA CDMA