




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Good is good, but better carries it.精益求精,善益求善。WindowsCE的虚拟内存模型WindowsCE虚拟内存模型实验实验1:使用PlatformBuilder观察WindowsCE的虚拟内存模型目标:在这个实验中,您将学会使用PlatformBuilder的CEShell来观察WindowsCE的虚拟内存使用情况,并且借此工具来分析WindowsCE的虚拟地址空间。使用PlatformBuilder的CEShell命令观察WindowsCE的内存布局观察WindowsCE的内存申请和分配预备知识:与WindowsXP一样,WindowsCE也是32位的
2、操作系统,因此WindowsCE的虚拟寻址能力可以达到4GB,但是与WindowsXP的每个进程独享4GB虚拟地址空间不同,WindowsCE中所有的进程共享一个4GB的虚拟地址空间。WindowsCE的内存是基于页式管理的,WindowsCE操作系统支持两种页大小:1KB和4KB。在WindowsCE中,与桌面Windows一样,虚拟内存的申请分为保留(reserve)和提交(commit)两个过程,虚拟地址空间的保留是以64KB为边界的,也就是说,任何一次虚拟内存申请都会返回一个64KB的整数倍的地址。但是把虚拟内存提交到物理内存是以页为粒度的,管理虚拟内存的硬件是内存管理单元(MMU,M
3、emoryManagementUnit)。MMU负责把虚拟地址应为到物理地址,并且提供一定的内存保护。尽管WindowsCE支持台式机的硬盘,但是基于WindowsCE的设备中通常都没有硬盘,因此WindowsCE无法把一些暂时不用的页换出到硬盘上来空出一些RAM。然而,虚拟内存是WindowsCE中的重要模块,它把进程申请的内存映射到物理内存,并且提供系统4GB的寻址能力。在程序启动时,虚拟内存可以按照需要来即时的申请程序代码空间所需要物理内存,而不是在程序启动时就把它完全加载到物理内存中。此外,应用程序也不需要关心到底有多少物理内存剩余,程序需要的内存会被申请并且映射到虚拟地址空间中。如果
4、没有剩余的物理内存了,内存申请就会失败。图:WindowsCE的4GB地址空间这4GB的虚拟地址空间又被分为两个2GB区域,低地址2GB是用户空间,供应用程序使用,应用程序申请的内存都会从低2GB地址空间中返回。高地址2GB是内核空间,供WindowsCE操作系统本身使用。WindowsCE把4GB虚拟地址空间分成若干个Slot,每个Slot占32MB,Slot的编号从0开始。Slot0到Slot32对应的虚拟地址是0 x00000000到0 x41FFFFFF,它们用于存放进程的虚拟地址空间。其中Slot0用于映射当前在处理器上执行的进程(确切的说当前在处理器上执行的线程属于哪个进程)。Sl
5、ot1由XIP的DLL代码使用。Slot2到Slot32对应WindowsCE中每个进程的32MB虚拟地址空间,其中Slot2通常被Filesys.exe占用。也就是说,理论上在WindowsCE中最多可以有30个用户进程,对应Slot3到Slot32。但实际上通常的WindowsCE除了NK.exe和Filesys.exe还会产生很多进程,因此用户实际可以用的进程数大大少于30个。Slot33到Slot63对应的虚拟地址空间是0 x42000000到0 x7FFFFFFF。这块虚拟内存是由所有进程共享的,由于每个进程只有32MB的虚拟地址空间,如果应用程序希望使用更多的虚拟内存,就可以在这个
6、范围内申请。这个范围包括对象存储和内存映射文件。此范围内的最后一个Slot从0 x7E000000到0 x7FFFFFFFF,也就是Slot63,用来存放纯资源DLL,如果某个DLL里面只有资源信息(例如图标,位图,菜单,对话框,字符串表等等),这个DLL就会被加载到这个空间内。从0 x80000000开始是WindowsCE内核使用的虚拟地址空间。虚拟地址0 x80000000到0 x9FFFFFFF一段用来静态映射所有的物理地址。也就是说WindowsCE会把所有的物理内存一比一的映射到这段虚拟地址上。这段地址一共有512MB,这也就是WindowsCE所支持的物理地址的最大值为512MB
7、的由来。虚拟地址0 xA0000000到0 xBFFFFFFF会重复映射所有的物理内存,如图所示。这一段对物理内存的映射与0 x80000000一段最大的不同是从0 x80000000开始的一段物理内存是有缓冲的,而从0 xA0000000开始的一段是没有缓存的。通常,缓冲可以提高系统的I/O效率,但是对于一些OAL或者Bootloader中的设备驱动程序来说,使用缓冲有可能会造成灾难性后果,因为缓冲有可能会更改我们对设备的写操作顺序。因此在驱动程序中我们如果需要直接访问设备I/O或寄存器,我们通常使用0 xA0000000一段物理地址。从0 xC2000000到0 xC3FFFFFF是Slo
8、t97,这个Slot是WindowsCE的核心进程NK.exe专用的。可见实现WindowsCE操作系统的一些主要功能的NK.exe本身的地址空间还是在核心态中的。从0 xE0000000到0 xFFFFFFFF一段最高的地址是内核使用的地址空间。对于不同的处理器体系结构这里保存着不同的东西。通常会放置一些供虚拟内存用的页表,中断向量表等等内核使用的数据结构。下面我们就Slot0来看看一个进程中虚拟地址空间的使用情况。在一个进程的32MB虚拟地址空间中,最低的64KB地址,也就是0 x00000000到0 x00010000是用来捕获野指针,通常是空指针NULL的。如果某个指针访问了低于64K
9、B的内存区域,WindowsCE就可以捕捉这个错误。但是这样并不能捕获代码中所有的野指针。64KB之上是进程的代码和数据,以及一些堆和栈。进程申请虚拟内存是从低地址往高地址增长的。从32MB虚拟地址空间最高地址开始,存放的是进程加载的ROMDLL的读写数据以及RAMDLL的数据(ROMDLL的代码对所有进程来说可以共享一个拷贝,放在Slot1中,但对于DLL的数据,就不得不为每个进程设立单独的拷贝),DLL代码和数据的增长是从高地址往低地址增长的。如果这两个高低增长相撞,就预示着进程已经耗尽了它的虚拟地址空间。尽管这个时候有可能我们还有多余的物理内存,但是我们已经没法使用它了。因为进程的虚拟地
10、址空间已经用完了!如图所示。实验预计时间:3045分钟实验步骤:使用NewPlatformWizard创建并运行平台打开PlatformBuilder打开一个已有的平台,如果没有现存的平台,则通过NewPlatformWizard创建新的平台。使用PlatformBuilder的CEShell观察CE的虚拟内存结构选择PlatformBuilder菜单项:Target-CETargetControl来打开CEShell命令行窗口。PB会显示如下窗口:输入?命令来获得帮助信息,输出如下:WelcometotheWindowsCEShell.Type?forhelp.WindowsCE?Enter
11、anyofthefollowingcommandsattheprompt:break:Breaksintothedebuggers:Startsnewprocessgiproc,thrd,mod,all*:GetInformationproc-Listsallprocessesinthesystemthrd-Listsallprocesseswiththeirthreadsdelta-ListsonlythreadsthathavechangesinCPUtimesmod-Listsallmodulesloadedall:Listsalloftheabovemikernel,full:Memo
12、ryinformationkernel-Listskernelmemorydetailfull-Listsfullmemorymaps此处略在控制台下输入mifull来获得所有内存的dump信息,显示如下(部分有省略):WindowsCEKernelMemoryUsageTool0.2Pagesize=4096,4886totalpages,4410freepages.4383MinFreepages(2060288MaxUsedbytes)89pagesusedbykernel,0pagesheldbykernel,476pagesconsumed.InxSizeUsedMaxExtraEn
13、triesName0:424212002204884850(52)Thrd1:216105841123264849(52)Mod2:482193622224288457(463)API/CStk/ClnEvt/StbEvt/Prxy/HData/KMod3:1681296961313761680772(782)Crit/Evt/Sem/Mut/ThrdDbg4:643584377619256(59)FullRef/FSMap/ThrdTm5:161329613488192831(843)MemBlock6:5240890889080(17)Name7:2048102400102400050(5
14、0)HlprStkTotalUsed=302696TotalExtra=12756Waste=364MemoryusageforProcess819b5b60:NK.EXEpid0SECURESECTION:Slotbasec2000000Sectionptr819b2760c2000000(1):rc2010000(0):Sc2020000(0):Sc2030000(0):Sc3f00000(0):c3ff0000(0):WPagesummary:code=0(0)datar/o=0r/w=2stack=3reserved=315ROMDLLCODESECTION:Slotbase02000
15、000Sectionptr83ffb00002010000(0):-03160000(0):-CC03190000(0):-CCCC031a0000(0):-CCCCCCCCCCCCCCC031b0000(0):CC031c0000(0):-CCCCCCCCCCC031d0000(0):-CCCCCCCCCCCCCC-031f0000(0):-CCCCCCCCCCCCCCC03200000(0):CCCCCCCCCCC03210000(0):-CCCCCCCCCCCCCCC03220000(0):C03230000(0):-CC03580000(0):-CC03590000(0):-CCCCC
16、CCCCCCCCCC035a0000(0):CCCCCCCCCCCCCCCC035b0000(0):CCCCCCCCCCCCCCCC035c0000(0):-RRRRRRRRRRR035d0000(0):-CCCCCCCCCCCCCCC035e0000(0):CC-R038d0000(0):-CCCCCCCCCCCCCCC038e0000(0):CCCCCCCCCCCCCCCC038f0000(0):CCCCCCCCCCCCR03900000(0):RRR03910000(0):-CCCCCCCCCCCCCCC03920000(0):CCCCCCCCCCCCCCCC03930000(0):CC
17、CCCCCCCCCCCCCC03940000(0):CCCCC03960000(0):-CCCCCCCCCCCCC-03970000(0):-CCCCCCCCCCCCCCC03980000(0):CCCCCCCCCCCCCCCC03990000(0):CCCCCCCCCCCCCCCC039a0000(0):CCCCCCCCCCCCCCCC039b0000(0):CCCCCC-RR039c0000(0):-CCCCCCCCCCCCCCC039d0000(0):C039e0000(0):-CCCCCCCCCCCCCCC039f0000(0):CCCCCCCCCCCCCCCC03a00000(0):
18、CCCCCCCCCCCCCCCC03a10000(0):CCCCCCCCCCCCCCCC03a20000(0):CCCCCCCCCCCCCC-03a40000(0):-CCCCCCCCCCCCCCC03a50000(0):CCCCCCCCCCCCCCCC03a60000(0):CCCCCCCCCCCCCCCC03a70000(0):CCCCCCCCCCC-R03a80000(0):-CCCCCCCCCCCCCCC03a90000(0):CCCCCCCCCCCCCCCC03aa0000(0):CCCCCCCCCCCCCCCC03ab0000(0):CCCCCCCCCCCCCCCC03ac0000
19、(0):CCCCCCCCCCCCCCCC03ad0000(0):CCCCCCCCCCCCCCCC03ae0000(0):CCCCCCCCCCCCCCCC03af0000(0):CCCCCCCCCCCCCCCC03b00000(0):CCCCCC03b40000(0):-CCCCCCCCC03b50000(0):-CCC03b60000(0):-CC03b70000(0):-CCCCCCCCCCCCCCC03b80000(0):CCCCCCCCCCCCCCCC03b90000(0):CCCCCCCCCCCCCCCC03ba0000(0):CCCCCCCCCCCCCCCC03bb0000(0):C
20、CCCCCCCCC03bc0000(0):-CCCCCCCCCCCCCCC03bd0000(0):CCCCCCCCCCCCCCCC03be0000(0):CCCCCC03bf0000(0):-CCCCCCCCCCCC03c00000(0):-CCCCCCCCCCCCCCC03c10000(0):C03c20000(0):-CCCCCCCCCCCCCCC03c30000(0):CCCCCCCCCCCCCCCC03c40000(0):CCCCCCCC03c50000(0):-CCCC03c60000(0):-CCCCCCCCCCC03c90000(0):-CC03ca0000(0):-CCCCCC
21、CCCCC03cb0000(0):-C03cc0000(0):-CCCCCCCCCCCCCCC03cd0000(0):CC03ce0000(0):-CCCCC03cf0000(0):-CCCCCCCCCCCCCCC03d00000(0):CCCCCCCCCCCCCCCC03d10000(0):CCCCCCCCCCCCCCCC03d20000(0):CCCCCCCCCCCCCCC-03d30000(0):R03d40000(0):-c-cc-c03d50000(0):-cc03d60000(0):cc03d90000(0):-CC03da0000(0):-CCCCCCCCCCCC03db0000
22、(0):-CCCCCCCCCCCCCCC03dc0000(0):CCCCCCCCC-RR03dd0000(0):-CCCCCCCCCCCCCCC03de0000(0):CCCCC03e10000(0):-CCCCRRRRRR03e20000(0):RRRRR03e30000(0):-CCCCC-R03e60000(0):-CCCCCCCCCCCCCCC03e70000(0):CCCCCCCCCCCCCCCC03e80000(0):CCCCCCCCCCCCCCCC03e90000(0):CCCCCCCCCCCCCCCC03ea0000(0):CCCCCCCCCCCCCCCC03eb0000(0)
23、:CCCCCCCCCCCCCCCC03ec0000(0):CCCCCCCCCCCCCCCC03ed0000(0):CCCCCCCCCCCCCCCC03ee0000(0):CCCCCCCCCCCCCCC-03ef0000(0):R03f10000(0):-C03f20000(0):-CCCCCC03f30000(0):-CCCCCCCCCCCCCCC03f40000(0):CCCCCC03f50000(0):-CC03f60000(0):-CCCCCCCCCCCCCCC03f70000(0):CCCCCCCCCCCCCCCC03f80000(0):CCCCCCCCCCCCCCCC03f90000
24、(0):CCCCCCCCCCCCCCCC03fa0000(0):CCCCCCCCCCCCCCCC03fb0000(0):CCCCCCCCCCCCCCCC03fc0000(0):CCCCCCCCCCCCCCCC03fd0000(0):CCCCCCCCCCCCCCCC03fe0000(0):CCCCCCCCCCCCCC-R03ff0000(0):RRRRRRPagesummary:code=1311(8)datar/o=42r/w=0stack=0reserved=2392MemoryusageforProcess819b5c38:filesys.exepid1Slotbase04000000Se
25、ctionptr83fec00004000000(1):r04010000(0):-CCCCCCCCCCCCCCC04020000(0):CCCCCCCCCCCCCCCC04030000(0):CCCCCCCCCCCCCCCC04040000(0):CCCCCCCCCCCCCCCC04050000(0):CCCCCCCCCCCCCCCC04060000(0):CCCCCCCWWWWWWWWR04070000(0):S04080000(0):WWWWWWWWWW040a0000(0):040b0000(0):S05f00000(0):05fe0000(0):-W05ff0000(0):WcPag
26、esummary:code=87(1)datar/o=1r/w=21stack=2reserved=336MemoryusageforProcess819b5d10:shell.exepid2Slotbase06000000Sectionptr83fc500006000000(1):r06010000(0):-CCCCCCCCCCCCCCC06020000(0):WWW06030000(0):SS06040000(0):W06060000(0):06070000(0):WW07f00000(0):07ff0000(0):WcPagesummary:code=16(1)datar/o=0r/w=
27、8stack=2reserved=330MemoryusageforProcess819b5de8:device.exepid3Slotbase08000000Sectionptr83fca00008000000(1):r08010000(0):-CCCCCCCCCCCc08020000(0):S-S08030000(0):WWWWWWWWWWWWWWWW08040000(0):WWWWWWWWWWWWWWWW08050000(0):WWWWWW08060000(0):S08070000(0):S08080000(0):S08090000(0):S080a0000(0):SS080b0000(
28、0):SS-S080c0000(0):PP080d0000(0):S080e0000(0):S080f0000(0):PPP08100000(0):S08110000(0):S08120000(0):S08130000(0):SSS08140000(0):S08150000(1):WW08160000(1):WWWWWWWWWWWWWWWW08170000(1):WWWWWWWWWW08180000(1):W08190000(1):W081a0000(1):WW081b0000(0):S081c0000(0):S081d0000(0):SSS081e0000(0):SSS081f0000(0)
29、:S08200000(0):S08210000(0):S08220000(0):WWWWWWWWWWWWWWWW08230000(0):WWWWWWWWWWWWWWWW08240000(0):08250000(0):S08260000(0):SS08270000(0):W08290000(0):082a0000(0):S082b0000(0):S082c0000(0):S082d0000(0):S082f0000(0):S09f00000(0):W09f20000(0):W-W-W-09f30000(0):WWWWW-W09f70000(0):-W09f90000(0):-WWW-W-W-WW
30、09fa0000(0):-W-WWWWWWWW09fb0000(0):W-W-W-W-W-W-W-WW09fc0000(0):-W-WW-W-W-09fd0000(0):W-W-W-W-W-W-W-W-09fe0000(0):WWWWWW-W-09ff0000(0):-Wc-W-cPagesummary:code=14(3)datar/o=0r/w=162stack=39reserved=691MemoryusageforProcess819b5ec0:gwes.exepid4Slotbase0a000000Sectionptr83edf0000a000000(1):r0a010000(0):
31、-CCCCCCCCCCCCCCC0a020000(0):CCCCCCCCCCCCCCCC0a030000(0):CCCCCCCCCCCCCCCC0a040000(0):CCCCCCCCCCCCCCCC0a050000(0):CCCCCCCCCCCCCCCC0a060000(0):CCCCCCCCCCCCCCCC0a070000(0):CCCCCCCCCCCCCCCC0a080000(0):CCCCCCCCCCCCCCCC0a090000(0):CCCCCCCCCCCCCCCC0a0a0000(0):CCCCCCCCCCCCCCCC0a0b0000(0):CCCCCCCCCCCCCCCC0a0c
32、0000(0):CCCCCCCCCCCCCCCC0a0d0000(0):CCCCCCCCCCCCCCCC0a0e0000(0):CCCCCCCCCCCCCCCC0a0f0000(0):CCCCCCCCCCCCCCCC0a100000(0):CCCCCCCCCCCCCCCC0a110000(0):CccccccRRRRRRRR0a120000(0):S0a130000(0):WWWWWWWWWWWWWWWW0a140000(0):WWWWWWWWWWWWWWWW0a150000(0):WWWWWWWWW0a160000(0):S0a170000(0):S0a180000(0):SSS0a1900
33、00(0):S0a1a0000(0):S0a1b0000(0):S0a1c0000(0):S0a1e0000(0):S0a1f0000(0):S0bf00000(0):0bf20000(0):W0bf30000(0):-WWWW0bfd0000(0):W0bff0000(0):cPagesummary:code=263(7)datar/o=8r/w=48stack=12reserved=419MemoryusageforProcess819b5f98:ceemulsrv.exepid5Slotbase0c000000Sectionptr83ee00000c000000(1):r0c010000
34、(0):-CRW0c020000(0):0c030000(0):0c040000(0):0c050000(0):0c060000(0):0c070000(0):0c080000(0):0c090000(0):0c0a0000(0):0c0b0000(0):0c0c0000(0):0c0d0000(0):0c0e0000(0):0c0f0000(0):0c100000(0):0c110000(0):SSS0c120000(0):W0c140000(0):0df00000(0):0dff0000(0):cPagesummary:code=2(1)datar/o=1r/w=3stack=3reser
35、ved=570MemoryusageforProcess819b6070:explorer.exepid6Slotbase0e000000Sectionptr83e960000e000000(1):r0e010000(0):-CCCCCCCCCCCCCCC0e020000(0):CCCCCCCCCCCCCCCC0e030000(0):CCCCCCCCCCCCCW-R0e040000(0):RRRRRRRRRRRRRRRR0e050000(0):RRRRRRRRRRRRRRRR0e060000(0):R0e070000(0):S0e080000(0):WWWWWWWWWWWWWWWW0e0a00
36、00(0):0e0b0000(0):S0e0c0000(0):SSS0e0d0000(0):S0e0e0000(0):S0ff00000(0):0ff60000(0):W-0ff70000(0):W-W0ff80000(0):WW0ff90000(0):W-WW0fff0000(0):-WcPagesummary:code=45(1)datar/o=34r/w=27stack=7reserved=367Mappedfilesection0Slotbase42000000Sectionptr83fed00042000000(0):PWWWWWWWWWWWWWWW42010000(0):WWWWW
37、WWWWWWWWWWW42020000(0):WWWWWWWWWWWWWWWW43300000(0):WWWWWWWWWWWWWWWW43310000(0):WPagesummary:code=0(0)datar/o=0r/w=4880stack=0reserved=3311Mappedfilesection1Slotbase44000000Sectionptr83fdd00044000000(0):Pagesummary:code=0(0)datar/o=0r/w=0stack=0reserved=8192Mappedfilesection2Slotbase46000000Sectionpt
38、r83fcf00046000000(0):W46100000(0):RRRRRRRRRRRRRRRR46110000(0):RRRRRRRRRRRRRRRR46120000(0):RRRRRRRRRRRRRRRR46130000(0):RRRRRRRRRRRRRRRR46140000(0):RRRRRRRRRRRRRRRR46150000(0):RRRRRRRRRRRRRRRR46160000(0):RRRRRRRRRRRRRRRR46170000(0):RRRRRRRRRRRRRRRR46180000(0):RRRRRRRRRRRRRRRR46190000(0):RRRRRRRRRRRRRR
39、RR461a0000(0):RRRRRRRRRRR46200000(0):W46300000(0):PPPPPPPPPPPPPPPP46310000(0):PPPPPPPPPPPPPPPP46320000(0):PPPPPPPPPPPPPPPP466f0000(0):PPPPPPPPPPPPPPPP46700000(0):RRRRRRRRRRRRRRRR471f0000(0):RRRRRRRRRRRRRRRR47200000(0):RRRRRPagesummary:code=0(0)datar/o=2768r/w=2stack=0reserved=4398TotalR/Wdata+stack+
40、RAMcode=5243WindowsCE内存结构分析说明在输出的信息中,“-”表示此段虚拟内存空间已经被保留,但是还没有提交,任何对此部分虚拟内存的读写操作都会造成访问违例。“C”表示是代码,“S”表示是栈,“W”表示有读写权限的数据,“R”表示只读数据。由于在WindowsCE中虚拟内存的保留是以64KB为边界的。因此图中输出的信息后面四位都是0(0 xFFFF正好是64KB),图中的每一行就表示64K。但是WindowsCE中对虚拟内存的提交是以页为粒度的,而在x86系统下WindowsCE采用4K为一页,因此图中每个小字符代表一个页。首先打印的是内核使用内存的一些信息,包括线程,模块,
41、内核同步对象等等,这部分对我们的影响不大。然后打出的是NK.EXE的进程地址空间,从输出中我们可以看到,地址从0 xC2000000开始,符合WindowsCE内存体系结构的图示。然后打印的是ROMDLL的信息。地址从0 x02000000处开始,也就是Slot1。我们可以看到,Slot1的内存内容信息只有两种构成,代码和只读的数据。正如我们所知道的,对于所有的进程,ROMDLL中的代码和只读数据是可以被所有进程共享的,他们被放在Slot1内。然后打印的是系统中所有进程的地址空间信息。我们来结合shell.exe的进程空间看一下进程内部的32MB虚拟地址空间的构造。Memoryusagefor
42、Process819b5d10:shell.exepid2Slotbase06000000Sectionptr83fc500006000000(1):r06010000(0):-CCCCCCCCCCCCCCC06020000(0):WWW06030000(0):SS06040000(0):W06060000(0):06070000(0):WW07f00000(0):07ff0000(0):WcPagesummary:code=16(1)datar/o=0r/w=8stack=2reserved=330首先第一行虚拟内存是没有使用的。这正如我们所知道的,每个进程的前64KB是用来捕捉空指针的。任
43、何对此段内存的访问都会导致访问违例出错。然后,从0 x06010000开始的64K的地方,被程序的代码所占据。再接下来,从0 x06020000的64K是程序的可写数据区。从0 x06030000开始的地方是进程的栈。我们从这里也可以看到,进程的栈是从高地址向低地址增长的。然后从0 x06020000开始的地方应该是系统的堆了,我们用LocalAlloc申请的内存都会位于这个范围内。最后两行显示了进程的最高的地址。在这个范围内又有一些可写的数据。这部分是进程加载的DLL所申请的数据。这样,每个进程的32MB虚拟地址空间内的东西就一幕了然了。程序最后打印的是所有进程所共享的数据区,地址从0 x4
44、2000000开始。这部分主要用作内存映射文件,上图打出了两个内存映射文件区,一个有读写权限,一个有只读权限。实验2:观察WindowsCE的内存动态申请和释放目标:在这个实验中,您将学会使用PlatformBuilder的CEShell来观察WindowsCE的虚拟内存使用情况,并且借助一个程序来观察WindowsCE的内存申请和释放。使用PlatformBuilder的CEShell命令观察WindowsCE的内存布局观察WindowsCE的内存申请和释放预备知识:熟悉WindowsCE的虚拟内存结构熟悉WindowsCE的内存申请,释放函数。实验步骤:编写测试应用程序PlatformBu
45、ilder下选择File-NewProjectorFile,生成HelloWorld模板。在HelloWorld程序的基础上在winproc函数中增加如下代码:caseWM_LBUTTONDOWN:staticintflag=0;staticHANDLEhMem=NULL;staticHANDLEhMem2=NULL;switch(flag)case0:/ReseveringMemory,2pages,8KhMem=VirtualAlloc(NULL,1024*4*2,MEM_RESERVE,PAGE_READWRITE);NKDbgPrintfW(TEXT(hMemis%p.rn),hMem
46、);flag+;break;case1:hMem2=VirtualAlloc(NULL,1024*4,MEM_RESERVE,PAGE_READONLY);NKDbgPrintfW(LhMem2is%p.rn,hMem2);flag+;break;case2:/CommitMemory,1KVirtualAlloc(hMem,1024,MEM_COMMIT,PAGE_READWRITE);flag+;break;case3:/ReleaseMemoryVirtualFree(hMem,1024*4*2,MEM_RELEASE);flag=1;break;default:;/errorhere提
47、示:此段代码的作用是两次使用VirtualAlloc函数保留虚拟地址空间,一次使用VirtualAlloc提交虚拟内存空间。目的是查看WindowsCE虚拟内存的保留和提交粒度,以及动态申请内存的增长方向。编译代码,重新MakeImage把测试程序build进OSImage。在模拟器中运行OSImage观察测试应用程序的运行启动测试程序,然后再TargetControl窗口中输入mifull命令。在命令行中输入的测试程序的进程地址空间情况如下:MemoryusageforProcess819b6148:bb.exepid7Slotbase10000000Sectionptr83e2f00010000000(1):r10010000(0):-CRWR10020
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教育园区数字化教学资源的建设与发展
- 煤矿安全管理人员法定职责
- 安全生产管理机构及人员的职责
- 加油员安全职责六条
- 教育技术的未来发展路径和培训方向探索
- 垃圾分类商场管理办法
- 医疗教育中VR模拟教学的创新实践
- 外聘生产经理管理办法
- 建筑工程生产安全事故的伤亡人数
- 公司隐患排查治理台账
- 2025年江苏南京市河西新城区国有资产经营控股集团招聘笔试参考题库附带答案详解
- 中药涂擦治疗护理技术操作规范
- 《大金智能控制系统》课件
- 北师大版四年级下册数学口算题1000道带答案
- 《旅游公路设计指南》
- AAMIST79-2017卫生保健设施蒸汽灭菌和无菌保证综合指南
- 2025年重庆出版集团招聘笔试参考题库含答案解析
- 高一下学期期末考试物理试题
- 金融产品网络营销管理办法
- 2024年广东省广州市中考化学真题卷及答案解析
- 高速公路运营公司安全管理
评论
0/150
提交评论