《操作系统》实验报告
年级、专业、班级 实验题目 实验时间 实验成绩 姓名 内存管理 实验地点 实验性质 □验证性 □设计性 ■综合性 教师评价: □算法/实验过程正确;□源程序/实验内容提交 □程序结构/实验步骤合理; □实验结果正确; □语法、语义正确; □报告规范; 其他: 评价教师签名: 一、实验目的 理解操作系统关于内存管理的一些方法。 熟悉常用的页面置换策略的基本原理。 通过模拟实验分析不同置换策略的性能差异。 二、实验项目内容 在linux环境下用C语言编写程序,模拟进程在执行时内存中的页框置换过程。 读取文件中给定进程访问的逻辑页号序列,其中单号学号同学做workload1~6,双号学号同学做workload7~12。 设置内存页框大小为N(N分别取值为100,500,1000,2000,5000)。 采用3种不同的页面置换算法:FIFO,CLOCK,LRU。 画图比较不同页面置换算法对应的缺页率并分析原因(固定页框大小为1000)。 画图比较不同内存页框大小对应的缺页率并分析原因(固定置换算法为LRU)。 分析不同workload平均缺页率存在差异产生的原因。 三、实验过程或算法(源程序) 详细代码见代码附件,以下为程序基本思路 : 采用数组int page[N]模拟虚拟页框,读取文件中的虚拟地址做整除N即可得出虚拟页框号,若命中则hitTime++,否则根据先后顺序分别放入虚拟页框中,此时missTime++;当虚拟页框满后需要进行替换操作,替换int page[N]中最靠前的一项(即先进入的页框),替换项用模拟的指针ptr代表 : 方式同,不同点在于虚拟页框满后将最先进入的或者最近未使用的一项换出,方法体现在若命中过,则将被命中的页框排到int page[N]的末尾,其他项依次前移,下次的被替换项依旧是数组中的第一号元素 : 用一个结构体定义了带使用位的元素,当虚拟页框为空时依次填入元素并将使用位置1,当命中后也将使用位置1,用一个模拟指针ptr代表当前指针指向的位置,当需要替换页框时从指针指向位置向后查找使用位为0的第一个元素,在此过程中遇到使用位为1的元素将使用位置0,替换后指针继续指向当前元素位置不变 四、实验结果及分析和(或)源程序调试过程 代码: : #include<> um==temp) } if(flag==1)um=temp; } else { } while(page[ptr%N].useFlag!=0) { } page[ptr%N].num=temp; page[ptr%N].useFlag=0; ptr++; page[count%N].useFlag=1; ptr++; { } page[i].useFlag=1; ptr++; hitTime++; flag=1; break; } : #include<> //FIFO } } count++; fclose(fp); float rate; rate=missTime/(float)count; printf(\ printf(\ printf(\ printf(\ printf(\ } return 0; #define N 1000 int page[N]={0}; int main() { char fileName[][15]={\1\ int fileNum; for(fileNum=0;fileNum<6;fileNum++) { FILE* fp; int missTime=0; int hitTime=0; int count=0; int ptr=0; if((fp=fopen(fileName[fileNum],\ { } while(!feof(fp)) { int temp; int flag=0; fscanf(fp,\ temp/=N; int i; for(i=0;i