操作系统实验页面.docx
- 文档编号:4817233
- 上传时间:2022-12-09
- 格式:DOCX
- 页数:11
- 大小:76.86KB
操作系统实验页面.docx
《操作系统实验页面.docx》由会员分享,可在线阅读,更多相关《操作系统实验页面.docx(11页珍藏版)》请在冰豆网上搜索。
操作系统实验页面
操作系统实验-页面置换算法
四种页面置换算法
一、实验原理:
在内存运行过程中,若其所要访问的页面不在内存而需要把他们调入内存,但内存已经没有空闲空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据送磁盘的对换区中。
但应将那个页面调出,需根据一定的算法来确定。
通常,把选择换出页面的算法成为页面置换算法。
置换算法的好坏,将直接影响到系统的性能。
一个好的页面置换算法,应具有较低的页面更换频率。
从理论上讲,应将那些以后不再会访问的页面置换出,或者把那些在较长时间内不会在访问的页面调出。
目前存在着许多种置换算法(如FIFO,OPT,LRU),他们都试图更接近理论上的目标。
二、实验目的
1.通过模拟实现几种基本页面置换的算法,了解虚拟存储技术的特点。
2.掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想,并至少用三种算法来模拟实现。
3.通过对几种置换算法页面的比较,来对比他们的优缺点,并通过比较更换频率来对比它们的效率。
三、实验分析
在进程运行过程中,若其所访问的页面不存在内存而需要把它们调入内存,但内存已无空闲时,为了保证该进程能够正常运行,系统必须从内存中调出一页程序或数据送磁盘的对换区中。
但应调出哪个页面,需根据一定的算法来确定,算法的好坏,直接影响到系统的性能。
4、运行结果
5、代码
#include"stdafx.h"
#defineM3//物理页数
#defineN20//需要调入的页数
typedefstructpage{
intnum;
inttime;
inttemp;
}Page;//物理页项,包括调入的页号和时间
Pagepp[M];//M个物理页
intqueue1[20],queue2[20],queue3[20];//记录置换的页
intK=0,S=0,T=0;//置换页数组的标识
intpos=0;//记录存在最长时间项
intchangenum=0;
intA[N];
//初始化内存页表项及存储内存情况的空间
voidINIT(){
inti;
for(i=0;i pp[i].num=-1; pp[i].time=0; pp[i].temp=0; }} //取得内存中存在时间最久的位置 intGetMax(){ intmax=-1; inti; for(i=0;i if(pp[i].time>max){ max=pp[i].time; pos=i; } } returnpos; } //检查最长时间不使用页面 intlongestTime(intmxatimep,inttemp){ inti; intmax=-1; for(i=0;i pp[i].temp=0; } for(i=temp;i if(pp[0].temp==1&&pp[1].temp==1&&pp[2].temp==1){ break; } if(pp[0].num! =A[i]){ pp[0].time++; if(pp[0].temp>=1){ pp[0].time--; } } else{ pp[0].temp++; } if(pp[1].num! =A[i]){ pp[1].time++; if(pp[1].temp>=1){ pp[1].time--; } } else{ pp[1].temp++; } if(pp[2].num! =A[i]){ pp[2].time++; if(pp[2].temp>=1){ pp[2].time--; } } else{ pp[2].temp++; } } for(i=0;i if(pp[i].time>max){ max=pp[i].time; pos=i; } } returnpos; } //检查某页是否在内存 intEquation(intfold){ inti; for(i=0;i if(pp[i].num==fold) returni; } return-1; } //检查物理内存是否已满,-1表满,其他不满 intCheck(){ inti; for(i=0;i if(pp[i].num==-1) returni; } return-1; } voidFIFO(intfold,inttemp){ inti; inta,b,c; a=Equation(fold); //页已存在 if(a! =-1){ } //页不存在 else{ b=Check(); //内存还有空闲 if(b! =-1){ pp[b].num=fold; } //内存已满,需要置换 else{ c=GetMax(); pp[c].num=fold; pp[c].time=0; changenum++; } queue1[K++]=fold; } for(i=0;i if(pp[i].num! =-1){ pp[i].time++; } } } voidOPT(intfold,inttemp) { inta,b,c; a=Equation(fold); if(a==-1){//页不在内存 b=Check(); //内存还有空闲 if(b! =-1){ pp[b].num=fold; } //内存已满,需要置换 else{ c=longestTime(fold,temp); pp[c].num=fold; pp[c].time=0; changenum++; } queue3[T++]=fold; } } voidLRU(intfold,inttemp) { inti; inta,b; intp; a=Equation(fold); if(a! =-1)//页已在内存 { //把此项移动到链表最后一项 if(a==2)//此项已经在最后,不需要做任何改动 {} else { p=Equation(-1); if(p==-1)//链表是满的 { for(;a<2;a++) pp[a].num=pp[a+1].num; pp[2].num=fold; } elseif(p<=3)//链表不满 { for(;a pp[a].num=pp[a+1].num; pp[a].num=fold; } } } else { b=Check(); if(b! =-1)//不满 pp[b].num=fold; else { for(i=0;i<2;i++) pp[i].num=pp[i+1].num; pp[2].num=fold; changenum++; } queue2[S++]=fold; } } int_tmain(intargc,_TCHAR*argv[]) { intB[N]; inti; INIT(); changenum=0; printf("请依次输入%d个页面号: \n",N); for(i=0;i scanf_s("%d",&A[i]); } //OPT printf("\n"); printf("1.最佳置换算法(Opt)\n"); INIT(); changenum=0; for(i=0;i B[i]=A[i]; } for(i=0;i OPT(B[i],i); } printf("\n"); printf("OPT算法,调入页面顺序为: "); for(i=0;i printf("%3d",queue3[i]); printf("\n页面置换次数为: %6d\n缺页率: %16.2f\n\n",changenum,(float)changenum/N); //FIFO printf("2.先进先出页面置换算法(FIFO)\n"); INIT(); changenum=0; for(i=0;i B[i]=A[i]; } for(i=0;i FIFO(B[i],i); } printf("FIFO算法,调入页面顺序为: "); for(i=0;i printf("%3d",queue1[i]); printf("\n页面置换次数为: %6d\n缺页率: %16.2f\n\n",changenum,(float)changenum/N); //LRU printf("3.最近最久未使用算法(LRU)\n"); INIT(); changenum=0; for(i=0;i B[i]=A[i]; } for(i=0;i LRU(B[i],i); } printf("LRU算法,调入页面顺序为: "); for(i=0;i printf("%3d",queue2[i]); printf("\n页面置换次数为: %6d\n缺页率: %16.2f\n\n",changenum,(float)changenum/N); printf("\n"); printf("四种算法已全部执行完毕! \n"); return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 页面