首先介绍cache,在此先了解ARM存储体系。
上图是计算机系统存储体系,嵌入式系统是属于计算机系统的,因此上图的存储体系也是嵌入式系统的存储体系。
内部存储器:包括通用寄存器,程序状态寄存器。特点是访问速度快,容量小;
TCM:如cache,主存储器,内存。特点是访问速度不及内部存储器,但容量大;
辅助存储器:速度更慢,但容量更大。
cache:
没有使用cache时,处理器是直接访问存储器的。其中存储器的速度较慢,处理器速度较快,这种速度的不一致导致了处理器访问存储器用时较长。为了解决这个问题,引进了cache。
cache是一种容量小但存取速度非常快的存储器,它保存最近用到的存储器中数据的拷贝。对于程序员来说,cache是透明的,它自动决定保存哪些数据、覆盖哪些指令。当处理器需要访问存储器时,首先访问cache,若cache里面有处理器需要的数据,则直接从cache取得所需数据;若cache没有处理器需要的数据,则会从存储器中取得所需数据,并且将数据拷贝一份到cache。
cache按照功能划分为:
I-cache:指令cache,用于存放指令
D-cache:数据cache,用于存放数据
mmu
虚拟地址:程序中使用的地址
物理地址:物理存储单元实际的地址
虚拟地址的作用:①可以让进程使用更大的空间②可以解决地址冲突
mmu的作用:完成虚拟地址到物理地址的映射。
ARM11前,cache位于MMU的左端,即虚拟内存可以直接访问cache;ARM11后(包括ARM11),cache位于MMU的右端,即要访问cache首先要通过mmu将虚拟地址映射成物理地址才能访问cache。
MMU和Cache的控制都是通过协处理器CP15来实现的。
从ARM核的数据手册中可以看到,CP15存在一个control寄存器,该32位寄存器中有3位是用来控制Icache,Dcache和mmu;CP15还存在一个cache operations寄存器也是用于控制cache。所以要关闭mmu和cache,包括两部分:
①通过cache operations寄存器使cache失效
②关闭Dcache,mmu(Icache可以不用关闭)
汇编代码:
disable_mmu_cache:
mcr p15,0,r0,c7,c7,0
mrc p15,0,r0,c1,c0,0
bic r0, r0, #0x00000007
mcr p15,0,r0,c1,c0,0