操作系统课程设计老化算法模拟分页系统.docx
- 文档编号:3705994
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:17
- 大小:110.47KB
操作系统课程设计老化算法模拟分页系统.docx
《操作系统课程设计老化算法模拟分页系统.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计老化算法模拟分页系统.docx(17页珍藏版)》请在冰豆网上搜索。
操作系统课程设计老化算法模拟分页系统
老化算法模拟分页系统
摘要
设计与编写程序使用老化算法模拟一个分页系统。
页面访问序列从文件(文本文件)中读取。
对于一个给定的输入文件,列出每1000个内存访问中发生缺页中断的数目。
目录
摘要………………………………………………………………I
1总体设计………………………………………………………1
1.1概要设计………………………………………………………1
2详细设计………………………………………………………2
2.1模块设计……………………………………………………2
2.1.1主函数模块………………………………………………2
2.1.2修改R位模块……………………………………………3
2.1.3读取文件模块……………………………………………3
2.1.4判定缺页中断模块………………………………………4
2.1.5读取R位模块……………………………………………6
2.2流程图………………………………………………………7
3调试与测试……………………………………………………8
3.1调试过程中的问题………………………………………………8
3.2测试结果………………………………………………………9
参考文献………………………………………………………10
心得体会………………………………………………………11
教师评语………………………………………………………12
附录……………………………………………………………13
1总体设计
1.1概要设计
1.编写一个程序,它使用老化算法模拟一个分页系统。
页帧的数量是参数。
页面的访问序列从文件中读取。
对于一个给定的输入文件。
列出每1000个内存访问中发生缺页中断的数目,它是可用页帧数的函数。
(教材P141,41题);
2.一个简单的典型测试数据:
分配的内存帧数:
3
进程页访问序列:
0、1、2、3、4、1、2、0、1、2、3、4、0、1、2、3;
3.程序中相对地址空间为10个页。
程序设计作为参数输入,假设页帧为3块,初始均为空;程序设计时作为参数输入,时钟周期为10个数;
4.按要求设计测试比较更大数据量的页面访问。
2详细设计
2.1模块设计
整个程序运用老化算法并使用VisualStudio2008开发平台。
整个程序中分为读取文件,修改R位,读取R位,判断缺页中断和主函数。
2.1.1主函数模块
main()程序流程控制和控制时钟周期以及最终的结果打印。
voidmain(){
charch[Size];
read(ch);
inti=0;
while('0'<=ch[i]&&ch[i]<='9'){
printf("%c",ch[i]);
//写入帧并判断缺页中断
dauflt(ch[i]);
//修改R位
change(ch[i]);
i++;
//时钟周期为10个数
if(i%10==0){
printf("灬灬灬灬灬灬灬灬灬灬灬灬灬灬\n");
printf("\n");
//写入计数器
readch();
//清空R位
for(inti=0;i<10;i++)
R[i]=0;
}
}
printf("\n计数器最终情况:
\n");
for(intj=0;j { printf("\t\t"); for(intk=0;k<5;k++) printf("%d",count[k][j]); printf("\n"); } printf("缺页中断数: \t%d\n",fault_num); } 2.1.2修改R位模块 change(charc)将读入的字符逐一进行判断并修改其对应的R位上的值,当R位上为0则改为1,1则无需做任何修改。 //读取R位 voidreadch(){ charch; for(inti=0;i<5;i++){ ch=frame[i]; //获取帧对应的R位,并写入计数器 count[i][row]=R[ch-48]; } row++; } 2.1.3读取文件模块 read(charch[])判断文件是否存在,并将data.txt的内容读取到字符数组ch[]中。 //读取文件内容 voidread(charch[]) { inti=0; file=fopen("date.txt","rb"); if(file==NULL) printf("cannotopenthedate.txtfile"); while(! (feof(file))) {ch[i]=getc(file); i++; } fclose(file); } 2.1.4判定缺页中断模块 dauflt(charc)每当读入一个文件首先在frame[4]判断是否有空位,有则直接补到空位处并引发缺页中断;无则查看计数器,选择最小计数器对应的帧来存放,并同样引发缺页中断;另外,当此数在帧内存在时,无需做任何操作。 //判断缺页中断 voiddauflt(charc){ inth=0; intmin=0; intcounts[3]={0}; //判断是否有空位 for(h=0;h<3;h++){ if(frame[h]==c) break; if(0>frame[h]||frame[h]<9){ frame[h]=c; fault_num++; printf("丨"); break; } } //无空位的情况 if(h==3){ //判断帧内是否有这个数 for(intp=0;p<3;p++){ if(frame[p]==c) break; } //帧内无这个数 if(p==3){ //发生缺页中断 fault_num++; printf("丨"); //统计计数器 for(intk=0;k<3;k++){ for(intj=0;j counts[k]+=count[k][j]; } } //比较计数器,选择最小器 intminlin=counts[0]; for(intj=1;j<3;j++){ if(minlin>counts[j]){ min=j; minlin=counts[j]; } } frame[min]=c; } } //输出当前帧内情况 printf("\t帧内情况: "); for(intz=0;z<3;z++){ printf("%c\t",frame[z]); } printf("\n"); } 2.1.5读取R位模块 readch()每当时钟周期到时,调用此函数将帧frame[4]内的值写入计数器count[4][row]中,row表示当前处于第几个时钟周期。 //读取R位 voidreadch(){ charch; for(inti=0;i<3;i++){ ch=frame[i]; //获取帧对应的R位,并写入计数器 count[i][row]=R[ch-48]; } row++; } 2.2流程图 不成功 成 功 3调试与测试 3.1调试过程中的问题 读取文件时候访问不了数据,页面访问序列存放到文件data.txt中,该文件放入工程目录下,然后将文件中的序列读入一个数组中。 修改R位,每个页设置一个R位(访问位),取值为0(表示未访问),取值为1,当在一个时钟滴答内访问该页时,置为1。 每个时钟滴答开始时置所有页的R位为0。 3.2测试结果 data.txt中的数据: 结果: 参考文献 [1]塔嫰鲍姆: 《现代操作系统》[M],机械工业出版社2009.7,第99页。 心得体会 每一次课程设计度让我学到了在平时课堂不可能学到的东西。 所以我对每一次课程设计的机会都非常珍惜。 不一定我的课程设计能够完成得有多么完美,但是我总是很投入的去研究去学习。 一个多月的实验就这样到了尾声,我想我还学到了一些东西。 学习这门课之前不知道上这门课的真正用途在哪里,现在才知道操作系统是那么有用,电脑中一重之重的基础软件,当然非常复杂,这次的实验我是做第三个题目,而这个程序题目要求也并非真正的分页系统,而是模拟老化算法的分页系统,所以做起来难度并非很高。 教师评语 #include #include #include FILE*file; #defineSize1000 #defineNum10//缺页中断数 staticintfault_num=0;//帧 staticcharframe[3];//访问位 staticintR[10]={0};//计数器 staticintcount[3][1000]={0};//计数器的列数 staticintrow=0; //读取文件内容 voidread(charch[]) { inti=0; file=fopen("date.txt","rb"); if(file==NULL) printf("cannotopenthedate.txtfile"); while(! (feof(file))) {ch[i]=getc(file); i++; } fclose(file); } //修改R位 voidchange(charc){ for(inti=0;i<10;i++){ i+=48; if(c==i) R[i-48]=1; i-=48; } } //读取R位 voidreadch(){ charch; for(inti=0;i<3;i++){ ch=frame[i]; //获取帧对应的R位,并写入计数器 count[i][row]=R[ch-48]; } row++; } //判断缺页中断 voiddauflt(charc){ inth=0; intmin=0; intcounts[3]={0}; //判断是否有空位 for(h=0;h<3;h++){ if(frame[h]==c) break; if(0>frame[h]||frame[h]<9){ frame[h]=c; fault_num++; printf("丨"); break; } } //无空位的情况 if(h==3){ //判断帧内是否有这个数 for(intp=0;p<3;p++){ if(frame[p]==c) break; } //帧内无这个数 if(p==3){ //发生缺页中断 fault_num++; printf("丨"); //统计计数器 for(intk=0;k<3;k++){ for(intj=0;j counts[k]+=count[k][j]; } } //比较计数器,选择最小器 intminlin=counts[0]; for(intj=1;j<3;j++){ if(minlin>counts[j]){ min=j; minlin=counts[j]; } } frame[min]=c; } } //输出当前帧内情况 printf("\t帧内情况: "); for(intz=0;z<3;z++){ printf("%c\t",frame[z]); } printf("\n"); } voidmain(){ charch[Size]; read(ch); inti=0; while('0'<=ch[i]&&ch[i]<='9'){ printf("%c",ch[i]); //写入帧并判断缺页中断 dauflt(ch[i]); //修改R位 change(ch[i]); i++; //时钟周期为10个数 if(i%10==0){ printf("灬灬灬灬灬灬灬灬灬灬灬灬灬灬灬灬灬\n"); printf("\n"); //写入计数器 readch(); //清空R位 for(inti=0;i<10;i++) R[i]=0; } } printf("\n计数器最终情况: "); for(intj=0;j { for(intk=0;k<3;k++) printf("%d",count[k][j]); printf("\n"); } printf("缺页中断数: \t%d\n",fault_num); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计 老化 算法 模拟 分页 系统