7.1 内存管理单元MMU介绍
7.1.1 S3C2410/S3C2440 MMU特性
负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查
特性:
与ARM V4兼容的映射长度、域、访问权限检查机制
4种映射长度:段(1MB)、大页(64kb)、小页(4kb)、极小页(1kb)
对每段都可以设置访问权限
大页、小页的每个子页(被映射页的1/4)都可以单独设置访问权限
硬件实现的16个域
指令TLB(含64个条目)、数据TLB(含64个条目)
硬件访问页表(地址映射、权限检查由硬件自动进行)
TLB中条目的替换采用round-robin算法
可以使无效整个TLB
可以单独使无效某个TLB条目
可以在TLB中锁定某个条目,指令TLB、数据TLB互相独立
7.1.2 S3C2410/S3C2440MMU地址变换过程
地址变换原因:
(1)程序很大,不能一次全部装入内存
(2)多道系统很多程序同时执行,不能全部装入内存
ARM CPU上的地址转换过程涉及3个概念:虚拟地址(VA)、变换后的虚拟地址(MVA)、物理地址(PA)
没启动MMU时,CPU核、cache、MMU、外设等使用的都是物理地址,启动MMU后使用的都是虚拟地址
CPU核看到的只是虚拟地址VA,cache和MMUliyongMVA转换得到PA
实际设备看不到VA、MVA,读写他们时使用物理地址PA
如果VA<32M需要使用进程标识号PID(通过CP15的C13获得)来转换为MVA
2、虚拟地址到物理地址的转换过程:
过程如下:
(1)根据给定的虚拟地址找到一级页表中的条目
(2)如果此页表是段描述符,则返回物理地址,转换结束
(3)否则如果此条目是二级页表描述符,继续利用虚拟地址在此二级页表中找到下一个条目
(4)如果这第二个条目是页描述符,责返回物理地址,转换结束
(5)其他情况出错
页表基址寄存器:
一级页表必须是16K[[14:0]位为0]对齐的
根据一级描述符的最低两位,可分为以下4种:
(1)0b00:无效,(2)0b01:粗页表(3)0b10:段,(4)0b11:细页表
一级页表描述符格式:
段的地址转换过程:
按二级页表描述符的最低两位,可分为:
(1)0b00:无效,0b01:大页描述符,(3):0b10:小页描述符,(4)极小页描述符
二级页表的描述符格式:
大页的地址转换过程:
小页的地址转换过程:
极小页的地址转换过程:
7.1.3 内存的访问权限检查
由CP15寄存器C3(域访问控制)、描述符的域(Domain)、CP15寄存器C1的R/S/A位、描述符的AP位等联合作用
CP15寄存器的C1中A位表示是否对地址进行对齐检查
CPU读取指令时不进行对齐检查,以字节为单位访问时也不进行对齐检查。对齐在MMU的权限检查、地址映射前进行
内存的访问权限检查可以概括为以下两点:
(1)“域”决定是否对某块内存进行权限检查
(2)“AP”决定如何对某块内存进行权限检查
S3C2410/S3C2440有16个域,CP15寄存器C3中每两位对应一个域,用来表示这个域是否进行权限检查。
Domain占4比特,用来表示这块内存属于16个域哪一个
AP、ap3、ap2、ap1、ap0结合CP15寄存器C1的R\S位,决定如何进行权限检查
AP控制整个段(1M)的访问权限;大页描述符中的每个apx(x为0~3)控制一个大页(64kb)中1/4内存的访问权限,小页描述符与大页描述符相似,每个apx(x为0~3)控制一个小页(4kb)中1/4内存的访问权限
7.1.4 TLB的作用
存储近期用到的页表条目,避免每次地址转换时都到主存去查找。
7.1.5 Cache的作用
CPU写数据时,有写穿式和回写式两种方式
(1)写穿式:从CPU发出的信号送到Cache的同时,也写入主存
(2)回写式:只用当Cache中的数据被换出或者强制进行清空操作时,才将原更新的数据写入主存相应单元中
1、指令Cache
系统刚上电或者复位时,ICache中的内容是无效的,并且ICaches功能是关闭着的
ICache一般在MMU开启之后被使用,页表描述符的C位(Ctt)用来表示一段内存是否可以被Cache,Ctt=1时允许Cache否则不允许
当MMU没有开启时,ICache也是可以被使用的,这时CPU读取指令时多设计的内存都被当做是允许Cache的
不管ICache是否被开启,CPU每次取值时都会先在ICache中查找是否能找到所要的指令
CPU取指的3种情况:
(1)Cache命中且Ctt为1时,从ICaches中去除指令,返回CPU
(2)Cache缺失且Ctt为1时,cPU从主存中读出指令,并把指令加入ICache中
(3)Ctt为0时,CPU从主存中读出指令
2、数据Cache
系统刚上电或复位时,DCache中内容无效,DCache功能关闭,Write Buffer中的内容也飞起不用,Write Buffer与DCache紧密结合,没有专门的控制位来开启、停止它。
DCache一般在MMU开启之后被使用
Cache、Write buffer的内容和主存内容保持一致,需要遵循如下两个原则:
(1)清空DCaches,是的主存数据得到更新
(2)使无效ICaches,是的CPU取指时重新读取主存
编写程序时,要注意如下几点:
1、开启MMU前,使无效ICaches、DCaches和Write Buffer
2、关闭MMU前,清空ICaches、DCaches,将脏数据写入主存中
3、如果代码右边,使无效ICaches
4、使用DMA操作可以被Cache的内存时:将内存的数据发送出去时,要清空Cache;将内存的数据读入时,要使无效Cache。
5、改变页表中的地址映射关系时也要慎重考虑
6、开启ICache/DCache时,要考虑他们中的内容是否与主存保持一致
7、对于I/O地址空间,不适用Cache和Write buffer。每次读写操作必须直接访问设备
7.1.6 S3C2410/S3C2440 MMU、TLB、Cache的控制指令
CPU核与协处理器间的传输指令:
7.2 MMU使用实例:地址映射
将开启MMU,并将虚拟地址空间0xA0000000~0xA0100000映射到物理地址空间0x56000000~0x56100000,可以操作地址0xA0000010、0xA0000014达到驱动4个LED的效果