WinCE5 与 WinCE6 的虚拟内存布局
wwfiney@ARMCE
在 WinCE6 之前,进程(process)有最多 32 个,及每个进程只能有 32MB 虚拟内存(virtual
memory)的限制,并且所有的进程共享相同的 4GB 地址空间。对于 CE6,内核进程存在于
4GB(32-bit)虚拟地址空间的高 2GB 空间内,并且底部的 2GB 空间对于每一个进程都是唯一
的。由于可创建的句柄数量的原因,进程有最多 32000 个的限制。但是实际应用当中,限制
进程数量的往往是物理内存大小。
在以前版本的 WinCE 中,当前进程使用 Slot0。在 WinCE6 里面,Slot0 和其他进程 Slot
一样,都各有 2GB 的有效空间。
由于虚拟内存的存取是硬件通过内存管理单元(MMU)来实现的,所以虚拟内存编码是
CPU 相关的。与其他使用软件 TLB(
translation look-aside buffer
)的 CPU 体系不同,ARM 和
X86 体系的 CPU 使用硬件页表,所以虚拟内存的存取是通过硬件直接进行的。
下面列出 WinCE6 在虚拟内存管理方面的设计目标:
•
每个进程拥有大的虚拟内存
• 没有预设的进程数限制
•
进程间的保护
•
最小的 CPU 相关代码
•
高效的虚拟内存分配
•
高效的 TLB miss 处理
下表列出 CE6.0 的虚拟内存分布
模式 地址范围 大小 描述 注释
内 核 模
式
0xF0000000 -
0xFFFFFFFF
256
MB
CPU 特定的虚拟内存
空间
系统呼叫陷阱区域
内核数据页
内 核 模
式
0xE0000000 -
0xEFFFFFFF
256
MB
内核虚拟地址
CPU 相关
内核空间虚拟地址
有些 CPU 体系禁止了这块地
址,如 SHx
内 核 模
式
0xD0000000
-
0xDFFFFFFF
256
MB
内核虚拟地址 内核空间地址,由所有被内核
加载的服务和驱动共享
内 核 模
式
0xC8000000 -
0xCFFFFFFF
128
MB
对象存储(Object store) RAM 存储空间,为 RAM 文
件系统,CEDB 数据库,RAM
注册表服务
内 核 模
式
0xC0000000 -
0xC7FFFFFF
128
MB
内核 XIP 的 DLL XIP 的 Dll,服务于内核及所
有由内核加载的服务和驱动
内 核 模
式
0xA0000000
-
0xBFFFFFFF
512
MB
非缓存的静态映射地址
不通过 CPU 缓存直接访问物
理内存
内 核 模
式
0x80000000 -
0x9FFFFFFF
512
MB
缓存的静态映射地址 通过 CPU 缓存来访问物理内
存
用 户 模
式
0x7FF00000 -
0x7FFFFFFF
1 MB 未映射,作为保护 用户模式与内核模式之间的
缓冲地址
用 户 模
式
0x70000000 -
0x7FEFFFFF
255
MB
共享的系统堆(heap) 内 核与 进 程 之 间 共 享 的 堆
(heap)空间