在wince 6.0 中,虚拟内存的页面有三种情况:
l Free 页面没有被系统使用或者分配
l reserved 页面被系统保留但是并没有映射到物理内存
l Committed 页面已经影射到物理内存
它的内存分布和WINDOWS类似,都是内核2G,用户2G;并且在所有的进程中,内核空间那部分是相同 的;
1. 内核地址空间
值得注意的是,相同的虚拟内存可以被映射到具有不同访问能力的物理地址。对于带有缓冲的虚拟地址,CPU将直接访问缓冲区,这样可以获得更快的访问速度。对于不带缓冲的虚拟地址,CPU将跳过缓冲区直接访问对应的物理内存。
2. 用户地址空间
其中被不同进程加载的相同lib,dll都回被放在相同的虚拟内存地址,同时,代码页会被放在相同的物理页,数据页放在不相同的物理页从而区分不同进程的操作。
wince 6.0 是一个32位的操作系统,提供了4GB的虚拟地址空间,其中系统内核使用高区的2GB,用户进程使用低区的2GB。我们的内存管理单元(memory management unit)用来管理虚拟内存和实际物理内存的映射。
参考网址:http://blog.csdn.net/tracy_luke/archive/2009/08/15/4449379.aspx
尽管Windows Embedded CE 6.0的虚拟内存模型是一个立体的架构,但在某一时刻,由于只能有一个进程在活动,这样,这个活动进程所占用的特定的2GB的用户空间就与2GB的内核空间共同组成了一个4GB的线性虚拟地址空间。每个用户进程有自己唯一的内存映射,多个用户进程之间不会产生冲突。同时,不允许用户进程访问内核存储器区域,但位于内核区域的组件却有权访问整个4GB的地址空间,且可以访问任何有效的存储器位置。
物理地址到虚拟地址的映射有两种方式,一种是静态映射方式,一种是动态映射方式,静态映射为内核提供了一个虚拟地址到物理地址的静态映射表,这个映射表在系统引导时创建且不随时间而变化。OEMAddressTable定义了ARM和X86 CPU的这种静态虚拟地址与物理地址的映射,而对于SHx和MIPs处理器,CPU控制虚拟地址到物理地址的静态映射。动态映射是一种在需要时分配内存分页、在不需要时释放内存分页的一种虚拟地址到物理地址的映射,由于动态映射限制了由MMU所使用的映射表所需要的物理内存量,因此可以节省内存资源,有效地使用物理内存。
对标记为Cached的虚拟地址的访问,CPU将直接访问Cache(缓冲区),而忽略与其对应的物理地址,这样可以获得更快的访问速度;而对标记为Uncached的虚拟地址的访问,CPU将跳过缓冲区,直接访问与虚拟地址对应的物理内存。由于Cache是位于CPU内部更快速的物理存储器,CPU对它的访问速度将远远大于对扩展SDRAM及外设的访问速度。通常,如果一段RAM、SDRAM只有CPU访问,那么应该使用Cached地址,这样能获得最快的速度;而如果这段地址CPU与外设都会访问,则必须使用Uncached地址,这样CPU与外设的数据才能同步。对硬件设备寄存器地址的访问是使用Uncached地址对硬件进行读写访问的一个最常见的例子。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/bjtuzdq/archive/2009/01/12/3759546.aspx