|
| 同其它Windows操作系统一样,Windows CE.NET也支持32位虚拟内存机制、按需分配内存和内存映射文件等。但是与其它Windows操作系统又有明显的不同。毕竟Windows CE是一种嵌入式实时性的操作系统,在内存管理方面必须要比其它Windows操作系统更节约物理内存和虚拟地址空间。在内存管理API方面,为了便于移植程序,Windows CE和其它Windows操作系统函数声明基本一致,这使一个在其它Windows下开发的程序员可以直接使用早就熟悉的API函数, 但是CE下内存管理的原理开发者还是应该熟悉的。
1、ROM和RAM
对于早期采用的存储设备一般采用ROM + RAM ,在ROM中存放的所有文件可以是压缩的也可以是不压缩的,这取决于OEM(原始设备制造商)。OEM在定制CE内核时可以设置一个标志告诉ROM镜像制作工具(romimage.exe)是否压缩文件。对于ROM中存放的模块(DLL、EXE文件)来说,如果是压缩的,模块在运行前先解压并全部存放到RAM中。如果是不压缩的,并且ROM介质支持线性访问(line-accessed),就可以本地执行(executed in place,缩写为XIP)。利用本地执行方式运行应用程序、DLL的优点是:采用这种技术在加载EXE或DLL时,其中的代码段数据不加载到物理内存中,内核只是分配虚拟地址空间给代码段,当执行代码时内核会到实际存放在ROM存储设备上的文件中寻找代码并执行。采用这样的技术既可以节省可用内存又可以减少加载的时间。但是这种技术有一定的局限性,如果要让CPU到ROM中去寻找代码执行,那么ROM介质必须支持线性访问,这就要求ROM介质支持线性访问,而不是块访问。XIP这种加载方式的缺点就是执行速度相对较慢,CPU访问ROM的速度肯定远慢于访问RAM的速度。
基于Windows CE的产品开始采用FLASH、IDE等永久存储设备时,内核镜像(.bin)和其它应用程序文件开始存放到永久存储设备中而不是ROM中,这不仅仅是因为硬盘或者FLASH的I/O速度比ROM快,更因为现在的内核包含的功能多并且文件数量增加,因而需要的存储空间很大,一般都在20MB左右。再加上其它开发商开发的应用程序文件,要求的空间就更大了。CE启动时内核镜像由加载程序解压并将系统文件加载到RAM的NK,NK是在config.bib中定义的一段RAM区域,专用于保存内核镜像解压出来的所有文件。Windows CE将NK看作是ROM,当执行一个应用程序时,CE内核将这个应用程序需要的系