版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统实验-内存管理实验报告周俊霰20112113202011211307M实习2:内存管理实验一・目的:在本次实验中,需要从不同的侧面了解Windows2000/XP的虚拟内存机制。在Windows2000/XP操作系统中,可以通过ー些API操纵虚拟内存。主要需要了解以下几方面:Windows2000/XP虚拟存储系统的组织如何控制虚拟内存空间"如何编写内存追踪和显示工具详细了解与内存相关的API函数的使用二、Windows2000/XP虚拟内存机制简介:内存管理是Windows2000/XP执行体的一部分,位于Ntoskrnl.exe文件中,是整个操作系统的重要组成部分。默认情况下,32位Windows2000/XP上每个用户进程可以占有2GB的私有地址空间,操作系统占有剩下的2GB。Windows2000/XP在x86体系结构上利用二级页表结构来实现虚拟地址向物理地址的变换。ー个32位虚拟地址被解释为三个独立的分量ーー页目录索引、页表索引和字节索引ーー它们用于找出描述页面映射结构的索引。页面大小及页表项的宽度决定了页目录和页表索引的宽度。比如,在x86系统中,因为ー页包含4096字节,于是字节索引被确定为12位宽(212=4096)〇应用程序有三种使用内存方法:以页为单位的虚拟内存分配方法,适合于大型对象或结构数组;内存映射文件方法,适合于大型数据流文件以及多个进程之间的数据共享;内存堆方法,适合于大量的小型内存申请。本次实验主要是针对第一种使用方式。应用程序通过API函数VirtualAlloc和VirtualAllocEx等实现以页为单位的虚拟内存分配方法。首先保留地址空间,然后向此地址空间提交物理页面,也可以同时实现保留和提交。保留地址空间是为线程将来使用保留一块虚拟地址。在已保留的区域中,提交页面必须指出将物理存储器提交到何处以及提交多少。提交页面在访问时会转变为物理内存中的有效页面。三、相关的API函数:可以通过GctSystemlnfo,GlobalMemoryStatus和VirtualQuery来查询进程虚空间的状态。主要的信息来源如下:VOIDGetSystemlnfo(LPSYSTEM」NFOIpSystemlnfo);结构SYSTEMINFO定义如下:typedefstruct_SYSTEM_INFO{DWORDdwOemld;DWORDdwPageSize;LPVOIDIpMinimumApplicationAddress;LPVOID1pMaximumApplicationAddress;DWORDdwActiveProcessorMask;DWORDdwNumberOfProcessors;DWORDdwProcessorType;DWORDdwAllocationGranularityJ〃分配粒度DWORDdwReserved;}SYSTEMJNFO,*LPSYSTEM_INFO;函数VOIDGlobalMemoryStatus(LPMEMORYSTATUSIpBuffer);数据结构MEMORYSTATUS定义如下:typedefstruct_MEMORYSTATUS(DWORDdwLength;DWORDdwMemoryLoad;DWORDdwTotalPhys;DWORDdwAvailPhys;DWORDdwTotalPageFile;DWORDdwAvailPageFile;DWORDdwTotaiVirtual;DWORDdwAvailVirtual;}MEMORYSTATUS,*LPMEMORYSTATUS;函数DWORDVirtualQuery(LPCVOLDIpAddress,PMEMORY.BASICJNFORMATIONIpBuffer,DWORDdwLength);主要数据结构MEMORY_BASIC」NFORMATION定义如下:typedefstruct_MEMORY_BASICJNFORMATION{PVOIDBaseAddress;PVOIDAllocationBase;DWORDAllocationProtect;DWORDRegionSize;DWORDState;DWORDProtect;DWORDType;}MEMORY_BASIC_INFORMATION;typedefMEMORY_BASICJNFORMATION*PMEMORY_BASICJNFORMATION;还有一些函数,例如VirtualAlloc,VirtualAllocEx,VirtualFree和VirtualFreeEx等,用于虚拟内存的管理,详情请见Microsoft的Win32APIReferenceManual〇四、实验内容:使用这些API函数,编写ー个包含两个线程的进程,ー个线程用于模拟内存分配活动,ー个线程用于跟踪第一个线程的内存行为。模拟内存活动的线程可以从ー个文件中读出要进行的内存操作,每个内存操作包含如下内容:时间:开始执行的时间;块数:分配内存的粒度;操作:包括保留一个区域、提交一个区域、释放ー个区域、回收ー个区域以及锁与解锁ー个区域;可以将这些操作编号,存放于文件中。,大小:指块的大小;访问权限:共五种:PAGE_READONLY、PAGE_READWRITE、PAGE_EXCUTE、PAGE_EXECUTE_READPAGE.EXECUTE_READWRITE〇可以将这些权限编号,存放于文件中。跟踪线程将页面大小、已使用的地址范围、物理内存总量以及虚拟内存总量等信息显示出来。五、实验步骤:首先执行makefle.exe,生成opfile文件,里面保存了模拟的内存操作。然后执行memory-op.exe,产生两个线程,ー个从opfile文件里读取内存操作,模拟内存活动,另ー个跟踪第一个的内存行为,将结果输出,并保存在out.txt文件中。两个线程通过信号量实现同步。六、实验结果分析:TOC\o"1-5"\h\z0dwActiveProcessorMask 15dwAllocationGranularity 65536dwNumberOfProcessors 4dwOemld0dwPageSize4096dwProcessorType586IpMaximumApplicationAddress0x7FFEFFFFIpMinimumApplicationAddress0x00010000wPr(x)essorArchitecture0wProcessorLevel6wProcessorRevision10759wReserved0************************食・**********************************************************237796556890039910421375344642377965568900399104213753446456416464896020823244802147352576&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&0x0001000040x0001000040x0001000065536Protect4RegionSizeState 4096IType 262144odwActiveProcessorMaskodwActiveProcessorMaskdwAllocationGranularitydwNumberOfProcessorsdwOemld015〃活动处理器掩码65536 〃分配粒度4 〃处理器号dwPageSize4096〃页大小dwPageSize4096〃页大小dwProcessorType586〃处理器类型〃最大分配地址IpMaximumApphcationAddress0x7FFEFFFFdwProcessorType586〃处理器类型〃最大分配地址IpMinimumApplicationAddress0x00010000 〃最小分配地址wProcessorArchitecture0wProcessorLevel6wProcessorRevision10759wReserved0〃处理器结构处理器级别〃处理器结构处理器级别〃处理器修订号〃保留dwAvailPageFile2377965568 〃可用页文件dwAvailPhys900399104 〃可用物理大小dwAvailVirtual2137534464 〃可用虚拟大小dwLength32 〃长度dwMemoryLoad56 〃主存下载dwTotalPageFile4164648960 〃总共页文件dwTotalPhys2082324480 〃总共物理大小dwTotalVirtual2147352576 〃总共虚拟大小&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&AllocationBase0x00010000 〃分配基址AllocationProtect4 〃分配保护BaseAddress0x00010000 〃基地址〃类型Protect4
〃类型RegionSize65536RegionSize65536〃区域大小State4096 〃状态Type262144 〃类型1 〃同上dwActiveProcessorMask15dwAllocationGranularity65536dwNumberOfProcessors4dwOemld0dwPageSize4096dwProcessorType586IpMaximumApplicationAddress0x7FFEFFFFIpMinimumApplicationAddress0x00010000wProcessorArchitecture0wProcessorLevel6wProcessorRevision10759wReserved0************************************************************************************dwAvailPageFile2377961472dwAvailPhys900362240dwAvailVirtual2137522176dwLength32dwMemoryLoad56dwTotalPageFile4164648960dwTotalPhys2082324480dwTotalVirtual2147352576&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&AllocationBase0x00010000AllocationProtect4BaseAddress0x00010000Protect4RegionSize65536State4096Type262144一直到30;address:0x2f0000:reservenowtartingaddress:0x300000:reservenowtartingaddress:0x310000tartingaddress:0x320000:reservenowtartingaddress:0x330000:commixnowtartingaddress:0x2f0000:commixnowtartingaddress:0x300000':connitnowtartingaddress:0x310000:commitnowtartingaddress:0x320000:commitnowtartingaddress:0x3300000:locknowtartingaddress:0x2f0000981-locknowtartingaddress:0x3000002:locknowtartingaddress:0x310000nov/artingaddress:0x320000:locknowaddress:0x330000locknowaddress:0x2f00008
5
1
r
0
r
rlocklocknow:0x300000nowtartingaddress:0x310000rror:158.8:unlocknov/size:12288size:4096size:20480size:16384size:20480size:12288size:4096size:20480size:16384size:20480size:12288size:4096size:20480size:16384size:20480size:12288size:4096size:2048018:unlocknowstartingaddress:0x32000019:unlocknowsize:16384startingaddress:0x330000error:158size:2048020:deconnitnowstartingaddress:0x2f00008721:deconnitnowsize:12288startingaddress:0x30000022:deconnitnowsize:4096startingaddress:0x31000087size:2048023:decomnitnowstartingaddress:0x32000024:decomnitnowsize:16384startingaddress:0x33000048725:releasenowsize:20480startingaddress:0x2f000026:releasenowsize:12288startingaddress:0x30000027:releasenowsize:4096startingaddress:0x31000028:releasenowsize:20480startingaddress:0x32000029:releasenowsize:16384startingaddress:0x330000请按任意键继续...size:20480保留(reserve)、提交(commit)、加锁(lock)、解锁(unlock)回收(decommit)、释放(release)、保留:在虚拟地址空间分配,不分配物理空间提交:在物理地址空间分配加锁:常驻内存,即防止操作系统把对应的内存空间换出到外存解锁:允许操作系统把对应的内存空间换出到外存回收:释放物理空间,但保留虚拟空间释放:释放物理空间和虚拟空间1、主要数据结构:structoperation(inttime;〃起始时间intblock;〃内存页数intoper;//操作intprotection;〃权限1;structtrace〃跟踪每一次分配活动的数据结构(LPVOIDstart;〃起始地址longsize;〃分配的大小);2、主程序:intmain()(DWORDdwThread;HANDLEhandle[2];〃生成两个线程handle[0]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Tracker,NULL,0,&dwThread);handle[l]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Allocator,NULU0,&dwThread);〃生成两个信号量allo=CreateSemaphore(NULL,0,1JaHo");trac=CreateSemaphore(NULL,1,1,"tracn);〃等待线程执行的执行结束后,再退出WaitForMultipleObjects(2,handle,TRUE,INFINITE);system(npauseH);return0;附录:源程序://makefile.cpp〃〃〃〃ん//〃〃〃〃〃〃/〃〃〃〃〃〃/〃〃〃〃〃〃〃〃〃〃〃/〃〃〃〃〃〃/〃/〃〃〃〃/〃〃〃〃文件生成程序#include<fstream.h>#include<stdio.h>#include<stdlib.h>#include<time.h>structoperation(inttime;//起始时间intblock;/Z内存页数intoper;〃操作intprotection;〃权限};intmain()(FILE*file;file=fopen(”〇卩甘ザ,”ド)〃8打1ビ为二进制用以确定内存操作operationop;for(imj=OJ<6;j++)〃〇-保留;レ提交;2ー锁;3ー解锁;4-回收;5ー释放for(inti=0;i<5;i++)〃〇-PAGE_READONLY;//1_READWRITE;〃2_EXECUTE;//3_EXECUTE_READ;//4_EXECUTE_READWRITE;(op.time=rand。%1〇。。;〃随机生成等待时间op.block=rand()%5+1;〃随机生成块大小op.oper=j;tection=i;fwrite(&op,sizeof(operation)」,file);〃将生成的结构写入文件)system("pause");return0;//memory-op.cpp〃内存管理实习〃将程序从文件读入每次的操作,并将结果输入到out.txt文件中〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃ノノ〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃#include<fstream.h>#include<stdio.h>#include<stdlib.h>#include<windows.h>#include<iostream.h>structoperation(inttime;〃起始时间intblock;〃内存页数intoper;〃操作intprotection;〃权限};structtrace〃跟踪每一次分配活动的数据结构(LPVOIDstart;〃起始地址longsize;〃分配的大小};HANDLEallo,trac;〃信号量的句柄DWORDTracker(LPDWORDIpdwparm)〃跟踪allocator线程的内存行为,并输出必要信息(ofstreamoutEle;〃输出文件outfile.open(,'out.txtM);for(inti=0;i<=30;i++)WaitForSingleObject(trac,INFINITE);〃等待allocator一次内存分配活动结束〃打印内存状况和系统状况outfile«i«endl;〃以下一段显示系统信息、,每次执行操作后系统信息不变〃如果要查看系统信息,可以取消注释SYSTEMJNFOinfo;〃系统信息GetSystemInfo(&info);outfile«"dwActiveProcessorMask''«'\t,«info.dwActiveProcessorMask«endl;outfile«,'dwAllocationGranularity',«,\t,«info.dwAllocationGranularity«endl;outfile«,,dwNumberOfProcessors,,«,\t,«info.dwNumberOfProcessors«endl;outfile«,'dwOemIdn«,\t,«info.dwOemId«endl;outfile«,'dwPageSize',«'\t,«info.dwPageSize«endl;outfile«,'dwProcessorType"«,\t,«info.dwProcessorType«endl;outfile«nlpMaximumApplicationAddress,'«'\t,«info.lpMaximumApplicationAddress«endl;outfile«,,lpMinimumApplicationAddress,'«,\t,«info.lpMinimumApplicationAddress«endl;outfile«,'wProcessorArchitecture"«'\t,«info.wProcessorArchitecture«endl;outfile«,'wProcessorLevel',«'\t,«info.wProcessorLevel«endl;outfile«,'wProcessorRevisionu«'\t,«info.wProcessorRevision«endl;outfile«,'wReserved"«,\t'«info.wReserved«endl;******************"«end卜〃内存状况MEMORYSTATUSstatus;〃内存状态GlobalMemorySlatus(&status);outfile«,'dwAvailPageFile,'«,\t'«status.dwAvailPageFile«endl;outfile«,,dwAvailPhys,'«,\t,«status.dwAvailPhys«endl;outfile«,'dwAvailVirtuar,«,\t,«status.dwAvailVirtual«endl;outfile«,'dwLength,'«'\t,«status.dwLength«endl;outfile«,'dwMemoryLoad,,«,\t,«status.dwMemoryLoad«endl;outfile«,'dwTotalPageFile',«'\t,«status.dwTotalPageFile«endl;outfile«,'dwTotalPhys,'«,\t'«status.dwTotalPhys«endl;outfile«,'dwTotalVirtual"«,\t'«status.dwTotalVirtual«endl;outfile«"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"v<en亜〃以下一段显示内存基本信息,每次操作后内存基本信息不变〃如要查看内存基本信息,可以取消注释MEMORY_BASICJNFORMATIONmem;〃内存基本信息VirtualQuery(info.lpMinimumApplicationAddress,&mem,sizeof(MEMORY_BASIC_INFORMATION));outfile«,'AllocationBase,,«'\t,«mem.AllocationBase«endl;outfile«,'AllocationProtectM«'\t,«mem.AllocationProtect«endl;outfile«',BaseAddressM«,\t,«mem.BaseAddress«endl;outfile«,'Protect,'«,\t'«mem.Protect«endl;outfile«,'RegionSize,,«'\t,«mem.RegionSize«endl;outfile«,'State,,«,\t,«mem.State«endl;outfile«,,Type,'«,\t,«mem.Type«endl;outfile<<”ー〜〜〜〜〜ーー〜〜——.〜・«~~〜〜〜ー〜ー〜一ー〜〜〜〜〜〜〜《—ー〜〜〜〜〜〜〜〜ーー〜ー〃释放信号量通知allocator可以执行下一次内存分配活动ReleaseSemaphore(allo,1,NULL);)return0;)voidAllocator。〃模拟内存分配活动的线程(tracetraceArray[5];intindex=0;FILE*file;file=fopen("〇pfile",“rb");〃读入文件operationop;SYSTEMJNFOinfo;DWORDtemp;GetSystemInfo(&info);for(inti=0;i<30;i++){WaitForSingleObject(allo,INFINITE);〃等待tracker打印结束的信号量cout«i«':';fread(&op,sizeof(operation),1,file);Sleep(op.time);〃执行时间,如果想在指定时间执行可以取消注释GetSystemInfo(&info);switch(tection)〃根据文件内容确定权限{case0:index=0;temp=PAGE_READONLY;break;}case1:temp=PAGE_READWRITE;break;temp=PAGE_EXECUTE;break;temp=PAGE_EXECUTE_READ;break;temp=PAGE_EXECUTE_READWRITE;break;default:temp=PAGE_READONLY;)switch(op.oper)Icase〇:〃保留一个区域(cout«"reservenowH«endl;traceArray[index].start=VirtualAlloc(NULL,op.block*infb.dwPageSize,MEM_RESERVE,PAGE_NOACCESS);traceArray[index++].size=op.block*info.dwPageSize;cout«Hstartingaddress:*'«traceArray[index-1].start«'\t'«',size:,,«traceArray[index-1].size«endl;break;)case1:〃提交一个区域{cout«,,commitnowH«endl;traceArray[index].start=VirtualAlloc(traceArrayfindex].start,traceArray[index].size,MEM_COMMIT,temp);index++;cout«nstartingaddress:'1«traceArray[index-l].start«'\t'«"size:"«traceArray[index-l].size«endl;break;)〃锁ー个区域cout«"locknow*'«endl;cout«nstartingaddress:H«traceArray[index].start«
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年企业级计算机软件使用协议版B版
- 2024年度先进生产设备采购及专业化安装服务协议版
- 2024年度农业企业社会责任报告编制与发布合同
- 2024工程劳务居间的合同
- 2024年委托开发合同:手机应用程序定制开发要求
- 2024实战型工程招投标与协议管理细则样本版B版
- 2024医疗器械销售合作协议
- 2024专业带驾车辆租赁服务协议模板版B版
- 2024年婚前协议书:关于双方职业发展和事业规划的约定
- 2024年产教深度合作教育项目校企框架合同版B版
- 两家公司合作合同范本关于项目合作细节
- 2024年度德佑房屋买卖合同范本
- 大型设备安装合同模板
- 2024冬季安全十防措施专题培训
- 33 《鱼我所欲也》对比阅读-2024-2025中考语文文言文阅读专项训练(含答案)
- 《中华民族共同体概论》考试复习题库(含答案)
- (完整版)电工基础学习PPT课件
- 分数乘法专项练习题200(精编版)
- 火灾自动报警系统操作规程全文
- 教育信息化十年发展规划
- 北京四中网校四重五步学习法
评论
0/150
提交评论