实验4 内存管理.doc
《实验4 内存管理.doc》由会员分享,可在线阅读,更多相关《实验4 内存管理.doc(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流实验4 内存管理.精品文档.实验4 内存管理学校:FJUT 学号:3131903229 班级:计算机1302 姓名:姜峰注:其中LFU和NRU算法运行结果可能与其他人不同,只是实现方式不同,基本思路符合就可以。一. 实验学时与类型学时:2,课外学时:自定实验类型:设计性实验二. 实验目的模拟实现请求页式存储管理中常用页面置换算法,理会操作系统对内存的调度管理。三. 实验内容要求:各算法要给出详细流程图以及执行结果截图。假设有一程序某次运行访问的页面依次是:0,1,2,4,3,4,5,1,2,5,1,2,3,4,5,6,请给出采用下列各页面置换
2、算法时页面的换进换出情况,并计算各调度算法的命中率(命中率=非缺页次数/总访问次数),初始物理内存为空,物理内存可在420页中选择。(1) FIFO:最先进入的页被淘汰;(2) LRU:最近最少使用的页被淘汰;(3) OPT:最不常用的页被淘汰;(选做)(4) LFU:访问次数最少的页被淘汰(LFU)。(选做) 源代码:#include #include #include #include #define MAXNUM 100struct Phy_Memory /定义一个物理内存结构体 char Page; int time;char *OutPut;struct Phy_Memory *Ph
3、y_Page;void Print(char *PageStr,int Phy_PageNum,int absence) /打印图解函数 int i,j; for(i=0;istrlen(PageStr);i+)printf(%c ,*(PageStr+i);printf(n); for(i=0;istrlen(PageStr);i+)printf(-);printf(n); for(i=0;iPhy_PageNum;i+) for(j=0;jstrlen(PageStr);j+) printf(%c ,*(OutPut+i*strlen(PageStr)+j); printf(n); pri
4、ntf(缺页数为:%dn,absence); printf(总访问次数为:%dn,strlen(PageStr); printf(缺页率为%.2fn,(double)absence/strlen(PageStr);int IsExist(char *Temp,int Phy_PageNum) /判断某页面是否存在于物理内存中 int i; for(i=0;iPage!=*Temp;i+); if(iPhy_PageNum) return i+1; /找到返回此页面位置加1 return 0;void FIFO(char *PageStr,int Phy_PageNum) /利用时间计数器方式,
5、还可以用栈来实现 char *Temp=PageStr; /定义Temp指针指向PageStr首地址 int i,num,location,absence=0; int Flag=0; /定义一个标记变量,标记插入位置 while(*Temp!=0) /页面未访问完 num=0; if(FlagPage=*Temp; Flag+;absence+; else /若物理内存已满 if(!IsExist(Temp,Phy_PageNum) /若此页面未被访问 for(i=0;iFlag;i+) /找到驻留时间最长的页 if(numtime) location=i;num=(Phy_Page+i)-
6、time; (Phy_Page+location)-Page=*Temp; (Phy_Page+location)-time=0; absence+; for(i=0;itime+; *(OutPut+i*strlen(PageStr)+(Temp-PageStr)=(Phy_Page+i)-Page; Temp+; Print(PageStr,Phy_PageNum,absence);void LRU(char *PageStr,int Phy_PageNum) /依旧利用计数器方式,也可用栈来实现 char *Temp=PageStr; /定义Temp指针指向PageStr首地址 int
7、i,num,location,absence=0; int Flag=0; /定义一个标记变量,标记插入位置 while(*Temp!=0) /页面未访问完 num=0; if(Flagtime=0; else /若此页面未被访问 (Phy_Page+Flag)-Page=*Temp; Flag+;absence+; else /若物理内存已满 if(location=IsExist(Temp,Phy_PageNum) /若此页面已被访问 (Phy_Page+location-1)-time=0; else /若此页面未被访问 for(i=0;iFlag;i+) /找到最近最久未使用的页 if
8、(numtime) location=i;num=(Phy_Page+i)-time; (Phy_Page+location)-Page=*Temp; (Phy_Page+location)-time=0; absence+; for(i=0;itime+; *(OutPut+i*strlen(PageStr)+(Temp-PageStr)=(Phy_Page+i)-Page; Temp+; Print(PageStr,Phy_PageNum,absence );int Distance(char *PageStr,char *Temp,char Now) /计算距离函数(OPT算法中使用)
9、int i; for(i=1;*(Temp+i)!=0&*(Temp+i)!=Now;i+); if(*(Temp+i)!=0)return i; return INT_MAX;void OPT(char *PageStr,int Phy_PageNum) /实际中无法实现,知道访问串后顺序遍历 char *Temp=PageStr; /定义Temp指针指向PageStr首地址 int i,num,Size,location,absence=0; int Flag=0; /定义一个标记变量,标记插入位置 while(*Temp!=0) /页面未访问完 num=0; if(FlagPage=*T
10、emp; Flag+;absence+; else /若物理内存已满 if(!IsExist(Temp,Phy_PageNum) /若此页面未被访问 for(i=0;iPage); /调用distance函数返回值为与当前位置物理页面相同页号的距离 if(numPage=*Temp;absence+; for(i=0;iPage; Temp+; Print(PageStr,Phy_PageNum,absence);char *Create(char *PageStr) /根据访问串建立计数字符数组(LFU算法使用) int i,j,Size,Num=0; char *Temp1,*Temp2;
11、 int length=strlen(PageStr); char *NowPage=(char *)malloc(length); for(i=0;ilength;i+) *( NowPage + i ) = *( PageStr + i ); Temp1 = Temp2 = NowPage; while(Temp1-NowPage)=length+1) /去除访问串中重复串 if(*Temp1!=0) for(Temp2=Temp1+1;(Temp2-NowPage)=length+1;Temp2+) if(*Temp1=*Temp2) *Temp2=0;Num+; Temp1+; Siz
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验4 内存管理 实验 内存 管理
限制150内