页面置换算法操作系统试验.docx
- 文档编号:8525861
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:11
- 大小:17.84KB
页面置换算法操作系统试验.docx
《页面置换算法操作系统试验.docx》由会员分享,可在线阅读,更多相关《页面置换算法操作系统试验.docx(11页珍藏版)》请在冰豆网上搜索。
页面置换算法操作系统试验
实验4页面置换算法(2学时)
一、实验目的
通过实验加强对虚拟存储管理中页面置换算法的理解和掌握。
二、实验内容
编写程序实现虚拟存储管理中OPT,FIFO,LRU页面置换算法。
三、实验要求
1、任意给出一组页面访问顺序(如页面走向是1、2、5、7、5、7、1、4、3、5、6、4、3、2、1、5、2)。
2、分配给该作业一定的物理块(如3块、4块等)。
3、利用OPT,FIFO,LRU页面置换算法模拟页面置换过程并计算其缺页率。
4、每访问一个页面均需给出内存中的内容(内存中的页面号),若有淘汰还需给出淘汰的页面号。
5、通过给出特殊的页面访问顺序,分配不同的物理块,利用FIFO算法计算其缺页率,进一步理解Belady现象。
6、(附加)实现CLOCK置换算法,修改位可在确定页面号时直接任意给出。
代码部分:
#include
#include
#include
voidrand(intn,intp[])//这函数是产生n个1~10的随机数放到p[]数组里面
{
intSTART=1;
intEND=10;
intv;
inti;
inta;
srand(time(NULL));
for(i=0;i {v=rand()%(END-START+1)+START; p[i]=v; cout< } } structPro { intnum,time; //num存放具体的内容,time在不同算法里面有不同的意义 };//它们是物理块和页面的数据结构 intInput(intm,intN,Pro*p,Pro*page)//完成p[]数组和page[]的初始化工作 {//p[]数组是存放页面的空间,m是页面的长度 //page[]是可以使用的物理块,N是物理块的大小 cout< int*p2=newint[m]; rand(m,p2); for(inti=0;i { p[i].num=p2[i]; p[i].time=0; } for(i=0;i { page[i].num=0; page[i].time=N+2-i; } returnm; } intSearch(inte,Pro*page,intN)//算法里面都要用到它。 {//它是找e页是否在page物理块中,N是物理块的大小 for(inti=0;i if(e==page[i].num) returni;//如果找到,就返回在物理块中的位置给Search return-1;//找不到,就返回-1 } intMax(Pro*page,intN)//LRU算法用到的 {//找出在page块中,time最大的值和位置,同时位置返回 //time最大,就代表了最久没被使用的数 inte=page[0].time,i=0; intk=0; while(i { if(e { k=i; } i++; } returnk; } intCompfu(Pro*page,inti,intt,Prop[],intm)//OPT算法用到的 { //找出如果page[t]要等于p,并且zaip[i]~p[m]这个区间内,走的次数,最大的数 intcount=0;//count是保存走的步数 for(intj=i;j { if(page[t].num==p[j].num)break;//如果相等,跳出循环 elsecount++;//不等就步数加1 } returncount; } intMin(Propage[],intN)//LFU算法用到的 {//page[]是可以使用的物理块,N是物理块的大小 //找到出现次数最小的的数,并把位置返回 intk=0; intmin=page[0].time; for(inti=0;i { if(min>page[i].time) k=i; } returnk; } voidFIFO(Prop[],Propage[],intm,intN)//p[]数组是存放页面的空间,m是页面的长度 {//page[]是可以使用的物理块,N是物理块的大小 floatn=0;//n用来保存缺页的次数 inti=0;//i是循环变量,它是表示走到页面的位置。 intt=0;//t是用来表示物理块走到的位置 cout<<"页面置换情况: "< for(i=0;i { if(Search(p[i].num,page,N)>=0) continue;//找到相同的页面,就跳到下一次循环,不做处理。 else//在找不到的时候,通过t=t%N,求出这次来替换物理块的位置 { t=t%N; n++;//缺页数加1 page[t].num=p[i].num; t++;//位置加1 } } cout<<"缺页次数: "< "< "<<1-n/m< } voidLFU(Prop[],Propage[],intm,intN)//p[]数组是存放页面的空间,m是页面的长度 {//page[]是可以使用的物理块,N是物理块的大小, floatn=0; inti=0; intt=0; for(i=0;i page[i].time=0; cout<<"页面置换情况: "< for(i=0;i { if(Search(p[i].num,page,N)>=0) { page[i].time++;//找到相同的页面,time加1 continue;// } else {//找出使用最少的页面进行调换 t=Min(page,N);//找到出现次数最小的的数,并把位置返回t page[t].num=p[i].num; page[t].time=0;//该页time清零 n++;//缺页数加1 } } cout<<"缺页次数: "< "< "<<1-n/m< } voidOPT(Prop[],Propage[],intm,intN)//p[]数组是存放页面的空间,m是页面的长度 {//page[]是可以使用的物理块,N是物理块的大小 floatn=0;//n用来保存缺页的次数 inti=0;//i是循环变量,它是表示走到页面的位置。 intt=0;//t是用来表示物理块走到的位置 while(i { if(Search(p[i].num,page,N)>=0) i++;//如果找到了,就不做处理。 else//如果找不到 { inttemp=0,cn;//cn用来保存离后面最远的数 for(t=0;t { if(temp {//page[t]=p[i]~p[m]这个区间内,走的次数,最大的数 temp=Compfu(page,i,t,p,m); cn=t; } } page[cn]=p[i];//把当前的值放要发生要走最远的数,也就最不可能最近出现的数 n=n+1;//缺页数加1 i++;//跳到下一次循环 } } cout<<"缺页次数: "< "< "<<1-n/m< } voidLRU(Prop[],Propage[],intm,intN)//p[]数组是存放页面的空间,m是页面的长度 {//page[]是可以使用的物理块,N是物理块的大小 floatn=0;//n用来保存缺页的次数 inti=0;//i是循环变量,它是表示走到页面的位置。 intt=0;//t是用来表示物理块走到的位置 cout<<"页面置换情况: "< while(i { intk; k=t=Search(p[i].num,page,N); if(t>=0) page[t].time=0;//如果找到,就要把当前的page[t].time次数 //清零 else//找不到的时候,发生缺页 { n++;//缺页数加1 t=Max(page,N);//找出page物理块里面,最久没被时候的数 //同时把最久没被时候的数在物理块里的位置传给t page[t].num=p[i].num;//最久没被使用的是被现在的数代替 page[t].time=0;//同时清零 } for(intj=0;j { if(j==t) continue; page[t].time++; } i++;//跳到下一次循环 } cout<<"缺页次数: "< "< "<<1-n/m< } voidmain() { intm=0,t=0,N=0; cout<<"请输入实际页数: "; cin>>m; Pro*p=newPro[m];//p是用来放页面的地方 cout<<"可用内存页面数"< cin>>N; Pro*page=newPro[N];//page是放物理块的地方 charc; floatn=0; Input(m,N,p,page);//m是页面的总长,N是物理块的长度 do{ cout<<"f: FIFO页面置换"< cout<<"l: LRU页面置换"< cout<<"o: OPT页面置换"< cout<<"u: LFU页面置换"< cout<<"按其它键结束"< cin>>c; if(c=='f')//FIFO页面置换 { FIFO(p,page,m,N); } if(c=='l')//LRU页面置换 { LRU(p,page,m,N); } if(c=='o')//OPT页面置换 { OPT(p,page,m,N); } if(c=='u')//OPT页面置换 { LFU(p,page,m,N); } }while(c=='f'||c=='l'||c=='o'||c=='u'); } 下次预告(敬请期待): 实验5设备管理(2学时) 一、实验目的 理解设备管理的概念和任务,掌握独占设备的分配、回收等主要算法的原理并编程实现。 二、实验内容 编写程序实现对独占设备的分配与回收的模拟。 三、实验要求 1、实现设备分配、回收、显示系统中设备信息的功能。 2、通过设备类表和设备表记录系统中设备信息、以便进行设备分配。 3、设备类表记录系统中全部设备的情况,每个设备类占一个表目,设备类表的数据结构如表1所示。 设备类 拥有设备数量 可分配设备数量 设备起始地址 图1设备类表 4、为每一个设备配置一张设备控制表,用于记录本设备的情况。 设备控制表的数据结构如图2所示。 绝对号 设备状态(好/坏) 是否分配(是/否) 占有作业名 相对号 图2设备控制表 4、程序中建立分配设备和回收设备函数。 5、设系统有3类设备,每类设备的设备数分别为2、3、4。 6、要求键盘输入作业名、作业所需设备类和设备相对号。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 页面 置换 算法 操作系统 试验