虚拟地址空间之所以是4G,是因为现在的wince系统是32位的地址总线,所以它可以寻址2^32也就是4GB的虚拟地址空间。这4GB的虚拟地址空间被分成2个2GB的区域,上面的2GB的是内核空间,下面的为用户空间。而用户空间被分成64个32M的slot,slot1-32保留给要加载的每个进程,每个进程只能占用一个slot,这也就是为什么wince(4.2和5.0)最多同时可以运行32个进程,而每个进程最多只能是32m大小的原因。当前正在运行的进程还要被影射到slot0。剩下的slot用于对象存储,内存映射文件和资源映射。对象存储是受保护的,不允许从文件系统之外访问对象存储,而内存映射文件和dll资源却可以被不同进程内的所有线程访问。(FSRAMPERCENT是用于指定实际ram中对象存储区域的百分比,另外2种办法:during boot using pOEMCalcFSPages 和using api SetSystemMemoryDivision )。

     内核空间的2GB地址(cached部分)其实相当于系统的物理地址,而下面的2GB地址相当于系统的虚拟地址。因为地球人都知道当应用程序要跑起来的时候需要系统的支持,操作需要访问内核,但是上面2GB是运行在kernel mode,而下面2GB运行在user mode,所以这两者之间要建立一层映射关系。

     而内核空间地址相对于arm的mmu来说又是虚拟地址,在oemaddresstable中可以很明显的看到,而真正的物理地址就是oemaddresstable中的physical address。