重庆大学操作系统实验4报告书.docx
- 文档编号:29553553
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:13
- 大小:225.83KB
重庆大学操作系统实验4报告书.docx
《重庆大学操作系统实验4报告书.docx》由会员分享,可在线阅读,更多相关《重庆大学操作系统实验4报告书.docx(13页珍藏版)》请在冰豆网上搜索。
重庆大学操作系统实验4报告书
《操作系统》实验报告
年级、专业、班级
实验题目
内存管理
实验时间
实验地点
实验成绩
实验性质
□验证性□设计性■综合性
教师评价:
□算法/实验过程正确;□源程序/实验内容提交□程序结构/实验步骤合理;
□实验结果正确;□语法、语义正确;□报告规范;
其他:
评价教师签名:
1、实验目的
理解操作系统关于内存管理的一些方法。
熟悉常用的页面置换策略的基本原理。
通过模拟实验分析不同置换策略的性能差异。
2、实验项目内容
在linux环境下用C语言编写程序,模拟进程在执行时内存中的页框置换过程。
读取文件中给定进程访问的逻辑页号序列,其中单号学号同学做workload1~6,双号学号同学做workload7~12。
设置内存页框大小为N(N分别取值为100,500,1000,2000,5000)。
采用3种不同的页面置换算法:
FIFO,CLOCK,LRU。
画图比较不同页面置换算法对应的缺页率并分析原因(固定页框大小为1000)。
画图比较不同内存页框大小对应的缺页率并分析原因(固定置换算法为LRU)。
分析不同workload平均缺页率存在差异产生的原因。
三、实验过程或算法(源程序)
详细代码见代码附件,以下为程序基本思路
FIFO.c:
采用数组intpage[N]模拟虚拟页框,读取文件中的虚拟地址做整除N即可得出虚拟页框号,若命中则hitTime++,否则根据先后顺序分别放入虚拟页框中,此时missTime++;当虚拟页框满后需要进行替换操作,替换intpage[N]中最靠前的一项(即先进入的页框),替换项用模拟的指针ptr代表
LRU.c:
方式同FIFO.c,不同点在于虚拟页框满后将最先进入的或者最近未使用的一项换出,方法体现在若命中过,则将被命中的页框排到intpage[N]的末尾,其他项依次前移,下次的被替换项依旧是数组中的第一号元素
CLOCK.c:
用一个结构体定义了带使用位的元素,当虚拟页框为空时依次填入元素并将使用位置1,当命中后也将使用位置1,用一个模拟指针ptr代表当前指针指向的位置,当需要替换页框时从指针指向位置向后查找使用位为0的第一个元素,在此过程中遇到使用位为1的元素将使用位置0,替换后指针继续指向当前元素位置不变
四、实验结果及分析和(或)源程序调试过程
代码:
CLOCK.C:
#include
//CLOCK
#defineN1000
structframe
{
intnum;
intuseFlag;
};
structframepage[N];
intmain()
{
charfileName[][15]={"workload7","workload8","workload9","workload10","workload11","workload12"};
intfileNum;
for(fileNum=0;fileNum<6;fileNum++)
{
FILE*fp;
intmissTime=0;
inthitTime=0;
intcount=0;
intptr=0;
if((fp=fopen(fileName[fileNum],"r"))==NULL)
{
printf("Thefilecannotbeoppen\n");
return-1;
}
while(!
feof(fp))
{
inttemp;
intflag=0;
fscanf(fp,"%d",&temp);
temp/=N;
inti;
for(i=0;i { if(page[i].num==temp) { page[i].useFlag=1; ptr++; hitTime++; flag=1; break; } } if(flag==1)//hit { count++; continue; } else//miss { missTime++; if(missTime { page[count%N].num=temp; page[count%N].useFlag=1; ptr++; } else { while(page[ptr%N].useFlag! =0) { page[ptr%N].useFlag=0; ptr++; } page[ptr%N].num=temp; } } count++; } fclose(fp); floatrate; rate=missTime/(float)count; printf("%s: \n",fileName[fileNum]); printf("Pagefaulttime: %d\n",missTime); printf("Pagehittime: %d\n",hitTime); printf("Total: %d\n",count); printf("Rateoffault=%f\n",rate); } return0; } FIFO.C: #include //FIFO #defineN1000 intpage[N]={0}; intmain() { charfileName[][15]={"workload7","workload8","workload9","workload10","workload11","workload12"}; intfileNum; for(fileNum=0;fileNum<6;fileNum++) { FILE*fp; intmissTime=0; inthitTime=0; intcount=0; intptr=0; if((fp=fopen(fileName[fileNum],"r"))==NULL) { printf("Thefilecannotbeoppen\n"); return-1; } while(! feof(fp)) { inttemp; intflag=0; fscanf(fp,"%d",&temp); temp/=N; inti; for(i=0;i { if(page[i]==temp) { hitTime++; flag=1; break; } } if(flag==1)//hit { count++; continue; } else//miss { missTime++; if(missTime page[count%N]=temp; else { page[ptr%N]=temp; ptr++; } count++; } } fclose(fp); floatrate; rate=missTime/(float)count; printf("%s: \n",fileName[fileNum]); printf("Pagefaulttime: %d\n",missTime); printf("Pagehittime: %d\n",hitTime); printf("Total: %d\n",count); printf("Rateoffault=%f\n",rate); } return0; } LRU.C: #include //LRU #defineN1000 intpage[N]={0}; intmain() { charfileName[][15]={"workload7","workload8","workload9","workload10","workload11","workload12"}; intfileNum; for(fileNum=0;fileNum<6;fileNum++) { FILE*fp; intmissTime=0; inthitTime=0; intcount=0; intptr=0; if((fp=fopen(fileName[fileNum],"r"))==NULL) { printf("Thefilecannotbeoppen\n"); return-1; } while(! feof(fp)) { inttemp; intflag=0; fscanf(fp,"%d",&temp); temp/=N; inti; for(i=0;i { if(page[i]==temp) { flag=1; hitTime++; intj; intc=page[i]; for(j=i;j { page[j]=page[j+1]; } page[N-1]=c; break; } } if(flag==1)//hit { count++; continue; } else//miss { missTime++; if(missTime page[count%N]=temp; else { intj; for(j=0;j { page[j]=page[j+1]; } page[N-1]=temp; } count++; } } fclose(fp); floatrate; rate=missTime/(float)count; printf("%s: \n",fileName[fileNum]); printf("Pagefaulttime: %d\n",missTime); printf("Pagehittime: %d\n",hitTime); printf("Total: %d\n",count); printf("Rateoffault=%f\n",rate); } return0; } 结果截图: 三个程序运行结果: 图表: 三种算法: 不同叶框大小LRU算法: 不同workload产生不同缺页率的原因主要在于每个workload中调用同一页的次数不同,缺页次数与替换次数各有不同,导致的缺页率也会不同
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 重庆大学 操作系统 实验 报告书