资源描述:
《操作系统实验报告——存储管理》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、《存储管理》实验报告实验序号:02 实验项目名称:存储管理学 号姓 名专业、班实验地点指导教师时间一、实验目的1.理解内存分配原理,特别是页式虚拟内存分配(4.4请求分页存储管理)方法。2.了解Windows2000/XP的内存管理机制,掌握页式虚拟存储技术。3.掌握Windows2000/XP中内存管理基本API的使用方法。二、实验环境Windows2000/XP+VC6.0三、实验内容1、在程序中,用一个线程模拟各种虚存活动,如虚存的保留、提交等。2、用一个监控线程实时监控系统当前的虚存操作,并在控制台输出
2、虚存操作信息。要求监控线程与模拟虚存活动的线程保持同步,即模拟线程出现模拟活动,监控线程应立即监控到该活动的信息。3、在用监控线程监控内存活动的同时,汇报整个存储系统的使用情况。四、设计思路和流程框图1.程序结构(1)main函数用_beginthreadex函数启动两个线程。(2)simulator线程(模拟内存分配)随机地进行各种虚存操作,包括虚存的保留与提交、虚存的注销、虚存的注销并释放虚存空间、改变虚拟内存页的保护、锁定虚拟内存页和虚存的保留。每个活动完成后,程序的全局变量Actnum被设置为一个特定的整数值。线程随即被阻塞
3、直至Actnum被置回零。(3)inspector线程(跟踪内存分配活动)该线程通过Actnum的值获得上一个虚存动作的类型,并通过BASE_PTR的值获得该动作发生的虚存地址,并输出相关信息。最后,设置Actnum为零,通知模拟线程继续下一次动作,实现两线程的同步。程序的主线程派生上述两个主要线程后,就处于等待状态。用户此时可以观察模拟和监控线程的活动,也可以键入任意键结束程序的运行。2.数据结构(1)指示器ActnumActnun初值为0。Actnun为0时,模拟线程处于活动状态,在一个随机数的控制下,模拟线程进行各种虚存活动。
4、当一个模拟活动成功完成,模拟线程会设置指示器Actnum为一个非0的值并自动阻塞直到Actnun被置回为0。Actnun为非0时,监控线程处于活动状态,并通过Actnum的值确定动作的类型,并通过全局变量BASE_PTR获得该动作发生的虚存地址。监控线程完成对该动作的监控后,再设置Actnun为0,然后模拟线程再开始活动。(2)地址指针BASE_PTR这个指针在进行虚存分配时用于记录返回的虚存的起始地址。它是由虚存分配函数VirtualAlloc来赋予虚存的起始地址的。五、源程序(含注释)清单#include#
5、include#include#includeunsigned_stdcallsimulator(void*);unsigned_stdcallinspector(void*);LPVOIDBASE_PTR;intActnum=0;//主函数,主要是用于启动用于模拟虚存活动和进行监控的两个线程;intmain(intargc,char*argv[]){unsignedThreadID[2];_beginthreadex(NULL,0,simulator,NULL,0,&Thre
6、adID[0]);_beginthreadex(NULL,0,inspector,NULL,0,&ThreadID[1]);getchar();//输入回车即可终止程序;return0;}//模拟一系列的虚存活动,作为一个独立的线程运行;unsigned_stdcallsimulator(void*){DWORDOldProtect;intrandnum;printf("Nowthesimulatorprocedurehasbeenstarted.");//产生一个随机数种子;srand((unsigned)time(NULL)
7、);//在一个死循环中,用随机数控制,不断进行虚存操作活动;while(1){Sleep(500);//控制整个模拟和监控的速度;while(Actnum!=0){Sleep(500);//等待,直到监控线程捕捉到上一个模拟动作后再继续下一个动作;}randnum=7&rand();switch(randnum)//注意各个动作中的虚存指针均使用BASE_PTR;它在过程中由虚存分配//函数动态调整,如果某动作不成功,则将不会被监控线程监控到;{case0:if(BASE_PTR=VirtualAlloc(NULL,1024*32,
8、MEM_RESERVE
9、MEM_COMMIT,PAGE_READWRITE)){Actnum=1;//虚存的保留与提交;}break;case1:if(VirtualFree(BASE_PTR,1024*32,MEM_DECOMMIT