实验七 操作系统页面调度算法
一、实验项目名称:
操作系统页面调度算法
二、实验目的和要求:
目的:对操作系统中使用的页面调度算法进行设计。
要求:对教材中所讲述的几种页面调度算法进行深入的分析,通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。
三、实验内容
1、设计两个程序模拟实现一个作业在内存中执行的页面置换,并计算缺页中断次数。
3、编制两种页面置换算法:1)FIFO页面置换算法;2)LRU页面置换算法 四、实验原理:
1、FIFO页面置换算法:总是选择在内存中驻留时间最长的一页将其淘汰。 2、LRU页面置换算法:选择最近一段时间内最长时间没有被访问过的页面予以淘汰。
五、参考程序:(提供代码,未改动)
1、FIFO页面置换算法:
#define M 4 /*m为系统分配给作业的主存中的页面数*/ #define N 15 #include
int a[M];/*定义内存页面数*/ int b[N];/*定义总页面数*/
int c[N];/*定义被淘汰的页面号*/ int i,k,flag,count,m=0; printf(\请输入作业序号:\\n\
- 12 -
实验七 操作系统页面调度算法
for(i=0;i printf(\发生缺页的面号分别为:\ for(i=0;i printf(\ } count=M; for(i=M;i for(k=0;k flag=1; if(flag==0) { c[m]=a[0]; m++; for(k=0;k printf(\ } } printf(\发生缺页的次数=%d\\n\ printf(\缺页中断率=%.2f%%%\\n\ printf(\驻留内存的页号分别为:\ for(i=0;i printf(\被淘汰的页号分别为:\ for(i=0;i - 13 - 实验七 操作系统页面调度算法 printf(\} 2、LRU页面置换算法: #define M 4 /*m为在主存中的页面数*/ #define N 15 #include int a[M];/*定义内存页面数*/ int b[N]; int c[N];/*定义被淘汰的页面号*/ int i,j,k,count,flag,m=0; printf(\请输入作业序号:\\n\ for(i=0;i printf(\发生缺页的面号分别为:\\n\ for(i=0;i } count=M; 在此处将程序补充完整 printf(\发生缺页的次数=%d\\n\ printf(\缺页中断率=%.2f%%%\\n\ printf(\驻留内存的页号分别为:\ for(i=0;i printf(\ printf(\被淘汰的页号分别为:\ for(i=0;i - 14 - 实验七 操作系统页面调度算法 } 六、源程序: 1、FIFO页面置换算法: 算法思想:在算缺页率之前首先进行判断,找到缺页的页面后用“*”进行标记,并保存在页表中,在访问过程中,查看页表,看是否缺页,如果缺页,则在最下面进行标记。知道缺页的页面后,更改每个块中的页面号,以块为单位进行修改,将需要淘汰的页面替换掉,即可得到所需要的结果了。然后利用标记幸好的页面的个数,来算出缺页率。 #include \#define N 15 #define M 4 void main() { int a[N],i,j,q,b[M]={0},c[M][N],count=0; char flag,f[N]; printf(\请输入页面访问序列:\\n\ for(i=0;i for(i=0;i while((a[i]!=b[q])&&(q!=M)) { q++; } if(q==M) { flag='*'; count++; }//缺页,则置标志flag为'*' - 15 - 实验七 操作系统页面调度算法 else flag=' '; if(flag=='*') { for(j=M-1;j>0;j--) //淘汰最先调入的页面调入当前访问的 b[j]=b[j-1]; b[0]=a[i]; // printf(\发生缺页的页面是:=\\n\ } for(j=0;j printf(\ } else { printf(\被淘汰的页面是:=\\n\ } } printf(\输出结果为下表(0代表为空,*代表有缺页):\\n\ printf(\); printf(\页面走向:\输出页面走向 for(i=0;i - 16 -