版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2020/10/10,北京理工大学珠海学院 计算机教研室,1,第二章 Windows CE体系结构与功能,北京理工大学珠海学院 计算机教研室,2,2020/10/10,教学目的,熟悉内存管理与分配的基本方法,掌握物理内存与虚拟内存之间的映射关系;熟悉堆栈的基本概念,掌握各种内存分配方法的使用。,北京理工大学珠海学院 计算机教研室,3,2020/10/10,项目5:内存分配PDA的内存管理,本节课程主要知识点 Windows CE5.0的内存管理 Windows CE5.0的内存结构(重点、难点) 物理内存与虚拟内存的映射(难点) 堆(难点) 栈 各种内存分配方法的对比(重点),北京理工大学珠海
2、学院 计算机教研室,4,2020/10/10,教学重点 Windows CE5.0的内存管理的基本概念 堆和栈的基本概念 教学难点 理解虚拟内存的结构 虚拟内存的使用 堆的使用,北京理工大学珠海学院 计算机教研室,5,2020/10/10,内存管理,内存管理是操作系统中最重要的功能之一,尤其是在嵌入式系统中更为重要。 内存管理的目的是为了充分利用内存,尽可能方便用户使用内存。 解决程序空间比实际内存空间大的问题。,北京理工大学珠海学院 计算机教研室,6,2020/10/10,2.3 内存管理,2.3.1 内存管理概览 Windows CE采用层次化的机构进行内存管理,图2.11 Windows
3、 CE内存管理概览,北京理工大学珠海学院 计算机教研室,7,2020/10/10,2.3.2 物理内存 Windows CE中,RAM、ROM和Flash Memory都被看成物理内存,图2.12 物理内存,为操作系统和应用程序提供运行缓冲空间,用来存储程序,包括操作系统映像本身和组成操作系统的一些其他文件,北京理工大学珠海学院 计算机教研室,8,2020/10/10,2.3.3 虚拟内存 Windows CE是32位的操作系统,虚拟寻址能力为4GB Windows CE中所有进程共享一个4GB的虚拟地址空间 Windows CE的内存基于页式管理。其支持两种页大小:1KB和4KB 虚拟内存的
4、申请分为保留(reserve)和提交(commit)两个过程;虚拟地址空间以64KB为边界进行保留,任何一次虚拟内存申请都会返回一个64KB的整数倍的地址,北京理工大学珠海学院 计算机教研室,9,2020/10/10,MMU-(Memory Management Unit)内存管理单元负责虚拟内存的管理,把虚拟地址映射到物理地址,并提供一定的内存保护 一个有效的虚拟地址必须被映射到一个物理地址 允许程序代码空间在需要的时候即时的申请,北京理工大学珠海学院 计算机教研室,10,2020/10/10,4GB的虚拟地址空间分为两个2GB区域 用户空间:低地址2GB用户空间,供应用程序使用。即应用程序
5、申请的内存都会从此地址空间中返回 总共64个slot,每个slot为32MB 大多数是动态虚拟映射 内核空间:高地址2GB内核空间,供Windows CE操作系统本身使用 只被特权访问的内核模式代码使用(Kmode) 大多数是静态虚拟地址映射(不会有页内错误),北京理工大学珠海学院 计算机教研室,11,2020/10/10,图2.13 Windows CE的4GB地址空间,4GB分成若干个slot,每个slot占 32MB,编号从0开始,存放进程的虚拟地址空间,如slot2被Filesys.exe占用,映射当前在处理器上执行进程,由XIP的DLL代码使用,由所有进程共享。应用程序使用的虚拟内存
6、可在这个范围申请。包括对象存储和内存映射文件,用来静态映射所有的物理地址,即Windows CE会把所有的物理内存1:1的映射到此段虚拟地址上,此段空间会重复映射所有的物理内存。与0 x80000000一段最大的不同是此段内存是不带缓冲的。,Slot97,Windows CE的核心进程NK.exe,放置一些供虚拟内存用的页表和中断向量表等内核使用的数据结构,北京理工大学珠海学院 计算机教研室,12,2020/10/10,内核与用户空间的地址分配,北京理工大学珠海学院 计算机教研室,13,2020/10/10,Active Process,Active Process,Active Proces
7、s,Active Process,Active Process,Windows XP 内存结构,System Reserved (kernel mode space),0000 0000,8000 0000,FFFF FFFF,Application Space,北京理工大学珠海学院 计算机教研室,14,2020/10/10,Windows CE 内存结构,System Reserved (kernel mode space),0000 0000,0400 0000,4200 0000,8000 0000,FFFF FFFF,Active Process,Active Process,Acti
8、ve Process,Active Process,Active Process,Active Process,Application Space,Reserved,Large Memory Area (memory mapped files),Application Space,北京理工大学珠海学院 计算机教研室,15,2020/10/10,0000 0000,图2.14 内核映射的物理内存,北京理工大学珠海学院 计算机教研室,16,2020/10/10,在X86和ARM处理器中,Windows CE的静态内存映射是由OAL层中的OEMAddressTable数组决定 物理内存映射到内核空间
9、之后,Windows CE内核中访问物理内存只需把该物理内存地址加上0 x80000000或者0 xA0000000即可 进程中虚拟地址空间的使用情况(以Slot0为例),北京理工大学珠海学院 计算机教研室,17,2020/10/10,为什么把Slot0映射为当前进程的地址空间 可避免重定位,让所有的EXE的虚拟地址都从0地址算起 保证对任何一个进程,共享的DLL代码都可以通过同样的偏移访问到位于不同进程中的不共享的DLL数据 一个进程的32MB虚拟地址空间中,最低的64KB地址用来捕获野指针(通常是空指针NULL的)即若某个指针访问了低于64KB的内存区域,则捕获这个错误 64KB之上是进程
10、的代码和数据以及一些堆和栈,北京理工大学珠海学院 计算机教研室,18,2020/10/10,0000 0000,0400 0000,4200 0000,8000 0000,Large Memory Area (memory mapped files),虚拟内存中的Slots,Application Slots (Slots 2-32),Current Application (Slots 0-1),2 Gigabytes Divided into 64 32 MByte Slots 31 slots for LMA 31 slots for applications 2 slots for c
11、urrent application,北京理工大学珠海学院 计算机教研室,19,2020/10/10,Slot,当一个应用程序启动时,内核为这个程序选择一个空闲的槽(Slot),并且加载所有的代码、资源,并分配堆栈,加载DLL等。 当这个进程得到CPU使用权时,它的整个地址空间被内核映射到Slot 0,也就是当前进程使用的地址空间,然后开始运行。,北京理工大学珠海学院 计算机教研室,20,2020/10/10,Slot 0,每个进程在执行前都要映射到Slot 0。 由于进程使用的所有DLL可能来自不同的Slot,为避免所使用的DLL在映射到Slot 0中出现地址空间冲突的现象,内核的加载器在加
12、载DLL时会查找所有槽中加载的DLL的地址,保证在映射到Slot 0时不会发生地址冲突现象。,北京理工大学珠海学院 计算机教研室,21,2020/10/10,Slot 2 Slot 8,Slot2:通常被Filesys.exe占用 Slot3:通常被shell.exe占用 Slot4:通常被device.exe占用 Slot5:通常被gwes.exe占用 Slot6:通常被ceemulsrv.exe占用 Slot7:通常被explorer.exe占用 Slot8:通常被services.exe占用,北京理工大学珠海学院 计算机教研室,22,2020/10/10,Slot中的内存分配,进程最低部
13、的64KB作为保留区域。 代码段从0 x0001 0000开始加载,内核为代码段分配足够的虚拟地址空间。 为只读数据和可读/可写数据分配空间。 为资源数据分配空间。 为默认堆和栈分配空间。,北京理工大学珠海学院 计算机教研室,23,2020/10/10,Slot中的DLL加载,非XIP DLL从进程最高端地址向下开始加载。 非XIP DLL的加载按如下规则:内核先检查要加载的DLL是否已经被其它进程加载,如果加载过,就做一个地址的重定位。避免系统内多次加载相同DLL。如果没有加载过,就按照从槽的高地址到槽的低地址的顺序查找空闲的地址空间。然后分配足够的地址空间用于加载DLL。,北京理工大学珠海
14、学院 计算机教研室,24,2020/10/10,进程地址空间结构,Windows CE5.0同以前版本的Windows CE操作系统在进程地址空间上有所不同。 以前的Windows CE把XIP DLL也加载到进程的32MB地址空间中。 Windows CE5.0把XIP DLL单独加载到Slot 1中,这样对于每个进程来说,它总的地址空间就大了一倍,达到64MB。,北京理工大学珠海学院 计算机教研室,25,2020/10/10,图 2.15 单个进程的虚拟地址空间,捕获野指针,进程申请虚拟内存,从低向高增长,DLL代码和数据的增长是从高向低,若这两个高低增长相撞,表示进程已耗尽它的虚拟地址空
15、间,北京理工大学珠海学院 计算机教研室,26,2020/10/10,不同CPU的内存结构,不同的CPU内存管理方法也不同。 对于MIPS和SHX系列CPU来说,物理地址映射是由CPU完成的,Windows CE内核可以直接访问512MB的物理内存。 对于x86系列和ARM系列的CPU来说,在内核启动过程中它会将现有物理内存地址全部映射到0 x8000 0000以上的虚拟地址空间中供内核以后使用。,北京理工大学珠海学院 计算机教研室,27,2020/10/10,2.3.4 逻辑内存-堆,堆是一段连续的虚拟地址空间。每一个进程都管理着一个堆。 应用程序在堆中可以动态地分配、释放所需大小的内存块。
16、在堆内分配内存块可以是任意大小的,而直接分配内存就必须以内存页为单位。,北京理工大学珠海学院 计算机教研室,28,2020/10/10,内存的页,内存是以页为单位分配的。 内存页的大小与具体的CPU有关。 页的大小一般是1KB,4KB,64KB等。,北京理工大学珠海学院 计算机教研室,29,2020/10/10,本地堆,默认情况下,Windows CE为本地堆保留192KB的虚拟内存空间,如果不够的话,可用函数VirtualAlloc()申请更多的内存。 192KB的虚拟内存并不立刻提交分配物理内存。 当堆中的块被释放时,系统将查看是否整个页都已经被释放,如果是那个页将被回收。,北京理工大学珠
17、海学院 计算机教研室,30,2020/10/10,在本地堆中分配内存,堆内分配内存可以任意大小,单位为字节,所分配的内存称为块。 使用完后注意要回收分配的内存。 在堆中申请内存可使用malloc/free、new/delete、LocalAlloc/LocallFree等函数。 Windows CE5.0只支持堆中固定块的分配,这样随着时间的推移,多次创建释放内存块,堆内就会产生大量内存的碎片。,北京理工大学珠海学院 计算机教研室,31,2020/10/10,堆的操作函数,LocalAlloc在堆中申请内存 LocalFree释放使用过的内存 HeapCreate创建堆 HeapFree释放堆
18、,北京理工大学珠海学院 计算机教研室,32,2020/10/10,堆的碎片,在Windows CE5.0创建的堆中,所申请的内存块不能够移动,多次创建内存块、释放内存块会产生内存碎块。 当需要分配一个大一点的、连续的内存块时,本来空闲的内存块加起来足够大,但是这些内存块是分隔的,系统无法分配这些内存碎片。,北京理工大学珠海学院 计算机教研室,33,2020/10/10,碎片的解决,程序员如果要频繁的在堆中创建、释放内存块的话,最好自己创建一个单独的堆,而不用默认的堆。 在使用结束后要及时释放掉该内存堆。,北京理工大学珠海学院 计算机教研室,34,2020/10/10,2.3.4 逻辑内存-栈,
19、栈是进程中的一个重要的数据结构。函数使用栈传递参数,函数中的局部变量也存放在栈中。 每个线程都有一个栈,在线程创建时由系统为其分配。 线程栈的大小默认为64KB,可以通过使用编译器的/STACKSIZE参数,调整栈的大小。,北京理工大学珠海学院 计算机教研室,35,2020/10/10,栈的使用,栈不能由用户程序自己创建。 栈的溢出会导致应用程序的退出,程序设计时一定要注意。 不要在较低内存配置的情况下使用大量的栈。,北京理工大学珠海学院 计算机教研室,36,2020/10/10,静态数据,Windows CE为应用程序的静态数据分配了read/write和read only两个内存区域。 这两个内存区域以页面为单位来分配内存。 应用程序设计时要尽量保证静态数据区域没有空间的浪费。,北京理工大学珠海学院 计算机教研室,37,2020/10
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026贵州银行第十四届人博会春季招聘92人考试模拟试题及答案解析
- 2026山西运城临猗县德亨仁厚老年社会福利院招聘5人考试备考题库及答案解析
- 2026重庆市璧山区七塘镇人民政府招聘非编聘用人员1人考试模拟试题及答案解析
- 2026杭州市临平区事业单位招聘32人考试备考试题及答案解析
- 2026年福建省漳州市公费师范毕业生漳州市生源专项公开招聘笔试模拟试题及答案解析
- 2026中冶地质青海科技有限公司招聘1人笔试备考题库及答案解析
- 2026重庆市九龙坡区人民法院招聘派遣制驾驶员招聘1人考试参考题库及答案解析
- 材料力学应用领域分析
- 社区疏散逃生预案
- 糖尿病日常健康知识
- 三年(2023-2025)黑龙江中考语文真题分类汇编:专题11记叙文阅读(原卷版)
- 洗车工管理及考核制度
- 2025年发展对象培训考试题和答案
- 电力电缆检修规程
- 生产公司产品报价制度
- 污水处理厂防汛应急培训
- 2025年合成氟金云母单晶片项目建议书
- 2025年烟草专卖零售经营规范
- 外卖员工培训制度
- 2026北京第二外国语学院招募孔子学院中方院长4人备考题库及一套参考答案详解
- 管道防腐详细施工方案
评论
0/150
提交评论