同一块物理内存在ARM中可以有3中地址:VA, MVA, PA。
VA:这个地址是CPU所使用的地址,就是从CPU的角度可以看到的地址。在CPU预取指或者读写内存时,它会把这个地址发到内核地址总线上去。
MVA:这个地址是VA经过CP15的R13转换后的地址。这个R13是来实现FCSE的,即快速上下文切换扩展。这个组件在一般的操作系统上很少使用(个人观点),比如MTK的现有实现以及普通的Linux系统,所以我们可以认为MVA是和VA相等的。MVA是协处理器R13的输出,MMU以及cache的输入。
PA:它是MVA经由MMU转换后输出的地址,这个地址将被放到系统总线上(ASB或者AHB),然后传递给对应的物理内存单元上。
简单的图示如下:
-----------------------------------------------------------------------------------
应该说ARM的内存地址转换的过程还是比较清晰明了的,没有x86那样的各种分段。复杂的部分主要是MMU那块地址转换的实现,以及MMU与cache相交叠的一些功能。
关于FCES,个人一直不太明白其使用的场合。它会设定最多的进程个数为128个,然后每个进程都只有32M的内存空间。这种限定在现在的普通操作系统中基本是不可能被遵守的。