下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、WINCE5.0 和 WINCE6.0 的内存与系统架构作者:LoongEmbedded(kandi)时间:2010.07.21类别:WINCE 嵌入式操作系统1.WINCE5.01.1 WINCE5.0 的内存架构*LoongEmbedded*LoongEmbedded*WindowsCE5.0MemoryModelKernel11IUUlClULI廿LUllmwayvinmenioiymanagerCE5.02GBkernelspace虚拟地址空间不同,WINCE5.0 中所有的进程共享一个 4GB 的虚拟地址空间。这 4GB的虚拟地址空间被分为两个 2GB 的区域,其中低地址的那 2GB
2、 区域(0 x000000000X7FFFFFFF)是用户虚拟空间,这块虚拟空间由应用程序的共用,也就是说应用程序申请的内存都会从低 2GB 虚拟内存空间分配的;而高 2GB 区域(0 x800000000XFFFFFFFF)是操作系统的内核虚拟空间,供 WINCE 操作系统本身使WindowsCE5.0MemoryModelSingle2GBmappingforailprocessesDividedupinto32MBsDts32ProcessLimitEachprocesshasone32MBslot32slotsforprocessesUpperhalfofuserspaceisshar
3、edmemoryRead/Writebyallprocesses我们知道 WINCE5.0 的进程数量最多只能达到 32 个,而且每个进程只能独享32MB 的虚拟空间(这个 32MB 的空间也叫一个 slot),这 33 个进程(32+1,这个 1就是指slot0,因为slot0用于映射当前在处理器上执行的线程所在的进程)占用的虚拟空间0 x000000000 x41FFFFFF(slot0slot32slot33slot63 对应的虚拟地址空间是0 x420000000X7FFFFFFF,这块虚拟地址空间是由所有的进程共享的, 如果每个进程独享的 32MB 虚拟地址空间不够用,那么进程可以在
4、这个范围中请虚拟地址空间,这个范围包括对象存储和内存映射文件(.map 文件,每个进程都有自己的 map 文件)。此范围的最后一个 slot(slot63)从 0 x7E0000000 x7FFFFFFF 用来存放纯资源 DLL。如果某个DLL 里面只有资源信息(比如图标、位图、对话框及字符串表灯),这个 DLL 就会被加载到这个空间内。VirtualMemoryMap2GBforKernelSharedmemory从 0 x80000000 开始是 WINCE 内核使用的虚拟内存空间,其中0 x800000000 x9FFFFFFF(512MB)这段用来静态所有的物理地址,也就是说WINCE
5、 会把所有的物理内存 1:1 地址映射到这段虚拟内存上,这也就是 WINCE 最大支持的物理内存是 512MB 的由来。0XA00000000 xBFFFFFFF(512MB)这段虚拟地址会重复映射所有的物理地址,这段对物理内存的映射与 0 x80000000 这段最大的不同是从 0 x80000000 开始的一段虚拟内存(何宗键老师这里写得是物理内存)是有缓冲的,而从 0XA0000000 开始的一段是没有缓冲的。通常,缓冲可以提高系统的 I/O效率(why,有待进一步理解),但是对于一些 OAL 或者 bootloader 或者驱动来说,使用缓冲有可能会造成灾难性的后果,因为缓冲有可能会更
6、改我们对设备的写操作顺序,因此在驱动程序中如果直接访问设备的 I/O 或寄存器,那么通常使用 0 xA0000000 这段内存地址。物理内存被映射到内核空间之后,WINCE 内核如果要访问某个物理内存地址,就只需要把该物理地址加上 0 x80000000 或者 0 xC0000000 就可以了,这样简便的方式只能由WINCE 内核使用,通常的应用程序是无法享受这种便利的。0 xC20000000 xC3FFFFFF 是 slot97,止匕 slot97 是 WINCE5.0 的核心进程NK.EXE,可见实现 WINCE5.0 操作系统的一些主要功能的 NK.EXE 本身的地址空间还是在和心态中
7、的, 0 xE00000000 xFFFFFFFF 这段最高的地址是内核使用的地址空间, 对于不同的处理器体系结构,这里保存着不同的内容,通常会放置一些供虚拟内存用的页表和中断向量表等内核使用的数据结构。64KB 之上是进程的代码、数据以及堆和栈,进程申请虚拟内存是从低地址向高地址增长的。从每个 32MB 虚拟地址空间最高地址开始,存放的是进程加载的 ROMDLL 的读写数据以及 RAMDLL 的数据(ROMDLL 的代码对所有的进程来说可以共享一个拷贝,放在 slot1 中,但对于 DLL 的数据,就不得不为每个进程设立单独的拷贝),DLL 代码和数据的增长是从高地址向低地址增长的,如果这两
8、个高低增长相遇,那么就表示进程已经耗尽了它的虚拟地址空间,就算此时有能还有多余的物理内存,但是无法使用它了,因为进程的虚拟地址空间已经用完了。我们知道虚拟内存的申请是以 64KB 为边界的,这对进程加载 DLL 有非常重要的影响,这也就意味着每个 DLL 的都要至少占用 64KB 虚拟地址空间,从理论上来说每个进程只能加载 512 个 DLL。要记住所有的 ROMXIPDLL 都会被映射到进程的虚拟地址空间中,因为进程有可能访问任何一个 XIPDLL0通常一个没有图么 WINCE 就可以捕捉到这个错误ROMBasedDLLsROMDLLspacenon-ROMResourcesReadonly
9、dataDLLSpace(Constantforallapplication引0200000003FFFFFFApplicationSpecificSpaceStack(reservedspace)Heap(reservedspace)但是这样并不能捕获代码中所有的野指针从上图我们就 slot0 来看看一个进程中虚拟地址空间的使用情况。一个进程的32MB 虚拟地址空间中,最低的 64KB 地址(0 x0000000 x00010000 也用来捕获野指针的,通常是空指针 NULL 的,如果某个指针访问了低于 64KB 的内存区域,那形界面的 WINCE 操作系统就会包含有 100 个左右这样的
10、DLL,一个含有图形界面的正常 WINCE 包含的这种 DLL 更多,因此这个问题应该引起重视。可以采取一些方法避免虚拟内存耗尽,例如把几个不到 64KB 的小 DLL 合并成为一个大的 DLL。1.2WINCE5.0 的系统架构WindowsCE5.0SystemArchitecture2.WINCE6.02.1WINCE6.0 的内存架构IntroducingtheCE6.0NewKernelE2GBofVirtualMemoryperprocess32KprocessesUnifiedKernelCriticalOScomponentsmovedintokernelspaceImprov
11、edsystemperformanceIncreasedsecurityandrobustnessHighdegreeofbackwardscompatibilityWINCE6.0 支持最大 32000 个进程。(2每个进程独自占用 2G 虚拟地址空间。(3统一/一元化的内核(unifiedkernel),把关键性的 OS 部分移到内核空间。WindowsEmbeddedCE6MemoryModelKernelSharedmemoryUserDLLGWESDriversMemorymappedNewvirtualrmmorymanagerdoesnotoperateInaprocwisldi
12、moctelfYoucreateIheprocesswhenwurwed州JCE6.02GBVM2GBkernelExecuMonshtMidsharedDLLslotUserVirtualMemorySpaceR/WforOScomponentsReadonlyforuserprocessRAMBackedMapfflesMappedatfixediocatkjnforbetterbackwardscampatibiHtyAllDLLs-codeanddataS3memappingacrossallproem导DatspagesareuniquephysitatpagesCodepagesa
13、resharedProcessspace1GBpe1rprocessExecutablecodeanddataVMAllocationFileBackMapfilesDxOOQOODCD*和 WINCE5.0 类似,2G 的用户空间被分为两部分。*最低 64KB,被系统用来捕获野指针。*低 1GB 的地址空间用来加载进程的代码、数据、堆、栈等。*0 x400000000 x5FFFFFFF(512MB),这段虚拟内存空间用于加载所有的用户进行的DLL 代码和数据。*0 x600000000 x6FFFFFFF(256MB)这段内存分配给内存映射文件MMF(memorymappedfiles)。
14、*0 x700000000 x7FEFFFFF 这段内存是内核程序和用户进程间的共享堆,实现内核程序和用户进程间通信(无需通过 API),此区域用户程序可读,但 OS 可写。*0 x7FF000000 x7FFFFFFF 这段内存不可访问,作为用户和核心间的缓存。:煲0 x90000000Ox40UDODGOStaticMappedCached512MBCachedaccesstophysicalmemoryOxSOOOOOOQ*低 1GB 是静态虚拟地址。*0 xC00000000 xC7FFFFFF(128MB)用于内核加载的 XIPDLLs。*0 xC80000000 xCFFFFFFF
15、F(128MB)是文件系统的对象存储区。*0 xD0000000 xDFFFFFF(512MB)是内核模式的程序执行区。*0 xF0000000 xFFFFFFFF 用于捕获系统调用,包含核心数据页。KernelSpace2GigabytesCPUSpecificVMKernelVM256/512MBObjectStore(12BMB)SystemTrapAreaKernelVirtualMemorySharedbyallkernelServersanddriversRamfilesystem&ramregistryFixedmappingindependentofuserspaceK
16、ernelXIPDLLs(128MB)AllXiPDLLsinkernelStaticMappedUncached512MBUncachedaccesstophysicalmemoryCE6.0SystemArchitecture3.WINCE5.0 和 WINCE6.0 的 OALdesignWindowsCE5.0OALDesignShellUserModeServicesDriversNK.EXEKernelDriversBootloaderUserModeKernelMadeWINCE6.0 系统被划分为 usermode 由户模式)和 kernelmode(内核模式)两个“层”,CoreDLL 同时出现在两个层中,驱动程序也移
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025下半年贵州贵阳市花溪区事业单位引进高层次人才12人高频重点提升(共500题)附带答案详解
- 2025下半年四川内江市市本级部分事业单位招聘工作人员20人高频重点提升(共500题)附带答案详解
- 2025下半年云南红河蒙自市事业单位招聘工作人员105人高频重点提升(共500题)附带答案详解
- 2025上海地铁第二运营限公司退役军人招聘120人高频重点提升(共500题)附带答案详解
- 2025上半年四川广元青川县事业单位招聘97人历年高频重点提升(共500题)附带答案详解
- 2025上半年台州市级事业单位公开招聘工作人员历年高频重点提升(共500题)附带答案详解
- 纸张消防班组施工合同
- 高铁建设简易合同模板简化版
- 土石方工程招标文
- 设计合同履行与监督细节
- 辽宁2025年高中学业水平合格性考试物理试卷试题(含答案详解)
- 2024年人教版三年级上数学教学计划和进度安排
- 《电能计量知识介绍》课件
- 2025届甘肃省武威市重点中学高三六校第一次联考英语试卷含解析
- 2023-2024学年山东省潍坊市高新区六年级(上)期末数学试卷(含答案)
- 东方明珠课件
- 2024年教师师德师风工作计划(2篇)
- 物流行业服务质量保障制度
- 养老院物资采购流程及制度
- 眼镜店年终总结及计划
- 公务用车车辆安全培训课件
评论
0/150
提交评论