cpu访问这边快而SDRAM应答非常慢,怎么提高程序执行效率。
程序局部性原理:
时间局部性:在同一段时间里,有极大的概率访问同一地址的指令或者数据
空间局部性:有极大概率访问到相邻空间的指令或者数据
答:在2440中有一个指令Cache,和一个DATA指令,会把一小段程序放入指令Cacche中,把变量
放入Data Cache中,这样cpu就不用访问SDRAM,直接访问Cache.,如果Cache中没有,就访问SDRAM中的。
不是使能MMU,data Cache不会启动的
Cache是针对于cpu读的情况,write buffer是针对于cpu写的情况。
0--0 NO Cache NO BUFFER 这些是针对和适用于GPIO寄存器,cpu是直接操作硬件。
1--0 有Cache NO BUFFER
指令:mrc:coprocessor----Register 把协处理器里面的值赋值给cpu里面的寄存器
MCR:register----coprocessor-- 把cpu里面寄存器的值赋值给协处理器里面的寄存器
主cpu的r1写入协处理p15的c1里面
MMU:
当APP比较多的时候,不可能重新编译,也不可能预测它所处的地址,所以必须引入虚拟地址,
虽然应用程序APP1~APPn保存在内存地址(物理地址)各不一样,但是cpu运行他们时,他们都位于一样的虚拟地址上。
物理地址和虚拟地址怎么相互转化,所以就引入了MMU
VA:虚拟地址 PA:物理地址
VA和PA通过MMU,把cpu发出的虚拟地址通过MMU转化为物理地址。
引入虚拟地址原因。
1.让APP(应用程序)以同样的链接地址来编译
2 原因二:如图:让大容量APP可在资源少的系统上运行,通过映射,当SDRAM已满的时候,然后再通过替换。
.
3.MMU不仅只有地址映射的功能,还有权限管理(禁止APP访问其他空间)的功能。
MMU怎么把VA转为PA:
1级页表:在一级页表中每一个条目对应1M
要把表格的基地址告诉MMU
怎么使用MMU:
a.在内存中创建页表(就是上面那个图上的表格)
b.把页表基址告诉MMU
c.设置协处理器p15,启动MMU
条目,描述符的格式:
域:arm9有16个域,每个域用2位表示权限。
条目/描述符:AP
1.设置domain;查看CP15's 的 C3寄存器,确定域权限(domain的作用)
2.AP 如果域权限是01,使用AP来决定
如图:
如果VA相同(虚拟地址) 每切换一个进程,都要修改一下MMU的页表,改变映射,这样开销特别大,所以引用下面的方法
引入MUA:
\
规则:求MUA
PA=APP2所在内存
PA=APP1所在内存
现在就只需要根据不同的PID(进程号)建立不同的映射,不会出现切换进程,页表就需要重新建立的情况
虚拟地址范围一般是0~4G,0xffff ffff
条目数=4G/1M=4096个
每个条目数:32位
页表大小:4096*4=16K