1.计算机存储体系



iommu开启bios_数据



越往上,越快越贵容量越小


越往下容量越大越慢



2.cache有无对比



iommu开启bios_虚拟地址_02



没有cache的时候,cpu直接和主存储器进行数据传输,很慢。


有了cache以后,现在cache查找有无cpu需要的数据,有的话直接使用,没有再到主存储器去寻找,找到以后,把数据存到cache里面,以便下次再用到该数据会快很多,cache是比主存储器快很多但是容量小,分为指令cache和数据cache的。



3.虚拟地址:程序中使用的地址



iommu开启bios_物理地址_03



物理地址:实实在在的物理存储设备在系统中的地址。


最终我们应用程序是要访问物理地址,但是鉴于物理地址小,且有可能多个应用程序会同时访问同一个物理地址引起冲突,所以引入虚拟地址,通过映射以后对存储机制进行扩充范围和避免冲突。而重点是如何实现映射机制。




4.MMU作用:把虚拟地址转换成物理地址



iommu开启bios_数据_04



(1)上面的图是ARM11之前的结构,要访问cache直接就可以。


(2)下面的图则是ARM11之后包括arm11,要访问cache就要先将地址进行映射,才能到物理地址访问cache。


(3)MMU和cache都是由协处理器cp15控制的



5.代码:



(1)使得I/D cache已有的数据失效





iommu开启bios_虚拟地址_05




iommu开启bios_iommu开启bios_06





(2)直接关闭cache和MMU



iommu开启bios_数据_07







iommu开启bios_数据_08




iommu开启bios_数据_09




iommu开启bios_iommu开启bios_10





(3)具体实现


主要是MMU和Dcache,至于Icache很宽松。主要是怕在下载和启动内核的过程中,使用到的数据存在Dcache而不放到内存。


@关闭MMU和Cache	
disable_mmu:
	mcr	p15,0,r0,c7,c7,0
	mrc	p15,0,r0,c1,c0,0
	bic	r0,r0,#0x07
	mcr 	p15,0,r0,c1,c0,0
	mov 	pc,	lr




各种平台的CP15的操作是一样的。



(4)思考:


使得之前的数据失效的Rd参数和关闭MMU的Rd是不是要一样???