实验五页面调度算法模拟实验报告.docx
- 文档编号:26621935
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:18
- 大小:309.76KB
实验五页面调度算法模拟实验报告.docx
《实验五页面调度算法模拟实验报告.docx》由会员分享,可在线阅读,更多相关《实验五页面调度算法模拟实验报告.docx(18页珍藏版)》请在冰豆网上搜索。
实验五页面调度算法模拟实验报告
《计算机操作系统》实验报告
实验五:
页面调度算法模拟
学校:
╳╳╳
院系:
╳╳╳
班级:
╳╳╳
姓名:
╳╳╳
学号:
╳╳╳
指导教师:
╳╳╳
实验五:
页面调度算法模拟
一、实验题目
页面调度算法模拟
二、实验学时
2学时
三、指导老师
╳╳╳
四、实验日期
2018年12月10日星期一
五、实验目的
(1)熟悉操作系统页面调度算法
(2)编写程序模拟先进先出、LRU等页面调度算法,体会页面调度算法原理
六、实验原理
6.1页面的含义
分页存储管理将一个进程的逻辑地址空间分成若干大小相等的片,称为页面或页。
6.2页面置换算法的含义
在进程运行过程中,若其所要访问的页面不在内存而需把它们调入内存,但内存已无空闲空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据,送磁盘的对换区中。
但应将哪个页面调出,须根据一定的算法来确定。
通常,把选择换出页面的算法称为页面置换算法(Page_ReplacementAlgorithms)。
6.3置换算法
一个好的页面置换算法,应具有较低的页面更换频率。
从理论上讲,应将那些以后不再会访问的页面换出,或将那些在较长时间内不会再访问的页面调出。
6.3.1最佳置换算法(Optimal)
它是由Belady于1966年提出的一种理论上的算法。
其所选择的被淘汰页面,将是以后永不使用的或许是在最长(未来)时间内不再被访问的页面。
采用最佳置换算法,通常可保证获得最低的缺页率。
但由于人目前还无法预知一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法是无法实现的,便可以利用此算法来评价其它算法。
6.3.2先进先出(FIFO)页面置换算法
这是最早出现的置换算法。
该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。
该算法实现简单只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老的页面。
6.3.3LRU置换算法
LRU置换算法是选择最近最久未使用的页面予以淘汰。
七、实验步骤及结果
7.1验证最佳置换算法
7.1.1实验截图
7.1.2实验分析
in
7
2
7
7
1
0
4
4
0
8
0
4
b1
7
7
7
7
4
4
b2
2
2
2
2
8
b3
1
1
1
1
b4
0
0
0
out
7
2
7.2验证先进先出(FIFO)页面置换算法
7.2.1实验截图
7.2.2实验分析
in
1
0
3
3
8
0
8
1
2
0
5
6
b1
1
1
1
1
2
2
2
b2
0
0
0
0
5
5
b3
3
3
3
3
6
b4
8
8
8
8
out
1
0
3
7.3验证LRU置换算法
7.3.1实验截图
7.3.2实验分析
in
9
6
8
7
7
3
7
1
2
6
7
0
b1
9
9
9
9
3
3
3
6
6
b2
6
6
6
6
1
1
1
0
b3
8
8
8
8
2
2
2
b4
7
7
7
7
7
7
out
9
6
8
3
1
八、报告书写人
╳╳╳
附录一最佳置换算法(Optimal)
#include
#include
#include
#defineN12/*随机数列的长度*/
#defineB4/*内存页面数*/
intIsInBuf(intbuf[],intlist[],intnum)
{
inti,j=-1;
intmax_p;
intmax_d=0;
for(i=0;i
{
if(buf[i]==list[num])//当x在buf中,返回-1
return-1;
elseif(buf[i]==-1)//当x不在buf中,且buf[i]为空,则把x填入buf,并返回-1
{
buf[i]=list[num];
return-2;
}
}
for(i=0;i
{
for(j=num+1;j { if(buf[i]==list[j]){ if(max_d max_d=j;//buf[i]在list[]中的最近距离 max_p=i;//list[j]在buf[]的位置 } break; } } if(j==N)//如果buf满,并且buf[i]不在list[]的后半部分,返回位置i returni; } returnmax_p;//返回距离最远的buf[]的位置 } intmain() { intlist[N];//={4,3,2,1,4,3,5,4,3,2,1,5}; intbuf[B],i,f[N],j,m,bufuse=0,tmp; intchange=0;//置换次数 intinterrupt=0;//中断次数 intsuccessfully=0;//访问成功次数 srand((int)time(NULL)); for(i=0;i buf[i]=f[i]=-1; printf("\n\n"); printf("TheOptimalList: "); for(i=0;i { list[i]=(int)rand()%10; printf("%2d",list[i]); } printf("\n"); printf("\nthelostinOptimal: \n"); for(i=0;i { j=IsInBuf(buf,list,i); if(j==-1){ successfully++; for(m=0;m<=B;m++){ printf("");/*成功的打印*/ } printf("in<--%dsuccessfully\n",list[i]);/*成功的打印*/ } elseif(j==-2) { bufuse++; interrupt++; printf("newbuf="); for(m=0;m printf("%d",buf[m]);/*缺页中断次数的打印*/ } for(m;m printf("");/*缺页中断的打印*/ } printf("in<--%dinterrupt\n",list[i]);/*缺页中断的打印*/ } else { tmp=buf[j]; buf[j]=list[i]; change++; printf("newbuf="); for(m=0;m printf("%d",buf[m]);/*缺页置换的打印*/ } for(m;m printf("");/*缺页置换的打印*/ } printf("in<--%dchange%d-->out\n",list[i],tmp);/*缺页置换的打印*/ } } printf("\n\n"); printf("interrupt=%d\n",interrupt); printf("change=%d\n",change); printf("successfully=%d\n",successfully); return0; } 附录二先进先出(FIFO)页面置换算法 #include #include #include #defineN12/*随机数列的长度*/ #defineB4/*内存页面数*/ intIsInBuf(intbuf[],intx) { inti; for(i=0;i { if(buf[i]==x)/*当x在buf中,返回其位置*/ return-1; elseif(buf[i]==-1)/*当x不在buf中,且buf[i]为空,则把x填入buf,并返回其位置*/ { buf[i]=x; return-2; } } return0; } intmain() { intlist[N];//={4,3,2,1,4,3,5,4,3,2,1,5}; intbuf[B],i,f[N],j,m,bufuse=0,tmp; intold=0; intchange=0;//置换次数 intinterrupt=0;//中断次数 intsuccessfully=0;//访问成功次数 srand((int)time(NULL)); for(i=0;i buf[i]=f[i]=-1; printf("\n\n"); printf("TheFIFOList: "); for(i=0;i { list[i]=(int)rand()%10; printf("%2d",list[i]); } printf("\n"); printf("\nthelostinFIFO: \n"); for(i=0;i { j=IsInBuf(buf,list[i]); if(j==-1){ successfully++; for(m=0;m<=B;m++){ printf("");/*成功的打印*/ } printf("in<--%dsuccessfully\n",list[i]);/*成功的打印*/ } elseif(j==-2) { bufuse++; interrupt++; printf("newbuf="); for(m=0;m printf("%d",buf[m]);/*缺页中断次数的打印*/ } for(m;m printf("");/*缺页中断的打印*/ } printf("in<--%dinterrupt\n",list[i]);/*缺页中断的打印*/ } else { tmp=buf[old]; buf[old]=list[i]; old=(old+1)%(int)B;/*数据在buf中的储存是循环的*/ change++; printf("newbuf="); for(m=0;m printf("%d",buf[m]);/*缺页置换的打印*/ } for(m;m printf("");/*缺页置换的打印*/ } printf("in<--%dchange%d-->out\n",list[i],tmp);/*缺页置换的打印*/ } } printf("\n\n"); printf("interrupt=%d\n",interrupt); printf("change=%d\n",change); printf("successfully=%d\n",successfully); return0; } 附录三LRU置换算法 #include #include #include #defineN12/*随机数列的长度*/ #defineB4/*内存页面数*/ intIsInBuf(intbuf[],intlist[],intnum) { inti,j=-1; for(i=0;i { if(buf[i]==list[num])/*当x在buf中,返回其位置*/ { j=i; break; } elseif(buf[i]==-1)/*当x不在buf中,且buf[i]为空,则把x填入buf,并返回其位置*/ { buf[i]=list[num]; j=-2; break; } } returnj; } intGet(intbuf[],intlist[],intnum) { intbuff[B]; intbuffuse=0; inti,j,k,m; for(m=0;m buff[m]=-1; for(i=num-1;i>=0;i--) { for(j=0;j { if(list[i]==buf[j]){ for(k=0;k { if(list[i]==buff[k]) break; } if(k==buffuse) { buff[buffuse]=list[i]; buffuse++; if(buffuse==B) returnj; } break; } } } return0; } intmain() { intlist[N]; //intlist[12]= intbuf[B],i,f[N],j,m,bufuse=0,tmp; intold=0; intchange=0; intinterrupt=0; intsuccessfully=0; srand((int)time(NULL)); for(i=0;i buf[i]=f[i]=-1; printf("TheRandomList: "); for(i=0;i { list[i]=(int)rand()%10; printf("%2d",list[i]); } printf("\n\n"); printf("\nthelostinLRU: \n"); change=0;/*中断的次数*/ for(i=0;i { j=IsInBuf(buf,list,i); if(j==-1) { old=Get(buf,list,i); tmp=buf[old]; buf[old]=list[i]; change++; printf("newbuf="); for(m=0;m printf("%d",buf[m]);/*缺页置换的打印*/ } for(m;m printf("");/*缺页置换的打印*/ } printf("in<--%dchange%d-->out\n",list[i],tmp);/*缺页置换的打印*/ } elseif(j==-2) { bufuse++; interrupt++; printf("newbuf="); for(m=0;m printf("%d",buf[m]);/*缺页中断次数的打印*/ } for(m;m printf("");/*缺页中断的打印*/ } printf("in<--%dinterrupt\n",list[i]);/*缺页中断的打印*/ } else{ successfully++; for(m=0;m<=B;m++){ printf("");/*成功的打印*/ } printf("in<--%dsuccessfully\n",list[i]);/*成功的打印*/ } } printf("\n\n"); printf("interrupt=%d\n",interrupt); printf("change=%d\n",change); printf("successfully=%d\n",successfully); return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 页面 调度 算法 模拟 报告