从 0x80000000 开始是 WINCE 内核使用的虚拟内存空间,其中
0x80000000~0x9FFFFFFF(512MB)这段用来静态所有的物理地址,也就是说
WINCE 会把所有的物理内存 1:1 地址映射到这段虚拟内存上,这也就是 WINCE 最
大支持的物理内存是 512MB 的由来。0xA0000000~0xBFFFFFFF(512MB)这段虚拟
地址会重复映射所有的物理地址,这段对物理内存的映射与 0x80000000 这段最大
的不同是从 0x80000000 开始的一段虚拟内存(何宗键老师这里写得是物理内存)是
有缓冲的,而从 0xA0000000 开始的一段是没有缓冲的。通常,缓冲可以提高系统
的 I/O 效率(why,有待进一步理解),但是对于一些 OAL 或者 bootloader 或者驱动
来说,使用缓冲有可能会造成灾难性的后果,因为缓冲有可能会更改我们对设备的
写操作顺序,因此在驱动程序中如果直接访问设备的 I/O 或寄存器,那么通常使用
0xA0000000 这段内存地址。
物理内存被映射到内核空间之后,WINCE 内核如果要访问某个物理内存地址,就
只需要把该物理地址加上 0x80000000 或者 0xC0000000 就可以了,这样简便的方式
只能由 WINCE 内核使用,通常的应用程序是无法享受这种便利的。
0xC2000000~0xC3FFFFFF 是 slot97,此 slot97 是 WINCE5.0 的核心进程
NK.EXE,可见实现 WINCE5.0 操作系统的一些主要功能的 NK.EXE 本身的地址空
间还是在和心态中的,0xE0000000~0xFFFFFFFF 这段最高的地址是内核使用的地
址空间,对于不同的处理器体系结构,这里保存着不同的内容,通常会放置一些供
虚拟内存用的页表和中断向量表等内核使用的数据结构。