还剩23页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
计算机科学与技术系实验报告专业名称计算机科学与技术专业课程名称计算机操作系统项目名称存储管理实验三存储管理[□Windows Xp内存结构背景知识Windows Xp是32位的操作系统,它使计算机CPU可以用32位地址对32位内存块进行操作内存中的每一个字节都可以用一个32位的指针来寻址这样,最大的存储空间就是232字节或4000兆字节(4GB)这样,在Windows下运行的每一个应用程序都认为能独占可能的4GB大小的空间01f63000-01f
7000052.0KB Reserved,READONLY,Private
1.52GB01f70000-63da
00004.00KB Free,NOACCESS
8.00KB Committed,READONLY,Image63da0000-63dal
0004.00KB Committed,EXECUTE_READ,Image63dal000-63da
30004.00KBCommitted,READONLY,Image63da3000-63da
400012.0KBCommitted,READWRITE,Image63da4000-63da
500032.0KBCommitted,READONLY,Image63da5000-63da
80004.00KBFree,NOACCESS63da8000-63db0000196KBCommitted,READONLY,Image63db0000-63dbl000Committed,63dbl000-63de2000EXECUTE_READ,Image63de2000-63df
500076.0KB Committed,READONLY,Image63df5000-63df
70008.00KB Committed,READWRITE,Image63df7000-63dff
00032.0KB Committed,READONLY,Image63dff000-63e
000004.00KB Free,NOACCESS63e00000-63e
010004.00KB Committed,READONLY,Image232KB63e01000-63e3b000Committed,EXECUTE_READ,Image
4.00KB Committed,63e3b000-63e62000156KB Committed,READONLY,Committed,
4.00KB63e62000-63e63000ImageCommitted,
4.00KB READWRITE,Image WRITECOPY,63e63000-63e64000Committed,
56.0KB63e64000-63e65000258MB Free,NOACCESS63e65000-63e73000Image READWRITE,Image READONLY,Image
4.00KB63e73000-74170000Committed,READONLY,Image,Module:600KB Committed,74170000-74171000EXECUTE_READ,ImagePROPSYS.dll
4.00KB Committed,READWRITE,Image74171000-74207000680KB Committed,READONLY,Image74207000-
742080008.55MB Free,NOACCESS74208000-742b
20004.00KB Committed,READONLY,Image,Module:742b2000-74b4000074b40000-74b41000332KB Committed,EXECUTE_READ,ImagebcryptPrimitives.dll
4.00KB Committed,READWRITE,Image74b41000-74b
9400016.0KB Committed,READONLY,Image74b94000-74b
9500028.0KB Free,NOACCESS74b95000-74b
990004.00KB Committed,READONLY,Image,Module:74b99000-74ba000074ba0000-74bal
00016.0KB Committed,EXECUTE_READ,ImageCRYPTBASE,dll
4.00KB Committed,READWRITE,Image74bal000-74ba500016*0KB Committed,READONLY,Image74ba5000-74ba
600024.0KB Free,NOACCESS74ba6000-74baa
0004.00KB Committed,READONLY,Image,Module:74baa000-74bb000074bb0000-74bbl
00092.0KB Committed,EXECUTE_READ,Image
4.00KB Committed,READWRITE,Image74bc9000-74bce
00020.0KB Committed,READONLY,Image74bce000-74dl
00001.25MB Free,NOACCESS74dl0000-74dll
0004.00KB Committed,READONLY,Image,Module:496KBCommitted,EXECUTE_READ,Imageshcore.dllCommitted,READWRITE,Image74dll000-74d8d
0004.00KBCommitted,READONLY,Image74d8d000-74d8e
00016.0KBCommitted,WRITECOPY,Image74d8e000-74d
920004.00KBCommitted,READONLY,Image
4.00KB74d92000-74d
9300040.0KB74d93000-74d9d000Free,NOACCESS
1.44MB74d9d000-74fl0000Committed,READONLY,Image,Module:228KB Committed,74fl0000-74f11000EXECUTE_READ,ImageSHLWAPL dll
4.00KB Committed,READWRITE,Image74fll000-74f4a
00036.0KB Committed,READONLY,Image74f4a000-74f4b
00020.1MB Free,NOACCESS74f4b000-74f
540004.00KB Committed,READONLY,Image,Module:816KBCommitted,EXECUTE_READ,Image74f54000-76370000READWRITE,WRITECOPY,READWRITE,WRITECOPY,312KB76370000-76371000Committed,MSCTF.dll
4.00KB Committed,READONLY,Image76371000-7643d
0004.00KB Committed,Image Image7643d000-7643e000Committed,
4.00KB Image
4.00KB7643e000-7643f000Committed,Committed,Image
8.00KB7643f000-76440000READONLY,76440000-76442000Image,Module:
60.0KB Reserved,READONLY,Image408KB Committed,EXECUTE_READ,Image76442000-
7649000040.0KB Reserved,READONLY,Image76490000-76491000152KB Committed,READONLY,ImageKERNEL
32.DLL
40.0KB Reserved,READONLY,Image76491000-764a
00004.00KB Committed,READWRITE,Image764a0000-
7650600060.0KB Reserved,READONLY,Image76506000-
765100004.00KB Committed,READONLY,Image76510000-
7653600060.0KB Reserved,READONLY,Image76536000-
765400004.00KB Committed,READONLY,Image76540000-
7654100060.0KB Reserved,READONLY,Image76541000-
7655000020.0KB Committed,READONLY,Image76550000-
7655100044.0KB Reserved,READONLY,Image76551000-
765600004.00KB Committed,READONLY,Image,Module:124KB76560000-76561000Committed,EXECUTE_READ,Image
4.00KB Committed,76561000-76570000READWRITE,Image
40.0KB Committed,READONLY,Image76570000-7657500076575000-7658000076580000-76581000IMM
32.DLL765ab000-765c
000084.0KB Free,NOACCESS765c0000-765cl
0004.00KB Committed,READONLY,Image,Module:sechost,dll765cl000-765f8000220KB Committed,EXECUTE_READ,Image765f8000-765fa
0008.00KB Committed,READWRITE,Image765fa000-765fb
0004.00KB Committed,WRITECOPY,Image765fb000-
7660300032.0KB Committed,READONLY,Image76603000-
7661000052.0KB Free,NOACCESS76610000-
766110004.00KB Committed,READONLY,Image,Module:KERNELBASE,dll
1.30MB Committed,EXECUTE_READ,Image76611000-
7676000012.0KB Committed,READWRITE,Image76760000-
767630004.00KB Committed,WRITECOPY,Image76763000-76764000136KB Committed,READONLY,Image76764000-
7678600040.0KB Free,NOACCESS76786000-
767900004.00KB Committed,READONLY,Image,Module:592KB76790000-76791000Committed,EXECUTE_READ,ImageUSER
32.dll
8.00KB Committed,READWRITE,Image76791000-76825000676KB Committed,READONLY,Image76825000-76827000⑶43MB Free,NOACCESS76827000-768d
00004.00KB Committed,READONLY,Image,Module:768d0000-76c4000076c40000-76c41000620KB Committed,EXECUTE_READ,ImageRPCRT
4.dll
4.00KB Committed,READWRITE,Image76c41000-76cdc
00060.0KB Committed,READONLY,Image76cdc000-76cdd000784KB Free,NOACCESS76cdd000-76cec
0004.00KB Committed,READONLY,Image,Module:704KB76cec000-76db0000Committed,EXECUTE_READ,Image
4.00KB Committed,
4.76db0000-76dbl00000KB Committed,
12.0READWRITE,Imagemsvcrt.dll KB Committed,
4.00KBWRITECOPY,ImageCommitted,
28.0KB76dbl000-76e61000Committed,
4.00KB READWRITE,Image76e61000-76e62000Committed,READONLY,WRITECOPY,Image76e62000-76e63000Image,Module:L18MBREADONLY,Image76e63000-76e66000968KB Free,NOACCESS76e66000-76e67000Committed,EXECUTE_READ,Image76e67000-76e6e
00012.0KB Committed,READWRITE,Image76e6e000-76f60000104KB Committed,READONLY,Image76f60000-76f
6100012.0KB Free,NOACCESSGDI
32.dll
4.00KB Committed,READONLY,Image,Module:76f61000-7709000077090000-7709300077093000-770ad000770bl000-77135000528KB Committed,EXECUTE_READ,Image77135000-
771370008.00KB Committed,READWRITE,Image77137000-
7714200044.0KB Committed,READONLY,Image77142000-
773700002.17MB Free,NOACCESS77370000-
773710004.00KB Committed,READONLY,Image,Module:combase.dll
1.50MB Committed,EXECUTE_READ,Image77371000-774f
30004.00KB Committed,READWRITE,Image774f3000-774f
40004.00KB Committed,WRITECOPY,Image774f4000-774f
500012.0KB Committed,READWRITE,Image774f5000-774f8000200KB Committed,READONLY,Image774f8000-7752a
0005.46MB Free,NOACCESS7752a000-77aa
00004.00KB Committed,READONLY,Image,Module:77aa0000-77aal000ntdll.dll
1.01MB Committed,EXECUTE_READ,Image77aal000-77ba
600020.0KB Committed,READWRITE,Image77ba6000-77bab000440KB Committed,READONLY,Image77bab000-77cl9000130MB Free,NOACCESS
20.0KB Committed,READONLY,Mapped
0.9877cl9000-7fea0000MB Reserved,READONLY,Mapped204KB7fea0000-7fea5000Committed,READONLY,Mapped7fea5000-7ffa
00008.00KB Free,NOACCESS7ffa0000-7ffd
300012.0KB Committed,READWRITE,Private7ffd3000-7ffd
500012.0KB Committed,READWRITE,Private7ffd5000-7ffd
800012.0KB Committed,READWRITE,Private7ffd8000-7ffdb
0004.00KB Committed,READWRITE,Private7ffdb000-7ffde
0004.00KB Committed,READWRITE,Private7ffde000-7ffdf
0004.00KB Committed,READONLY,Private7ffdf000-7ffe
000060.0KB Reserved,READONLY,Private7f■码fe\D0eb0u0g\05--
2.e7xfefel00000010000-
0002000064.0KB Committed,RE ADVRITE,Mapped700f02f00e00l-0000021000-07ff f
4.00000K0BCommitted,READVRITE,Private00021000-0002e
00052.0KB Reserved,READONLY,Private0002e000-
000300008.00KB Free,NOACCESS00030000-
000310004.00KB Committed,READVRITE,Private00031000-
0004000060.0KB Free,NOACCESS00040000-
0005400080.0KB Committed,READONLY,Mapped00054000-
0006000048.0KB Free,NOACCESS00060000-00095000212KB Reserved,READONLY,Private00095000-
0009800012.0KB Committed,GUARD,READWRITE,Private00098000-000a0000000a0000-0019b
00032.0KB Coinmitted,RE ADVRITE,Private0019b000-0019d
0000.98MB Reserved,READONLY,Private0019d000-001a
00008.00KB Committed,GUARD,READVRITE,Private001a0000-001a
400012.0KB Committed,READVRITE,Private001a4000-001b
000016.0KB Committed,READONLY,Mapped001b0000-001b
200048.0KB Free,NOACCESS001b2000-001c
00008.00KB Cornmitted,READWRITE,PrivateOOlcOOOO-OOlclOOO
56.0KB Free,NOACCESSOOlclOOO-OOldOOOO
4.00KB Committed,READVRITE,Private001d0000-001d
200060.0KB Free,NOACCESS001d2000-001e
00008.00KB Committed,READONLY,MappedOOleOOOO-OOlelOOO
56.0KB Free,NOACCESSOOlelOOO-OOlfOOOO
4.00KB Committed,READWRITE,Mapped001f0000-001f
500060.0KB Free,NOACCESS001f5000-0020000000200000-002be
00020.0KB Committed,READVRITE,Private002be000-002c
000044.0KB Reserved,READONLY,Private002c0000-002d0000搜760KB Committed,READONLY,Mapped狗拼音输入法全
8.00KB Free,NOACCESS
64.0KB Committed,READWRITE,Private■码\Debug\5-
2.exe003c0000-003f5000212KB Reserved,READONLY,Private003f5000-003f
800012.0KB Committed,GUARD,READVRITE,Private003f8000-
0040000032.0KB Committed,READVRITE,Private00400000-
004010004.00KB Committed,READONLY,Image,Module:5-200401000-00470000444KB Committed,EXECUTE_READ,Image00470000-
0047800032.0KB Committed,READONLY,Image00478000-0047b
00012.0KB Committed,READVRITE,Image0047b000-0047d
0008.00KB Committed,VRITECOPY,Image0047d000-
0048100016.0KB Committed,READWRITE,Image00481000-
0048500016.0KB Committed,READONLY,Image00485000-
0049000044.0KB Free,NOACCESS00490000-0058d
0000.98MB Reserved,READONLY,Private0058d000-0058f
0008.00KBCommitted,GUARD,READVRITE,Private0058f000-
005900004.00KBCommitted,READWRITE,Private00590000-005c5000212KB Reserved,READONLY,Private005c5000-005c
800012.0KB Committed,GUARD,READWRITE,Private005c8000-005d
000032.0KB Cornmitted,READWRITE,Private Reserved,005d0000-006cd
0000.98MB READONLY,Private Committed,GUARD,READVRITE,006cd000-006cf
0008.00KB Private Committed,READWRITE,Private006cf000-006d
00004.00KB Committed,READONLY,Mapped Reserved,006d0000-006dc
00048.0KB READONLY,Mapped Committed,READONLY,Mapped006dc000-
008500001.45MB Reserved,READONLY,Mapped Free,NOACCESS00850000-
0085400016.0KB Committed,READONLY,Mapped Free,NOACCESS00854000-
0085800016.0KB Coinmitted,RE ADVRITE,Private Reserved,00858000-
0086000032.0KB READONLY,Private00860000-0086a
00040.0KB0086a000-
0087000024.0KB00870000-
0087300012.0KB00873000-00880000搜
52.0KB狗拼音输入法全■.D:\代文祥\程序代5虱ebug\52exe・76e63000-76e
6600012.0KB Comitted,READWRITE,Image76e66000-76e
670004.00KB Coimiitted,VRITECOPY,Image76e67000-76e6e
00028.0KB Coirmitted,READONLY,Image76e6e000-76f60000968KB Free,NOACCESS76f60000-76f
610004.00KB Connitted,READONLY,Image,Module:GDI
32.dll76f61000-
770900001.18MB Coimitted,EXECUTE_READ,Iirage77090000-
7709300012.0KB Conniitted,READWRITE,Image104KB Committed,READONLY,Image77093000-770ad
00012.0KB Free,NOACCESS770ad000-770b
00004.00KB Coimitted,READONLY,Image,Module770b0000-770bl000OLEAUT
32.dll528KB Committed,EXECUTE_READ,Image770bl000-7713500077135000-
771370008.00KBCoirmitted,READWRITE,Image77137000-
7714200044.0KB Coirenitted,READONLY,ImageFree,77142000-
773700002.17MB NOACCESS77370000-
773710004.00KB Coirniitted,READONLY,Image,Nodulecoirbase,dll77371000-774f
30001.50MB Coirmitted,EXECUTE_READ,linage774f3000-774f
40004.00KB Committed,READWRITE,Image VRITECOPY,774f4000-
774150004.00KB Coimitted,Image READWRITE,Image774f5000-774f
800012.0KB Coirenitted,774f8000-7752a000200KB Cononitted,READONLY,Image7752a000-77aa
00005.46MB Free,NOACCESS77aa0000-77aal
0004.00KB CoMnitted,READONLY,Image,Hodule:ntdll.dll77aal000-77ba
60001.01MB Coimitted,EXECUTE_READ,Image77ba6000-77bab
00020.0KB Comnitted,READWRITE,Image77bab000-77c19000440KB Committed,READONLY,Image77cl9000-7fea0000130HB Free,NOACCESS7fea0000-7fea
500020.0KBCommitted,READONLY,Happed
0.98MB7fea5000-7ffaOOOO Reserved,READONLY,Mapped204KBConnnitted,7ffa0000-7ffd3000READONLY,Mapped7ffd3000-7ffd
50008.00KBFree,N3ACCESS7ffd5000-7ffd
800012.0KBConmitted,READWRITE,Private7ffd8000-7ffdb
00012.0KBCoirmitted,READWRITE,Private7ffdb000-7ffde
00012.0KBComnitted,READWRITE,Private7ffde000-7ffdf
0004.00KBCoimitted,READWRITE,Private7ffdf000-7ffe
00004.00KBCoMnitted,READWRITE,Private7ffe0000-7ffel
0004.00KBCommitted,READONLY,Private7ffel000-7fff0000演
60.0KB Reserved,READONLY,Private狗拼音输入法尽Q.9Q人得iSl◎恻宸小)扇中S如5/10/17表3-3实验记录2)从上述输出结果,对照分析清单5-2的程序,请简单描述程序运行的流程:.首先获得系统信息1分配要存储信息的缓冲区
2.•循环整个应用地址空间3获得下一个虚拟内存块信息
4.计算块的结尾及大小
5.显示块的大小及地址
6.显示块的状态
7.显示保护
8.显示类型
9.检验可执行的影像除去路径并显示
10.移动块指针至下一个块1L虚拟内存的分配与释放
2.能正确使用系统函数GetMeoryStatusO和数据结构MEMORY.STATUS了解系统内存和虚拟存储空间使用情况,会使用VirsualAlloc函数和VirsualFree函数分配和释放虚拟内存空间//GetMemoryStatus.cpp:Defines theentry pointfor theconsole application.//ttinclude stdafx.h〃ttinclude GetMemoryStatus.h〃#ifdef DEBUG#define newDEBUG^NEW#undef THIS_FILEstatic charTHIS_FILE[]=_FILE_;ttendifvoid GetMemStavoid;//The oneand onlyapplication objectCWinApptheApp;using namespacestd;int_tmainint argc,TCHAR*argv[],TCHAR*envp[]{int nRetCode=0;LPVOID BaseAddr;char*str;GetMemStaO;printf,zNow Allocate32M Virsual Memory and2M Physical Memory\n\nz,;BaseAddr=::VirtualAllocNULL,1024*1024*32,MEM_RESERVE|MEM_COMMIT,PAGE_RE ADWRTTE;〃分配虚拟内存if BaseAddr二二NULL printfCVirsual AllocateFail.\n〃;str=char*malloc1024*1024*2;〃分配内存GetMemStaO;printf,,Now Release32M Virsual Memory and2M PhysicalMemory\n\nz,;if::VirtualFreeBaseAddr,0,MEM RELEASE==0〃释放虚拟内存printfRelease AllocateFail.\n〃;free str;〃释放内存GetMemStaO;return nRetCode;}void GetMemStavoidMEMORYSTATUSMemlnfo;GlobalMemoryStatusfeMemlnfo;printf^Current MemoryStatus is:\n〃;printf,z\t Total Physical Memory is%dMB\n〃,Meminfo.dwTotalPhys/1024*1024;printf〃\t Available PhysicalMemory is%dMB\n〃,Meminfo.dwAvailPhys/1024*1024;printf〃\t Total Page File is%d MB\n〃,Meminfo.dwTotalPageFile/1024*1024;printf,z\t Available Page File is%dMB\n〃,Memlnfo.dwAvailPageFile/1024*1024;printf,z\t Total Virtual Memory is%dMB\n〃,Memlnfo.dwTotalVirtual/1024*1024;printf〃\t Available Virsual memory is%dMB\nzz,Memlnfo.dwAvailVirtual/1024*1024;printf,z\t Memory Load is%d%%\n\n,/,Memlnfo.dwMemoryLoad;}步骤1在VC
6.0环境下选择Win32Console Application建立一个控制台工程文件,选择Anapplication thatSupports MFC步骤2编辑并编译完成后,单击“Build”菜单中的“Build GetMemoryStatus.exe”命令,建立GetMemoryStatus.exe可执行文件操作能否正常进行?如果不行,则可能的原因是什么?能正常运行________________________________________________________________步骤3在工具栏单击“Execute Program”按钮,执行GetMemoryStatus.cpp.exe程序分析程序GetMemoryStatus.cpp的运行结果1请描述运行结果如果运行不成功,则可能的原因是什么?Current MemoryStatus is:_________________________________________________________________Total PhysicalMemory is2047MB_________________________________________________Available PhysicalMemory is2047MB_____________________________________________Total PageFile is4095MB_______________________________________________〉_________Available PageFil is4095MB____________________________________________________Total VirtualMemory is2047MB__________________________________________________Available Virsual memory is2040MB_______________________________________________Memory Load is15%___________________________________________________】Now Allocate32M VisualMemory and2M PhysicalMemory__________________________Current MemoryStatus is:_________________________________________________________________Total PhysicalMemory is2047MB_________________________________________________Available PhysicalMemory is2047MB_____________________________________________Total PageFile is4095MB_______________________________________________〉_________Available PageFil is4095MB____________________________________________________Total VirtualMemory is2047MB__________________________________________________Available Virsualmemory is2006MB_______________________________________________Memory Loadis15%___________________________________________________】Now Release32M VisualMemory and2M PhysicalMemory___________________________Current MemoryStatus is:_________________________________________________________________Total PhysicalMemory is2047MB_________________________________________________Available PhysicalMemory is2047MB_____________________________________________Total PageFile is4095MB_______________________________________________〉_________Available PageFil is4095MB____________________________________________________Total VirtualMemory is2047MB__________________________________________________Available Virsualmemory is2040MB_______________________________________________Memory Loadis15%___________________________________________________在进程创建之前,总的物理地址内存是2047MB,可用物理地址为2047MB,总的实际页内存和页内存也都是4095MB,总的虚拟内存是2047MB,而可用虚拟内存是2040MB,而在创建了一个需要虚拟内存为32M和2M的物理地址的进程之后,其他没变,只有可用虚拟内存从2040MB变成了2006MB,而释放了该进程之后又变回了2040MB______________________________2根据运行输出结果,若要改变分配和回收的虚拟内存和物理内存的大小,要改变程序代码的语句,分别为BaseAddr=::VirtualAHocNULL,1024*1024*32,MEM RESERVEIMEMCOMMIT,PAGEREADWRITE;//分配虚拟内存___________________________________________________________if BaseAddr==NULL printfCVirsualAllocate FaiLXiT;_______str=char*maHoc1024*1024*2;〃分酉己内存_____3根据运行输出结果,对照分析4-2程序,可以看出程序运行的流程吗?请简单描述:
1.分配虚拟内存________________________________________________________________
2.分配内存___________________________________________________________________
3.释放虚拟内存_______________________________________________________________
4.释放内存■D:\1304012001fW^\Debug\
3.exe-□XCurrent MemoryStatus isTotal PhysicalMemory is2047MBAvailable PhysicalMemory is1950MBTotal PageFile is4095MBAvailable PageFile is2842MBTotal VirtualMemory is2047MBAvailable Virsualmemory is2037MBMemory Loadis51%Now Allocate32M VirsualMemory and2M PhysicalMemoryCurrent MemoryStatus isTotal PhysicalMemory is2047MBAvailable PhysicalMemory is1950MBTotal PageFile is4095MBAvailable PageFile is2808MBTotal VirtualMemory is2047MBAvailable Virsualmemory is2003MBMemory Loadis51%Now Release32M VirsualMemory and2M PhysicalMemoryCurrent MemoryStatus isTotal PhysicalMemory is2047MBAvailable PhysicalMemory is1951MBTotal PageFile is4095MBAvailable PageFile is2842MBTotal VirtualMemory is2047MBAvailable Virsualmemory is2037MB搜狗拼音输入法全Current MemoryStatus is:Total PhysicalMemory is2047MBAvailable PhysicalMemory is1970MBTotal PageFile is4095MBAvailable PageFile is2873MBTotal VirtualMemory is2047MB AvailableVirsualmemory is2038MB MemoryLoadis50%Now Allocate32M VirsualMemoryand2M PhysicalMemoryCurrent MemoryStatus is:Total PhysicalMemory is2047MBAvailable PhysicalMemory is1967MBTotal PageFile is4095MBAvailable PageFile is2836MBTotal VirtualMemory is2047MBAvailable Virsualmemory is2004MBMemory Loadis50%Now Release32M VirsualMemoryand2M PhysicalMemoryCurrent MemoryStatus is:Total PhysicalMemory is2047MBAvailable PhysicalMemory is1969MBTotal PageFile is4095MBAvailable PageFile is2869MBTotal VirtualMemory is2047MBAvailable Virsualmemoryis2038MB
四、思考题用户过程的虚拟地址空间分成几部分?每部分含义是什么?六部分TotalPhysicalMemoryis2047MB总物理内存AvailablePhysicalMemoryis1970MB空闲物理内存TotalPageFileis4095MB总页面文件内存AvailablePageFileis2873MB空闲页面文件内存TotalVirtualMemoryis2047MB总虚拟内存AvailableVirsualmemoryis2038MB空闲虚拟内存MemoryLoadis50%
五、实验小结我使用的是WindowslO64位操作系统,4G运存,内存中的每一个字节都可以用一个64位的指针来寻址,这样,在Windows下运行的每一个应用程序都认为能独占可能的4GB大小的空间,而事实上每个进程都不可能独享4GB内存,操作系统在幕后将虚拟内存地址映射到了各进程的物理内存地址上而所谓物理内存是指计竟新的RAM和由Windows分配到用户驱动器根目录上的换页文件物理内存完全由系统管理4GB的虚拟地址空间被划分成两个部分低端2GB提供给进程使用,高端2GB提供给系统使用通过这个实验我明白了系统内存的划分和存储的管理得分(百分制)而另一方面,实际上没有几台机器的RAM能达到4GB,更不必说让每个进程都独享4GB内存了Windows在幕后将虚拟内存virtual memory,VM地址映射到了各进程的物理内存地址上而所谓物理内存是指计算机的RAM和由Windows分配到用户驱动器根目录上的换页文件物理内存完全由系统管理、实验目的1通过实验了解windowsXp内存的使用,学习如何在应用程序中管理内存、体会Windows应用程序内存的简单性和自我防护能力2了解windowsXp的内存结构和虚拟内存的管理,进而了解进程堆和windows为使用内存而提供的一些扩展功能
二、工具/准备工作您需要做以下准备一台运行Windows XpProfessional操作系统的计算机计算机中需安装Visual C++
6.0专业版或企业版
三、实验内容与步骤Windows提供了一个API即GetSystemlnfo,以便用户能检查系统中虚拟内存的一些特性程序5-1显示了如何调用该函数以及显示系统中当前内存的参数步骤1登录进入Windows XpProfessionalo步骤2在“开始”菜单中单击“程序Microsoft VisualStudio
6.0-“MicrosoftVisual C++
6.0”命令,进入Visual C++窗口步骤3在工具栏单击“打开”按钮,在“打开”对话框中找到并打开实验源程序5-
1.cppo程序5-1获取有关系统的内存设置的信息//工程vmeminfoftinclude windows.h#include iostreamttincludeshlwapi.httinclude iomanipttpragmacomment lib,shlwapi.lib〃void main{//首先,让我们获得系统信息SYSTEM_INFO si;::ZeroMemorysi,sizeofsi;::GetSystemlnfosi;//使用外壳辅助程序对一些尺寸进行格式化TCHAR szPageSize[MAX_PATH];::StrFormatByteSizesi.dwPageSize,szPageSize,MAX PATH;DWORD dwMemSize=DWORDsi.IpMaximumApplicationAddress-DWORD si.IpMinimumApplicationAddress;TCHAR szMemSize[MAX_PATH];::StrFormatByteSizedwMemSize,szMemSize,MAXPATH;//将内存信息显示出来std::coutVirtual memorypage size:〃szPageSizestd::endl;std::cout.fillO;std::coutMinimum applicationaddress:0x〃std::hexstd::setw8DWORD si.IpMinimumApplicationAddressstd::endl;std::coutMaximum applicationaddress:0x〃std::hexstd::setw8DWORD si.IpMaximumApplicationAddressstd::endl;std::coutTotal availablevirtual memory:〃szMemSizestd::endl;步骤4单击“Build”菜单中的“Compile5-
1.cpp命令,并单击“是”按钮确认系统对4-Lcpp进行编译步骤5编译完成后,单击“Build”菜单中的“Build5-l.exe命令,建立5-L exe可执行文件操作能否正常进行?如果不行,则可能的原因是什么?可以正常运行_______________________________________________步骤6在工具栏单击“Execute Program执行程序按钮,执行5T.exe程序运行结果分行书写如果运行不成功,则可能的原因是什么?1虚拟内存每页容量为4KB2最小应用地址0x0001000064K3最大应用地址为0x7ffeffff2G-64K4当前可供应用程序使用的内存空间为L99GB5当前计算机的实际内存大小为2GB阅读和分析程序5-1,请回答问题1理论上每个windows应用程序可以独占的最大存储空间是2GB2在程序5-1中,用于检索系统中虚拟内存特性的API函数是StrFormatByteSizedwMemSize,szMemSize,MAX PATH提示可供应用程序使用的内存空间实际上已经减去了开头与结尾两个64KB的保护区虚拟内存空间中的64KB保护区是防止编程错误的一种Windows方式任何对内存中这一区域的访问读、写、执行都将引发一个错误陷井,从而导致错误并终止程序的执行也就是说,假如用户有一个NULL指针地址为0,但仍试图在此之前很近的地址处使用另一个指针,这将因为试图从更低的保留区域读写数据,从而产生意外错误并终止程序的执行
[2]Windows Xp虚拟内存背景知识在Windows Xp环境下,4GB的虚拟地址空间被划分成两个部分低端2GB提供给进程使用,高端2GB提供给系统使用这意味着用户的应用程序代码,包括DLL以及进程使用的各种数据等,都装在用户进程地址空间内低端2GB用户过程的虚拟地址空间也被分成三部分1虚拟内存的已调配区committed具有备用的物理内存,根据该区域设定的访问权限,用户可以进行写、读或在其中执行程序等操作2虚拟内存的保留区reserved没有备用的物理内存,但有一定的访问权限3)虚拟内存的自由区(free)不限定其用途,有相应的PAGE_NOACCESS权限与虚拟内存区相关的访问权限告知系统进程可在内存中进行何种类型的操作例如,用户不能在只有PAGE_READONLY权限的区域上进行写操作或执行程序;也不能在只有PAGE_EXECUTE权限,区域里进行读、写操作而具有PAGE_NOACCESS权限的特殊区域,则意味着不允许进程对其地址进行任何操作在进程装入之前,整个虚拟内存的地址空间都被设置为只有PAGE_NOACCESS权限的自由区域当系统装入进程代码和数据后,才将内存地址的空间标记为已调配区或保留区,并将诸如EXECUTE READWRITE和READONLY的权限与这些区域相关联如表3-2所示,给出了MEMORY_BASIC」NFORMAITON的结构,此数据描述了进程虚拟内存空间中的一组虚拟内存页面的当前状态,期中State项表明这些区域是否为自由区、己调配区或保留区;Protect项则包含了windows系统为这些区域添加了何种访问保护;type项则表明这些区域是课执行图像、内存映射文件还是简单的私有内存VirsualQueryEXO API能让用户在指定的进程中,对虚拟内存地址的大小和属性进行检测Windows还提供了一整套能使用户精确控制应用程序的虚拟地址空间的虚拟内存APE一些用于虚拟内存操作及检测的A PI如表3-2所示表3-1MEMOR Y_BAS IC_INFORMAI TON结构的成员成员名称目的PVOID BaseAddress虚拟内存区域开始处的指针如果这个特定的区域为子分配区的话,则为虚拟内存外面区域的指PVOID AllocationBase针;否则此值与BaseAddress相同DWORD AllocationProtect虚拟内存最初分配区域的保护属性其可能值包括PAGE_NOACCESS,PAGE_READONLY,PAGE_READWRITE和PAGE_EXECUTE_READDWORD RegionSize虚拟内存区域的字节数区域的当前分配状态其可能值为MEM_COMMIT,MEM_PREE和DWORD StateMEM_RESERVE虚拟内存当前的保护属性可能值与AllocationProtect成员的相同DWORD Protect虚拟内存区域中出现的页面类型可能值为DWORD TypeMEM_IMAGE,MEM_MAPPED和MEM_PRIVATE表3-2虚拟内存的APIAPI名称描述VisualQueryEXO通过填充MEMORY_BAS IC_INFORMAT ION结构检测进程内虚拟内存的区域VisualAlloc保留或调配进程的部分虚拟内存,设置分配和保护标志VirsualEree0释放或收回应用程序使用的部分虚拟地址VirsualProtect改变虚拟内存区域保护规范VirsualLockO防止系统将虚拟内存区域通过系统交换到页面文件中VirsualUnlock释放虚拟内存的锁定区域,必要时,允许系统将其交换到页面文件中提供虚拟内存分配功能的是VirtualAllocO API该API支持用户向系统要求新的虚拟内存或改变已分配内存的当前状态用户若想通过VirtualAllocO函数使用虚拟内存,可以采用两种方式通知系统1)简单地将内存内容保存在地址空间内2)请求系统返回带有物理存储区(RAM的空间或换页文件)的部分地址空间用户可以用flAllocation Type参数(commit和reserve)来定义这些方式,用户可以通知Windows按只读、读写、不可读写、执行或特殊方式来处理新的虚拟内存与VirtualAlloc函数对应的是VirtualFree函数,其作用是释放虚拟内存中的己调配页或保留页用户可利用dwFree Type参数将已调配页修改成保留页属性VirtualProtectO是VirtualAlloc的一个辅助函数,利用它可以改变虚拟内存区的保护规范
一、实验目的1通过实验了解Windows Xp内存的使用,学习如何在应用程序中管理内存,体会Windows应用程序内存的简单性和自我防护能力2学习检查虚拟内存空间或对其进行操作3了解Windows Xp的内存结构和虚拟内存的管理,进而了解进程堆和Windows为使用内存而提供的一些扩展功能
二、工具/准备工作在开始本实验之前,请回顾教科书的相关内容您需要做以下准备1一台运行Windows XpProfessional操作系统的计算机2计算机中需安装Visual C++
6.0专业版或企业版
三、实验内容与步骤虚拟内存的检测
1.清单5-2所示的程序使用VirtualQueryEXO函数来检查虚拟内存空间步骤1登录进入Windows XpProfessionalo步骤2在“开始”菜单中单击“程序”-Microsoft VisualStudio
6.0”-“MicrosoftVisual C++
6.0”命令,进入Visual C++窗口步骤3在工具栏单击“打开”按钮,在“打开”对话框中找到并打开实验源程序5-
2.cppo清单5-2检测进程的虚拟地址空间//工程vmwalkerttinclude windows.httinclude iostreamttincludeshlwapi.httinclude iomanipttpragmacomment lib,Shlwapi.lib〃//以可读方式对用户显示保护的辅助方法〃保护标记表示允许应用程序对内存进行访问的类型//以及操作系统强制访问的类型inline boolTestSet DWORDdwTarget,DWORD dwMaskreturn dwTargetfedwMask==dwMask;#define SHOWMASKdwTarget,type\if TestSetdwTarget,PAGE_##type\{std::cout〃,〃#type;}void ShowProtectionDWORDdwTargetSHOWASK dwTarget,READONLY;SHOWMASKdwTarget,GUARD;SHOWMASKdwTarget,NOCACHE;SHOWMASKdwTarget,READWRITE;SHOWMASKdwTarget,WRITECOPY;SHOWMASKdwTarget,EXECUTE;SHOWMASKdwTarget,EXECUTE_READ;SHOWMASKdwTarget,EXECUTE_READWRITESHOWMASKdwTarget,EXECUTE_WRITECOPYSHOWMASKdwTarget,NOACCESS;//遍历整个虚拟内存并对用户显示其属性的工作程序的方法void WalkVMHANDLEhProcess//首先,获得系统信息SYSTEM_INFO si;::ZeroMemorysi,sizeofsi;::GetSystemlnfosi;//分配要存放信息的缓冲区MEMORY_BASIC_INFORMATION mbi;::ZeroMemorymbi,sizeofmbi;//循环整个应用程序地址空间LPCVOID pBlockLPVOID si.IpMinimumApplicationAddress;while pBlocksi.IpMaximumApplicationAddress//获得下一个虚拟内存块的信息if::VirtualQueryExhProcess,相关的进程//pBlock,mbi,开始位置缓//sizeofmbi==sizeof mbi冲区大小的//确认////计算块的结尾及其大小LPCVOIDpEnd=PBYTE pBlockTCHAR+mbi.RegionSize;szSize[MAX_PATH];::StrFormatByteSize mbi.RegionSize,szSize,MAX PATH;//显示块地址和大小std::cout.fillO;std::cout std::hexstd::setw8DWORD pBlock〈〃_〃std::hexstd::setw8DWORD pEnd::strlenszSize=7〃〃〃〃szSize11显示块的状态switchmbi.State case MEM_COMMIT:std::coutCommitted”;break;case MEM_FREE:std::cout“Free;break;case MEM_RESERVE:std::coutReserved”;break;//显示保护ifmbi.Protect==0mbi.State!=MEM_FREE一mbi.Protect=PAGE_READONLY;ShowProtectionmbi.Protect;//显示类型switchmbi.Type{case MEM_IMAGE:std::cout〃,Image”;break;case MEM_MAPPED:std::cout〃,Mapped”;break;caseMEM_PRIVATE:std::cout〃,Private;break;}//检验可执行的影像TCHAR szFilename[MAX_PATH]if::GetModu1eFi1eNameHMODULE pBlock,szFilename,MAX_PATH0//实际虚拟内存的模块句柄//除去路径并显示〃完全指定的文件名称〃实际使用的缓冲区大小::PathStripPathszFilename;std::cout〃,Module:〃szFilename;std::coutstd::endl;//移动块指针以获得下一下个块pBlock=pEnd;void main//遍历当前进程的虚拟内存::WalkVM::GetCurrentProcess;}清单5-2中显示一个walkVMO函数开始于某个进程可访问的最低端虚拟地址处,并在其中显示各块虚拟内存的特性虚拟内存中的块由VirsualQueryEXOAPI定义成连续快或具有相同状态自由区,已调配区等的内存,并分配以一组统一的保护标志只读、可执行等步骤4单击“Build”菜单中的“Compile5-
2.cpp”命令,并单击“是”按钮确认系统对5-
2.cpp进行编译步骤5编译完成后,单击“Build”菜单中的“Build5-
2.exe”命令,建立5-
2.exe可执行文件操作能否正常进行?如果不行,则可能的原因是什么?能正常运行步骤6在工具栏单击“Execute Program执行程序按钮,执行5-
2.exe程序1分析运行结果如果运行不成功,则可能的原因是什么按committed,reserved,free等三种虚拟地址空间分别记录实验数据,其中“描述”是对该组数据的简单描述,例如,对下列一组数据00010000-0001Xp
8.00KBCommitted,READWRITE,Private可描述为具有READWRITE权限的已调配私有内存区将系统当前的自由区Free虚拟地址空间填入表3-3中注此处用截图!
64.0KB Committed,READWRITE,Mapped
4.00KB00010000-00020000Committed,READWRITE,Private
52.0KB Reserved,00020000-00021000READONLY,Private
8.00KB Free,NOACCESS00021000-0002e
0004.00KB Committed,READWRITE,Private
60.0KB Free,0002e000-00030000NOACCESS
80.0KB Committed,READONLY,Mapped00030000-
0003100048.0KB Free,NOACCESS00031000-00040000212KB Reserved,READONLY,Private00040000-00054000Committed,GUARD,READWRITE,Private Committed,00054000-00060000READWRITE,Private Reserved,READONLY,00060000-0009500000095000-
0009800012.0KBPrivate Committed,GUARD,READWRITE,Private00098000-000a
000032.0KB Committed,READWRITE,PrivateCommitted,000a0000-0019b
0000.98MB READONLY,Mapped Free,NOACCESS Committed,0019b000-0019d
0008.00KB READWRITE,Private Free,NOACCESS Committed,0019d000-001a0000READWRITE,Private Free,NOACCESS Committed,
12.0KB001a0000-001a
400016.0KB001a4000-001b
000048.0KB001b0000-001b
20008.00KB001b2000-001c
000056.0KBOOlcOOOO-OOlclOOO
4.00KBOOlclOOO-OOldOOOO
60.0KB001d0000-001d
20008.00KB001d2000-001e0000READONLY,Mapped Free,NOACCESS
4.00KB Committed,READWRITE,MappedOOleOOOO-OOlelOOOOOlelOOO-OOlfOOOO
60.0KB Free,NOACCESS001f0000-001f
500020.0KB Committed,READWRITE,Private001f5000-
0020000044.0KB Reserved,READONLY,Private00200000-002be000760KB Committed,READONLY,Mapped002be000-002c
00008.00KB Free,NOACCESS002c0000-002d
000064.0KB Committed,READWRITE,Private002d0000-003c0000960KB Reserved,READONLY,Private003c0000-003f5000212KB Reserved,READONLY,Private003f5000-003f
800012.0KB Committed,GUARD,READWRITE,Private003f8000-
0040000032.0KB Committed,READWRITE,Private00400000-004010005-
2.
4.00KB Committed,READONLY,Image,Module:444KBexeCommitted,EXECUTE_READ,Image
32.0KB Committed,
12.00401000-004700000KB Committed,
8.0000470000-00478000READONLY,ImageKB Committed,
16.0KB00478000-0047b000READWRITE,ImageCommitted,
16.0KB0047b000-0047d000Committed,
0.98MB WRITECOPY,Image0047d000-00481000Reserved,READONLY,READWRITE,Image00481000-00485000PrivateREADONLY,Image00485000-
0049000044.0KB Free,NOACCESS00490000-0058d
0008.00KB Committed,GUARD,READWRITE,Private0058d000-0058f
0004.00KB Committed,READWRITE,Private212KB Reserved,0058f000-00590000READONLY,Private00590000-005c
500012.0KB Committed,GUARD,READWRITE,Private005c5000-005c
800032.0KB Committed,READWRITE,Private005c8000-005d
00000.98MB Reserved,READONLY,Private005d0000-006cd
0008.00KB Committed,GUARD,READWRITE,Private006cd000-006cf
0004.00KB Committed,READWRITE,Private006cf000-006d
000048.0KB Committed,READONLY,Mapped006d0000-006dc
0001.45MB Reserved,READONLY,Mapped006dc000-
0085000016.0KB Committed,READONLY,Mapped00850000-
0085400016.0KB Reserved,READONLY,Mapped00854000-
0085800032.0KB Free,NOACCESS00858000-
0086000040.0KB Committed,READONLY,Mapped00860000-0086a
00024.0KB Free,NOACCESS0086a000-0087000000870000-
0087300012.0KB Committed,READWRITE,Private00873000-
0088000052.0KB Reserved,READONLY,Private00880000-00a010001*50MB Committed,READONLY,MappedOOaOlOOO-OOalOOOO
60.0KB Free,NOACCESS00al0000-00ad8000800KB Committed,READONLY,Mapped00ad8000-01el
000019.2MB Reserved,READONLY,Mapped01el0000-01f
600001.31MB Free,NOACCESS01f60000-01f
6300012.0KB Committed,READWRITE,Private。
个人认证
优秀文档
获得点赞 0