第1页年级2013专业软件工程班级组号实验室9#205日期2015/6/17实验名称实验三虚拟内存管理实验内容1局部性原理演示(数组清零)(操作系统观察级)2页面置换算法模拟演示(算法仿真实现级)3实际系统内存分配演示(Linux,Windows平台)(操作系统观察级)小组成员姓名学号组内分工自我评分教师评分实验认真实验严谨小组成绩评定教师签名:年月日第2页实验分项1局部性原理演示(数组清零)(操作系统观察级)实验目的学习并理解程序的局部性原理实验要求具体题目局部性原理演示(数组清零)系统平台:WindowsXP系统实验原理步骤(算法流程)数组清零操作系统支持:Windows、Linux所属类别:数组操作利用双重的for循环将指定的二维数组变量内的所有成员值全部设置为零,不影响数组的维定义信息。语法:无返回值数组清零(数值数组变量)源代码如下:#includecstdlib#includeiostream#includetime.h#includewindows.h#defineK4096usingnamespacestd;inta[K][K];voidline(){inti,j;for(i=0;iK;i++)for(j=0;jK;j++)a[i][j]=0;return;}第3页voidrow(){inti,j;for(i=0;iK;i++)for(j=0;jK;j++)a[j][i]=0;return;}intgettime(){SYSTEMTIMEt;GetLocalTime(&t);returnt.wSecond*1000+t.wMilliseconds;}intmain(intargc,char*argv[]){inti;intt1,t2;t1=gettime();for(i=0;i10;i++)line();t2=gettime();cout*********数组清零*********\n;cout\n按行清零耗费时间为:t2-t1msendl;cout\n-------------------------\nendl;t1=gettime();for(i=0;i10;i++)row();t2=gettime();cout按列清零耗费时间为:t2-t1msendl;system(PAUSE);returnEXIT_SUCCESS;}第4页实验结果及分析实验结果截图:linux下:#includeiostream#includestdio.h#includestdlib.h#includeunistd.h#includesys/time.h#defineK4096usingnamespacestd;inta[K][K];voidline(){inti,j;for(i=0;iK;i++)for(j=0;jK;j++)a[i][j]=0;return;}voidrow(){inti,j;for(i=0;iK;i++)for(j=0;jK;j++)a[j][i]=0;return;}第5页intgettime(){structtimevaltv;structtimezonetz;gettimeofday(&tv,&tz);returntv.tv_sec*1000+tv.tv_usec/1000;}intmain(intargc,char*argv[]){inti;intt1,t2;t1=gettime();for(i=0;i10;i++)line();t2=gettime();cout*********数组清零*********\n;cout\n按行清零耗费时间为:t2-t1msendl;cout\n-------------------------\nendl;t1=gettime();for(i=0;i10;i++)row();t2=gettime();cout按列清零耗费时间为:t2-t1msendl;return0;}第6页心得体会通过这个实验,对Windows内存管理机制了解清楚,有./效的利用C++内存函数管理和使用内存。假设数据存在物理内存中,系统没有RAM页面后,会将这个页面暂时写进虚拟内存页文件中,这样来回的倒腾系统会很慢;如果那一页数据已经不需要的话,系统可以直接使用。当程序需要它那一页时,系统会分配另一页给它。第7页实验分项2页面置换算法模拟演示(算法仿真实现级)实验目的通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程。实验要求具体题目页面置换算法模拟演示系统平台windows操作系统实验原理步骤(算法流程)设计一个虚拟存储区和内存工作区,并使用下述算法计算访问命中率。1、先进先出的算法(FIFO)2、最近最久未使用算法(LRU)是否输入页面访问序列取访问页号查页表是否缺页置缺页标记flag为“*”按照各自算法淘汰页面调入所访问页面第8页1、先进先出法(FIFO)否是2.最近最久没使用(LRU)否入口查询指针前进一步,指向下一个页面置页面访问时间+1页面访问时间是否最大选择该页面淘汰返回进入查询指针前进一步,指向下一页面个页面先前访问的页面的时间t++;前面已访问过此页面字段t=max?返回选择该页面淘汰第9页实验部分代码:1、FIFO算法#includestdio.h#definen20#definem4voidmain(){intym[n],i,j,q,mem[m]={-1,-1,-1,-1},table[m][n];charflag,f[n];printf(请输入页面访问序列\n);for(i=0;in;i++)scanf(%d,&ym[i]);printf(\n);for(i=0;in;i++)//查页表,看是否缺页{q=0;while((ym[i]!=mem[q])&&(q!=m))q++;if(q==m)flag='*';//缺页,则置标志flag为‘*’elseflag='';if(flag=='*'){for(j=m-1;j0;j--)//淘汰最先调入的页面调入当前访问的mem[j]=mem[j-1];mem[0]=ym[i];}for(j=0;jm;j++)table[j][i]=mem[j];f[i]=flag;}printf(输出结果为下表(-1代表为空,*代表有缺页):\n);for(i=0;in;i++)printf(“%3d”,ym[i]);printf(“\n”);for(i=0;i=n;i++)printf(“%s”,“---”);printf(“\n”);for(i=0;im;i++){for(j=0;jn;j++)printf(%3d,table[i][j]);printf(\n);}for(i=0;in;i++)printf(%3c,f[i]);printf(”\n”);}第10页2、LRU算法#includestdio.h#definen20#definem5voidmain(){intym[n],i,j,q,mem[m]={-1,-1,-1,-1,-1},table[m][n];charflag,f[n];printf(请输入页面访问序列\n);for(i=0;in;i++)scanf(%d,&ym[i]);printf(\n);for(i=0;in;i++)//查页表,看是否缺页{q=0;while((ym[i]!=mem[q])&&(q!=m))q++;if(q==m)flag='*';//缺页,则置标志flag为‘*’elseflag='';if(qm){for(j=q;j0;j--)mem[j]=mem[j-1];}else{for(j=q-1;j0;j--)mem[j]=mem[j-1];}mem[0]=ym[i];for(j=0;jm;j++)table[j][i]=mem[j];f[i]=flag;}printf(输出结果为下表(-1代表为空,*代表有缺页):\n);for(i=0;in;i++)printf(“%3d”,ym[i]);printf(“\n”);for(i=0;i=n;i++)printf(“%s”,“---”);printf(“\n”);for(i=0;im;i++){for(j=0;jn;j++)printf(%3d,table[i][j]);printf(\n);}for(i=0;in;i++)printf(%3c,f[i]);printf(“\n”);}第11页实验结果及分析1:2:心得体会通过本次实验,我明白如果一个经常使用的页面被置换出去,很有可能很快又要被调入内存,带来不必要的额外开销。页面置换算法的优劣将会影响到虚拟存储系统的性能,进而影响到整个操作系统的性能。第12页实验分项3实际系统内存分配演示(Linux,Windows平台)(操作系统观察级)实验目的学习并理解实际系统内存分配原理实验要求具体题目实际系统内存分配演示(Linux,Windows平台)(操作系统观察级)系统平台WindowsXP系统实验原理步骤(算法流程)内存管理是计算机系统以一种优化性能的方式,在需要内存的不同进程之间将有限的内存进行分配的过程,执行这种任务的通用技术叫做虚拟内存技术。模拟操作系统在内存的分配以及回收所用内存的运行过程,采用首次适应法来进行,本程序运行实际上不用输入测试数据,它能利用随机函数生成测试数据,对于用户来讲,可以直接观察运行结果。源代码如下:#includestdio.h#includestdlib.h//操作系统首次合并算法内存实现mallocfree函数intg_MemoryAllocLen=10;typedefstructdouble_link{structdouble_link*front;structdouble_link*rear;intsize;intstate;//内存空间状态0空闲1占用}doublelink_ST,*lpdoublelink_ST;/******************************************************************函数名称:Createdoublelis*功能描述:创建内存节点*输入参数:lpdoublelink_SThead*输出参数:head*返回值:0*****************************************************************/doublelink_ST*Init_doublelinklist(lpdoublelink_SThead){head=(lpdoublelink_ST)malloc(sizeof(doublelink_ST));head-front=NULL;head-rear=NULL;head-size=1;第13页head-state=1;returnhead;}/******************************************************************函数名称:Createdoublelis*功能描述:创建长度为g_MemoryAllocLen的内存节点链表*输入参数:void*输出参数:无*返回值:0*****************************************************************/voidCreatedoublelist(lpdoublelink_SThead,intspace[]){lpdoublelink_STp=head;for(inti=0;ig_MemoryAllocLen;i++){lpdoublelink_STs=(lpdoublel