在Windows CE 5.0 (Wince) 的内存管理中,用户地址空间是操作系统为应用程序和内核预留的一系列连续的虚拟地址范围,用于支持不同类型的存储和功能。该系统具有特定的结构和特性,以便高效地管理和保护内存。
首先,用户地址空间被划分为三个主要区域:
1. **程序空间** (slot 0~slot 32): 这是应用程序运行的核心区域,包含了正在执行的进程以及本地执行的XIP(执行在内存中的代码)动态链接库。这些区域对程序的代码和数据进行存储和访问。
2. **对象空间** (slot 33~slot 63): 这部分主要用于对象存储和内存映射文件,如注册表、数据库和其他持久化的数据。内存映射文件允许程序直接访问磁盘上的文件,而无需实际读取整个文件到内存。
3. **资源映射**: 这是与系统资源相关的区域,可能包括设备驱动、配置数据或其他与系统功能密切相关的内存空间。
在物理地址和虚拟地址的映射方面,Wince5.0采用存储管理单元(MMU)来实现虚拟地址到物理地址的转换。静态映射是预先配置的,通过`CreateStaticMapping`或`NKCreateStaticMapping`函数,以及OEMAddressTable进行管理,以确保关键区域的性能和安全性。动态映射则通过`VirtualAlloc`、`VirtualCopy`和`VirtualFree`等API进行内存分配、复制和释放。
内存管理的粒度是基于页的,其中虚拟地址空间的大小为64KB,而物理空间的大小可以是1KB或4KB,根据不同的内存类型。访问权限的管理也是内存管理的重要组成部分,确保了不同区域的安全隔离。
内核地址空间则与用户地址空间分开,有特定的分配,例如32MB/slot 64~slot 127,其中包含了内核本身(NK.exe)、OEM的静态映射、内核页等核心组件。内核地址空间还包括有缓存和无缓存的静态映射,以适应不同的内存需求。
对于SMDK2440平台,用户进程可访问的空间更为明确,如对象空间(992MB)、XIP动态库(32MB)、进程私有空间(32MB)等,同时还有保留区域、代码区、数据区、堆、线程栈和动态库加载区等。对象存储提供了一种持久化的存储方式,支持RAM盘和文件系统,但有限制,如最大存储对象数量(4M个)、RAM文件系统容量(256M)和单个文件大小限制。
Wince5.0的内存管理是复杂且精细的,旨在优化资源利用、保护数据安全并提供必要的灵活性,使得嵌入式系统能有效地运行各种应用程序。