首页 第八讲 内存管理

第八讲 内存管理

举报
开通vip

第八讲 内存管理第二章WindowsCE体系结构与功能北京理工大学珠海学院计算机教研室教学目的 熟悉内存管理与分配的基本方法,掌握物理内存与虚拟内存之间的映射关系;熟悉堆栈的基本概念,掌握各种内存分配方法的使用。北京理工大学珠海学院计算机教研室项目5:内存分配-PDA的内存管理本节课程主要知识点 WindowsCE5.0的内存管理 WindowsCE5.0的内存结构(重点、难点) 物理内存与虚拟内存的映射(难点) 堆(难点) 栈 各种内存分配方法的对比(重点)北京理工大学珠海学院计算机教研室 教学重点 WindowsCE5.0的内...

第八讲 内存管理
第二章WindowsCE体系结构与功能北京理工大学珠海学院计算机教研室教学目的 熟悉内存管理与分配的基本方法,掌握物理内存与虚拟内存之间的映射关系;熟悉堆栈的基本概念,掌握各种内存分配方法的使用。北京理工大学珠海学院计算机教研室项目5:内存分配-PDA的内存管理本节课程主要知识点 WindowsCE5.0的内存管理 WindowsCE5.0的内存结构(重点、难点) 物理内存与虚拟内存的映射(难点) 堆(难点) 栈 各种内存分配方法的对比(重点)北京理工大学珠海学院计算机教研室 教学重点 WindowsCE5.0的内存管理的基本概念 堆和栈的基本概念 教学难点 理解虚拟内存的结构 虚拟内存的使用 堆的使用北京理工大学珠海学院计算机教研室内存管理 内存管理是操作系统中最重要的功能之一,尤其是在嵌入式系统中更为重要。 内存管理的目的是为了充分利用内存,尽可能方便用户使用内存。 解决程序空间比实际内存空间大的问题。北京理工大学珠海学院计算机教研室2.3内存管理 2.3.1内存管理概览 WindowsCE采用层次化的机构进行内存管理图2.11WindowsCE内存管理概览北京理工大学珠海学院计算机教研室 2.3.2物理内存 WindowsCE中,RAM、ROM和FlashMemory都被看成物理内存图2.12物理内存为操作系统和应用程序提供运行缓冲空间用来存储程序,包括操作系统映像本身和组成操作系统的一些其他文件北京理工大学珠海学院计算机教研室 2.3.3虚拟内存 WindowsCE是32位的操作系统,虚拟寻址能力为4GB WindowsCE中所有进程共享一个4GB的虚拟地址空间 WindowsCE的内存基于页式管理。其支持两种页大小:1KB和4KB 虚拟内存的申请分为保留(reserve)和提交(commit)两个过程;虚拟地址空间以64KB为边界进行保留,任何一次虚拟内存申请都会返回一个64KB的整数倍的地址北京理工大学珠海学院计算机教研室 MMU-(MemoryManagementUnit)内存管理单元负责虚拟内存的管理,把虚拟地址映射到物理地址,并提供一定的内存保护 一个有效的虚拟地址必须被映射到一个物理地址 允许程序代码空间在需要的时候即时的申请北京理工大学珠海学院计算机教研室 4GB的虚拟地址空间分为两个2GB区域 用户空间:低地址2GB用户空间,供应用程序使用。即应用程序申请的内存都会从此地址空间中返回 总共64个slot,每个slot为32MB 大多数是动态虚拟映射 内核空间:高地址2GB内核空间,供WindowsCE操作系统本身使用 只被特权访问的内核模式代码使用(Kmode) 大多数是静态虚拟地址映射(不会有页内错误)北京理工大学珠海学院计算机教研室图2.13WindowsCE的4GB地址空间4GB分成若干个slot,每个slot占32MB,编号从0开始存放进程的虚拟地址空间,如slot2被Filesys.exe占用映射当前在处理器上执行进程由XIP的DLL代码使用由所有进程共享。应用程序使用的虚拟内存可在这个范围申请。包括对象存储和内存映射文件用来静态映射所有的物理地址,即WindowsCE会把所有的物理内存1:1的映射到此段虚拟地址上此段空间会重复映射所有的物理内存。与0x80000000一段最大的不同是此段内存是不带缓冲的。Slot97,WindowsCE的核心进程NK.exe放置一些供虚拟内存用的页 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 和中断向量表等内核使用的数据结构北京理工大学珠海学院计算机教研室内核与用户空间的地址分配北京理工大学珠海学院计算机教研室WindowsXP内存结构ActiveProcessActiveProcessActiveProcessActiveProcessActiveProcessSystemReserved(kernelmodespace)0000000080000000FFFFFFFFApplicationSpace北京理工大学珠海学院计算机教研室WindowsCE内存结构SystemReserved(kernelmodespace)00000000040000004200000080000000FFFFFFFFActiveProcessActiveProcessActiveProcessActiveProcessActiveProcessActiveProcessApplicationSpaceReservedLargeMemoryArea(memorymappedfiles)ApplicationSpace北京理工大学珠海学院计算机教研室00000000图2.14内核映射的物理内存北京理工大学珠海学院计算机教研室 在X86和ARM处理器中,WindowsCE的静态内存映射是由OAL层中的OEMAddressTable数组决定 物理内存映射到内核空间之后,WindowsCE内核中访问物理内存只需把该物理内存地址加上0x80000000或者0xA0000000即可 进程中虚拟地址空间的使用情况(以Slot0为例)北京理工大学珠海学院计算机教研室 为什么把Slot0映射为当前进程的地址空间 可避免重定位,让所有的EXE的虚拟地址都从0地址算起 保证对任何一个进程,共享的DLL代码都可以通过同样的偏移访问到位于不同进程中的不共享的DLL数据 一个进程的32MB虚拟地址空间中,最低的64KB地址用来捕获野指针(通常是空指针NULL的)——即若某个指针访问了低于64KB的内存区域,则捕获这个错误 64KB之上是进程的代码和数据以及一些堆和栈北京理工大学珠海学院计算机教研室虚拟内存中的Slots 2Gigabytes Dividedinto6432MByteSlots 31slotsforLMA 31slotsforapplications 2slotsforcurrentapplication00000000040000004200000080000000LargeMemoryArea(memorymappedfiles)ApplicationSlots(Slots2-32)CurrentApplication(Slots0-1)北京理工大学珠海学院计算机教研室Slot 当一个应用程序启动时,内核为这个程序选择一个空闲的槽(Slot),并且加载所有的代码、资源,并分配堆栈,加载DLL等。 当这个进程得到CPU使用权时,它的整个地址空间被内核映射到Slot0,也就是当前进程使用的地址空间,然后开始运行。北京理工大学珠海学院计算机教研室Slot0 每个进程在执行前都要映射到Slot0。 由于进程使用的所有DLL可能来自不同的Slot,为避免所使用的DLL在映射到Slot0中出现地址空间冲突的现象,内核的加载器在加载DLL时会查找所有槽中加载的DLL的地址,保证在映射到Slot0时不会发生地址冲突现象。北京理工大学珠海学院计算机教研室Slot2–Slot8 Slot2:通常被Filesys.exe占用 Slot3:通常被shell.exe占用 Slot4:通常被device.exe占用 Slot5:通常被gwes.exe占用 Slot6:通常被ceemulsrv.exe占用 Slot7:通常被explorer.exe占用 Slot8:通常被services.exe占用北京理工大学珠海学院计算机教研室Slot中的内存分配 进程最低部的64KB作为保留区域。 代码段从0x00010000开始加载,内核为代码段分配足够的虚拟地址空间。 为只读数据和可读/可写数据分配空间。 为资源数据分配空间。 为默认堆和栈分配空间。北京理工大学珠海学院计算机教研室Slot中的DLL加载 非XIPDLL从进程最高端地址向下开始加载。 非XIPDLL的加载按如下规则:内核先检查要加载的DLL是否已经被其它进程加载,如果加载过,就做一个地址的重定位。避免系统内多次加载相同DLL。如果没有加载过,就按照从槽的高地址到槽的低地址的顺序查找空闲的地址空间。然后分配足够的地址空间用于加载DLL。北京理工大学珠海学院计算机教研室进程地址空间结构 WindowsCE5.0同以前版本的WindowsCE操作系统在进程地址空间上有所不同。 以前的WindowsCE把XIPDLL也加载到进程的32MB地址空间中。 WindowsCE5.0把XIPDLL单独加载到Slot1中,这样对于每个进程来说,它总的地址空间就大了一倍,达到64MB。北京理工大学珠海学院计算机教研室图2.15单个进程的虚拟地址空间捕获野指针进程申请虚拟内存,从低向高增长DLL代码和数据的增长是从高向低若这两个高低增长相撞,表示进程已耗尽它的虚拟地址空间北京理工大学珠海学院计算机教研室不同CPU的内存结构 不同的CPU内存管理方法也不同。 对于MIPS和SHX系列CPU来说,物理地址映射是由CPU完成的,WindowsCE内核可以直接访问512MB的物理内存。 对于x86系列和ARM系列的CPU来说,在内核启动过程中它会将现有物理内存地址全部映射到0x80000000以上的虚拟地址空间中供内核以后使用。北京理工大学珠海学院计算机教研室2.3.4逻辑内存-堆 堆是一段连续的虚拟地址空间。每一个进程都管理着一个堆。 应用程序在堆中可以动态地分配、释放所需大小的内存块。 在堆内分配内存块可以是任意大小的,而直接分配内存就必须以内存页为单位。北京理工大学珠海学院计算机教研室内存的页 内存是以页为单位分配的。 内存页的大小与具体的CPU有关。 页的大小一般是1KB,4KB,64KB等。北京理工大学珠海学院计算机教研室本地堆 默认情况下,WindowsCE为本地堆保留192KB的虚拟内存空间,如果不够的话,可用函数VirtualAlloc()申请更多的内存。 192KB的虚拟内存并不立刻提交分配物理内存。 当堆中的块被释放时,系统将查看是否整个页都已经被释放,如果是那个页将被回收。北京理工大学珠海学院计算机教研室在本地堆中分配内存 堆内分配内存可以任意大小,单位为字节,所分配的内存称为块。 使用完后注意要回收分配的内存。 在堆中申请内存可使用malloc/free、new/delete、LocalAlloc/LocallFree等函数。 WindowsCE5.0只支持堆中固定块的分配,这样随着时间的推移,多次创建释放内存块,堆内就会产生大量内存的碎片。北京理工大学珠海学院计算机教研室堆的操作函数 LocalAlloc 在堆中申请内存 LocalFree 释放使用过的内存 HeapCreate 创建堆 HeapFree 释放堆北京理工大学珠海学院计算机教研室堆的碎片 在WindowsCE5.0创建的堆中,所申请的内存块不能够移动,多次创建内存块、释放内存块会产生内存碎块。 当需要分配一个大一点的、连续的内存块时,本来空闲的内存块加起来足够大,但是这些内存块是分隔的,系统无法分配这些内存碎片。北京理工大学珠海学院计算机教研室碎片的解决 程序员如果要频繁的在堆中创建、释放内存块的话,最好自己创建一个单独的堆,而不用默认的堆。 在使用结束后要及时释放掉该内存堆。北京理工大学珠海学院计算机教研室2.3.4逻辑内存-栈 栈是进程中的一个重要的数据结构。函数使用栈传递参数,函数中的局部变量也存放在栈中。 每个线程都有一个栈,在线程创建时由系统为其分配。 线程栈的大小默认为64KB,可以通过使用编译器的/STACKSIZE参数,调整栈的大小。北京理工大学珠海学院计算机教研室栈的使用 栈不能由用户程序自己创建。 栈的溢出会导致应用程序的退出,程序设计时一定要注意。 不要在较低内存配置的情况下使用大量的栈。北京理工大学珠海学院计算机教研室静态数据 WindowsCE为应用程序的静态数据分配了read/write和readonly两个内存区域。 这两个内存区域以页面为单位来分配内存。 应用程序设计时要尽量保证静态数据区域没有空间的浪费。北京理工大学珠海学院计算机教研室2.3.5.1直接分配内存 优点 大的内存块最好是直接分配虚拟内存。 是最灵活的内存分配类型。 缺点 担心页面的粒度并需跟踪保留页面和提交页面的情况。2.3.5各种内存分配方法的对比北京理工大学珠海学院计算机教研室2.3.5.2本地堆 优点 使用便利,不需要用户自己创建。 可根据需要来增加。 缺点 多次访问后会产生碎片。 系统没有回收碎片的机制。北京理工大学珠海学院计算机教研室2.3.5.3单独的堆 优点 完全根据需要来创建。 可以随时释放其内存,从而将内存碎片问题消灭在萌牙状态。 缺点 须手工创建和释放相应的内存北京理工大学珠海学院计算机教研室2.3.5.4栈 优点 易于使用 缺点 低内存配置时需要考虑栈的大小北京理工大学珠海学院计算机教研室2.3.5.5静态数据 优点 静态数据的页面总是要分配的 程序设计时,常量数据常置于ReadOnly区域。北京理工大学珠海学院计算机教研室 2.3.6C/C++语言进行时库的内存管理 C/C++语言的运行时库函数中,提供了一系列内存管理函数 malloc/free New/delete 2.3.7使用虚拟内存 除了系统启动时MMU被启用之前的一小段代码之外,WindowsCE内核和应用程序都工作在虚拟内存模式下 相关函数(P64)北京理工大学珠海学院计算机教研室
本文档为【第八讲 内存管理】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
xxj7584
暂无简介~
格式:ppt
大小:303KB
软件:PowerPoint
页数:0
分类:建造师考试
上传时间:2020-03-20
浏览量:0