页面置换算法二 2.docx
- 文档编号:27000659
- 上传时间:2023-06-25
- 格式:DOCX
- 页数:19
- 大小:168.63KB
页面置换算法二 2.docx
《页面置换算法二 2.docx》由会员分享,可在线阅读,更多相关《页面置换算法二 2.docx(19页珍藏版)》请在冰豆网上搜索。
页面置换算法二2
页面置换算法二
专业班级:
学生姓名:
学号:
指导教师:
日期:
目录
一、设计题目………………………………………………………3
二、目的及要求……………………………………………………3
设计目的…………………………………………………………………3
设计要求…………………………………………………………………3
三、相关知识……………………………………………………………3
四、设计过程…………………………………………………………4
4.1总体设计框图…………………………………………………4
4.2算法设计流程图……………………………………………………4
4.3算法简单实现……………………………………………………5
五、完整代码………………………………………………………………6
六、运行结果…………………………………………………………13
七、设计心得…………………………………………………………15
八、参考文献…………………………………………………………15
一、设计题目:
页面置换算法模拟程序
二.课程设计的目的及要求
目的:
操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。
i.进一步巩固和复习操作系统的基础知识。
ii.培养学生结构化程序、模块化程序设计的方法和能力。
iii.提高学生调试程序的技巧和软件设计的能力。
iv.提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。
要求:
设计一个虚拟存储区和内存工作区,编程序演示下述算法的具体实现过程,并计算访问命中率。
用C语言实现,要求设计主界面以灵活选择某算法,且以下算法都要实现
1.最佳淘汰算法(OPT)
2.最少访问页面算法(LFU)
设计结束需提交下列资料:
1、课程设计报告。
报告中至少应包括:
相关操作系统的知识介绍,程序总的功能说明、程序各模块的功能说明、程序设计的流程图、源程序清单。
2、源程序和编译连接后的可执行程序文件。
三.相关知识:
3.1设计的基本概念和原理
(1).页面淘汰机制页面淘汰又称为页面置换。
若请求调页程序要调进一个页面,而此时该作业所分得的主存块已全部用完,则必须淘汰该作业已在主存中的一个页。
这时,就产生了在诸页面中淘汰哪个页面的问题,这就是淘汰算法(或称为置换算法)。
置换算法可描述为,当要索取一个页面并送入主存时,必须将该作业已在主存中的某一页面淘汰掉,用来选择淘汰哪一页的规则就叫做置换算法。
(2).各种页面置换算法的实现思想
OPT算法是当要调入一新页而必须先淘汰一旧业时,所淘汰的那一页应是以后不要再用的或是以后很长时间才会用到的页。
LRU算法的实质是,当需要置换一页时,选择最长时间未被使用的那一页淘汰。
如果某一页被访问了,它很可能马上还要被访问;相反,如果它很长时间未曾用过,看起来在最近的未来是不大需要的。
LFU即最不经常使用页置换算法,要求在页置换时置换在一定时期内引用计数最小的页,因为经常使用的页应该有一个较大的引用次数。
本次设计取整个页面访问时期为计算周期,实际问题中应根据页面数量多少来确定周期。
3.2虚拟存储器的引入:
局部性原理:
程序在执行时在一较短时间内仅限于某个部分;相应的,它所访问的存储空间也局限于某个区域,它主要表现在以下两个方面:
时间局限性和空间局限性。
虚拟存储器的定义:
虚拟存储器是只具有请求调入功能和置换功能,能从逻辑上对内存容量进行扩充的一种存储器系统。
虚拟存储器的实现方式:
分页请求系统,它是在分页系统的基础上,增加了请求调页功能、页面置换功能所形成的页面形式虚拟存储系统。
请求分段系统,它是在分段系统的基础上,增加了请求调段及分段置换功能后,所形成的段式虚拟存储系统。
四设计过程
4.1总体设计
4.2算法流程图
4.3算法的简单实现方法
最佳置换算法(OPT):
是用一维数组page[PSIZE]存储页面号序列,memery[MSIZE]是存储装入物理块中的页面,用pflag[PSIZE]数组标记缺页中断处。
数组next[MSIZE]记录物理块中对应页面的最后访问时间。
每当发生缺页时,就从物理块中找出最后访问输入页面访问序列取访问的页号查页表是否缺页否是置缺页标志flag为’*’按算法不同淘汰一页面调入所访问的页面操作系统课程设计时间最大的页面,调出该页,换入所缺的页面,然后初始化next[MSIZE],便于下次使用。
【特别声明】若物理块中的页面都不再使用,则每次都置换物理块中第一个位置的页面。
最久未使用置换算法(LRU):
是用一维数组page[PSIZE]存储页面号序列,memery[mSIZE]是存储装入物理块中的页面,用pflag[PSIZE]数组标记缺页中断处。
总是把最长时间内未被使用的页放在最后一块,当发生缺页时,就删掉最后一页,将当前所缺页面放入第一块。
最不经常使用淘汰算法(LFU):
是用一维数组page[PSIZE]存储页面号序列,memery[mSIZE]是存储装入物理块中的页面,用pflag[PSIZE]数组标记缺页中断处。
用use[MSIZE]数组记录当前各页已使用次数,其中use[0]中存放使用次数最少的页的次数,当发生缺页时,就在已放入物理块的页中查找当前使用次数最少的页,将之删掉,并引入当前缺页页面。
五.完整代码
#include
#include
#defineMSIZE10//最大物理块数
#definePSIZE50//最大页面数
/*全局变量*/
charflag,pflag[PSIZE];//缺页标志
inttable[MSIZE][PSIZE];//存放置换记录
intsum=0;//记录每个算法的缺页次数
/*置换算法函数*/
voidOPT(intpage[],intpSize,intmSize);//最佳置换算法
voidLRU(intpage[],intpSize,intmSize);//最久未使用置换算法
voidLFU(intpage[],intpSize,intmSize);//最不经常使用淘汰算法(当前使用次数最少)/*辅助函数*/
voidDesigner();//显示设计者信息
voidmDelay(unsignedintDelay);//设置延迟
voidDownload(intpSize,intmSize);//载入数据
voidCompute();//计算过程延迟
voidshowTable(intpage[],intpSize,intmSize);//输出置换过程
voidmain()
{
inti,code;
intmSize,pSize,page[PSIZE];
Designer();
printf("┃请按任意键继续...┃\n");
printf("┖—————————————————————————┚\n");
printf(">>>");
getchar();
system("cls");//DOS命令,清除屏幕上的所有文字
printf("请输入物理块的个数[mSize<=10]:
");
scanf("%d",&mSize);
printf("请输入页面数[pSize<=50]:
");
scanf("%d",&pSize);
printf("请输入页面序列[1~10之间]:
\n");
for(i=0;i scanf("%d",&page[i]); Download(pSize,mSize); system("cls"); do { printf("即将进入物理块的页面序列为: \n"); for(i=0;i printf("%3d",page[i]); printf("\n"); printf("*****************************\n"); printf("*请选择页面置换算法: *\n"); printf("*━━━━━━━━━━━━━━━━━━━━━━━━━━━*\n"); printf("*1.最佳(OPT)2.最近最久未使用(LRU)*\n"); printf("*3.最不经常使用(LFU,当前使用次数最少)4.退出*\n"); printf("*****************************\n"); printf("请选择操作: []\b\b"); scanf("%d",&code); switch(code) { case1: OPT(page,pSize,mSize); break; case2: LRU(page,pSize,mSize); break; case3: LFU(page,pSize,mSize); break; case4: system("cls"); Designer();//显示设计者信息后退出 printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛\n"); exit(0); default: printf("输入错误,请重新输入: "); } getchar(); }while(code! =4); getchar(); } voidOPT(intpage[],intpSize,intmSize) { inti,j,k; intcount=0;//计数器 intmemery[MSIZE]={0};//存储装入物理块中的页面 intnext[MSIZE]={0};//记录物理块中对应页面的最后访问时间 sum=0; for(i=0;i { j=0; while((j =memery[j]))//查页表,看是否缺页 j++; if(j==mSize) { flag='*';//缺页,则置标志flag为'*' sum+=1;//记录缺页次数 if(sum<=mSize)//如果物理块中有空余,则将当前页面直接放入 { for(j=0;j { if(memery[j]==0) { memery[j]=page[i];break; } } } else//物理块已满的情况下 { for(j=i+1;j { for(k=0;k { if(page[j]==memery[k]) { next[k]+=1;//记录将被使用的次数,可以不用累加 count++;//记录物理块中以后将即被使用的页面个数 break; } } if(count==mSize-1) break;//如果已有mSize-1个页面即将被使用,则剩下最后一个页面一定是最长时间后才会用到的页 } if(count==0) memery[0]=page[i]; else { count=0; for(k=0;k { if(next[k]==0)//总是置换出第一个可以换出的页 memery[k]=page[i]; next[k]=0;//初始化next[]数组 } } } } else flag=''; pflag[i]=flag;//记录当前页的缺页情况 for(k=0;k table[k][i]=memery[k]; } Compute(); showTable(page,pSize,mSize); } voidLRU(intpage[],intpSize,intmSize) { inti,j,k; intmemery[MSIZE]={0};//存储装入物理块中的页面 sum=0; for(i=0;i { j=0; while((j =memery[j]))//查页表,看是否缺页 j++; if(j==mSize) { flag='*';//缺页,则置标志flag为'*' sum+=1;k=j-1; } else { flag='';k=j; } pflag[i]=flag;//记录当前页的缺页情况 while(k>0)//总是把最长时间内未被使用的页放在最后一页 { memery[k]=memery[k-1]; k--; } memery[0]=page[i];//调入当前页面 for(k=0;k table[k][i]=memery[k]; }Compute(); showTable(page,pSize,mSize); } voidLFU(intpage[],intpSize,intmSize) { inti,j,replace;//replace标记使用次数最少的页 intuse[MSIZE]={0};//记录当前各页已使用次数,其中use[0]中存放使用次数最少的页的次数 intmemery[MSIZE]={0};//存储装入物理块中的页面 sum=0; for(i=0;i { use[page[i]]+=1;//下标即为页号 j=0; while((j =memery[j]))//查页表,看是否缺页 j++; if(j==mSize) { flag='*';//缺页,则置标志flag为'*' sum+=1; if(sum<=mSize)//如果物理块中有空余,则将当前页面直接放入 { for(j=0;j { if(memery[j]==0) {memery[j]=page[i];break;} } } else//物理块已满的情况下 { use[0]=100; for(j=0;j { if(use[memery[j]]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 页面置换算法二 页面 置换 算法
![提示](https://static.bdocx.com/images/bang_tan.gif)