CE 5内存映射

原创 2008年10月01日 20:07:00

       越是相近的东西,越是容易混淆;反倒是不同的特征,容易描述清楚。既如此,我就从简到难,先来讲讲内存布局的区别吧。

       首先是经典的CE 5内存布局:

       嗯,的确是非常经典的内存映射方式。任何一个ARM程序员,即便没有接触过WinCE,也很容易理解这张图。它简直就是为ARM度身订制的!

       总共4GB的虚拟空间,最低的1GB被分割成32个槽(Slot) 每个槽容纳一个进程,因此,每个进程可用的最大虚拟空间是32MB(当然,这个32MB的上限很像NBA的工资帽,只要动些脑筋,找些特例,总可以超过这个界限)。Slot 0对应当前进程,Slot 1中没有进程,CE 5把系统预制的dll放在这个区域。从Slot 2开始,每个Slot被唯一地映射到一个进程,一般来讲,按照启动顺序,依次是filesys.exe, device.exe, gwes.exe等等。需要注意的是,CE 5是很典型的微内核结构,因此,各种系统调用被区分成不同的服务,由各个应用程序提供。比如文件系统的调用,就是由filesys.exe提供。虽然这些程序提供的是系统服务,但是从内核的角度来讲,称它们为应用程序是十分恰当的,因为他们的的确确运行在用户态中。

       1GB2GB的内存是共享的。2MB以上的内存块分配,内存映射文件等,都在这里发生。

       2GB3GB的内存是静态映射的。这意味着,在任何时候,这段内存映射都是不变的。其中较低的一半地址,0x80000000 – 0x9FFFFFFF,是Cacheable;而另一半,则是Uncacheable的。定制CE的开发人员,需要创建一个数组,指明Cacheable的地址,是如何映射到系统的物理内存空间的,并把这个数组传递给CE内核。内核会自动创建Uncacheable的地址,映射方式恰好等于前者加上0x20000000

       0xC0000000以上的空间完全被内核代码和数据结构使用。虽然微软把内核称为一个进程,而且也确实把它放在进程数组的第0个元素,但说实话,我还是不愿意把内核理解为一个进程。在内核地址中,比较有趣的是一些非常非常高的地址,大约是0xFFFD0000以上的地址,这里放置了中断向量、页表等关键的结构,很值得仔细探讨一下。

       好了,这就是CE 5的大致内存布局了。下次和CE 6对比一下!

CE教程 第五章 《指针》

步骤 6: 指针: (密码=098712)上一步解释了怎样用代码寻找功能对付变化位置.但单独用不容易找到地址并修改成你要的数值.这就是为什么要用到指针了.在TUT下面有两个按钮,一个会改变数值,另一个...
  • hmq4623
  • hmq4623
  • 2010年09月27日 09:25
  • 1156

ce内存映射的点点滴滴

 作者:wy12218 发表于 2006-11-9 18:17:00 OEMAddressTable里定义的映射关系是给ARM MMU用的,是在KernelStart(source code参考win...
  • huafulan
  • huafulan
  • 2009年08月04日 16:22
  • 403

QT for Windows CE 5.0/6.0

我自己没有用过,看到这部分内容,感觉不错,转来放在自己的空间中,供以后学习。http://topic.csdn.net/u/20091209/10/7c7d4359-2db1-4a39-ae09-8e...
  • 91program
  • 91program
  • 2009年12月10日 12:47
  • 4231

Windows CE .NET中实现服务的简单过程

作者:liguisenblog:http://blog.csdn.net/liguisen/Windows CE .NET中的服务是一种流接口驱动程序,并不是真正的设备驱动程序,它以动态链接库DLL的...
  • liguisen
  • liguisen
  • 2007年03月21日 10:14
  • 1184

定制自己的 WinCE5.0 ARMV4I 模拟器

一.  环境准备Windows XP SP3 + Visual Studio.net 2005 SP1 + Windows Embedded CE 5.0下面详细列举制作模拟器前需要安装的相应软件和补...
  • roger_ge
  • roger_ge
  • 2010年05月29日 10:49
  • 3175

内存共享CreateFileMapping用法

感觉这篇文章写得比较详细 CreateFileMapping的MSDN翻译和使用心得    测试创建和打开文件映射的时候老是得到"句柄无效"的错误, 仔细看了MSDN以后才发觉是函数认识不透...
  • xuqiang918
  • xuqiang918
  • 2014年09月19日 10:41
  • 1675

x86内存映射

Contents    1 "Low" memory (  1.1 Overview 1.2 BIOS Data Area (BDA) 1.3 Extended ...
  • seek_0380
  • seek_0380
  • 2014年11月20日 17:06
  • 1682

Qt内存映射

最近在看代码的时候发现了Qt的内存映射,原来只知道MFC有内存映射机制,可以在读取大数据文件时节约读取的时间,原来Qt中也有相应的机制,其用法更简单,下面用一个小例子演示其用法#include #i...
  • hanshuobest
  • hanshuobest
  • 2017年06月03日 00:00
  • 847

vc++使用内存映射

文件操作是应用程序最为基本的功能之一,Win32 API和MFC均提供有支持文件处理的函数和类,常用的有Win32 API的CreateFile()、WriteFile()、ReadFile()和MF...
  • songshu1007
  • songshu1007
  • 2014年05月09日 11:38
  • 885

c++ 利用内存映射读取大文件

由于用到的txt存放的数据有几十万行,用getline来读取文件非常慢,搜索了一下可以来优化读取文件的方法。 据说用内存映射读取文件速度快,试了一下,但是发现要分行处理数据时,速度还是挺慢的。 有关内...
  • KUAILE123
  • KUAILE123
  • 2013年09月05日 17:16
  • 3893
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CE 5内存映射
举报原因:
原因补充:

(最多只允许输入30个字)