实验5页面置换算法模拟实验ok

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验5 页面置换算法模拟实验
一.实验目的
1.进一步掌握虚拟存储器的实现方法。

2.掌握各种页面置换算法。

3.比较各种页面置换算法的优缺点。

二.实验内容
模拟实现页面置换算法,步骤为:
①使用产生随机数函数得到一个随机的数列,作为将要载入的页面序列。

②使用先进先出(FIFO)算法、最近最久未使用(LRU)置换算法和最佳(OPT)置换算法,列出所需淘汰的页面号序列。

③列出缺页中断次数。

三.参考源程序如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10
#define B 4
/*------------------------------------------------------------------------
函数名:IsInBuf(),返回某个数X在不在缓冲Buf[],如在,返回位置,否则返回-1
--------------------------------------------------------------------------*/
int IsInBuf(int buf[],int x){
int i,j=-1;
for(i=0;i<B;i++){
if(buf[i]==x){ j=i;break; }
else if(buf[i]==-1){ buf[i]=x;j=i;break; } }
return j;}
/*------------------------------------------------------------------------
函数名:oldest(),返回最近最久未使用的页面位置
--------------------------------------------------------------------------*/
int oldest(int f[]){
int i,j=0,max=-1;
for(i=0;i<B;i++){
if(f[i]>max){ max=f[i]; j=i; }
f[i]++; }
return j;}
/*------------------------------------------------------------------------
函数名:oldest2(),返回未来最久未使用的页面位置
---------------------------------------------------------------------
-----*/
int oldest2(int list[],int buf[],int f[],int start){
int i,j;
for(i=0;i<B;i++){
for(j=start;j<N;j++){ if(buf[i]==list[j]) break; }
f[i]=j; }
return oldest(f);}
int main(void){
int list[N];
int buf[B],f[B],i,j ;
int old=0;
int change=0;
srand((int)time(NULL)); /*生成一系列随机数并初始化环境*/
for(i=0;i<B;i++) {buf[i]=f[i]=-1;}
printf("\nThe Random List:\n");
for(i=0;i<N;i++){ list[i]=(int)rand()%10; printf("%2d",list[i]); } printf("\nFIFO\n");/*显示FIFO淘汰的页面序列*/
change=0;
for(i=0;i<N;i++){
j=IsInBuf(buf,list[i]);
if(j==-1){
printf("%2d",buf[old]);
buf[old]=list[i];
old=(old+1)%(int)B;
change++;
}else printf(" "); }
printf("\n changes %2d\n",change); /*显示有多少个缺页中断*/
printf("\nLRU\n");/*显示LRU淘汰的页面序列*/
change=0;
for(i=0;i<B;i++) {buf[i]=f[i]=-1;}
for(i=0;i<N;i++){
j=IsInBuf(buf,list[i]);
old=oldest(f);
if(j==-1){
printf("%2d",buf[old]);
buf[old]=list[i];
f[old]=0;
change++;}
else{ f[j]=0; printf(" "); } }
printf("\n changes %2d\n",change); /*显示有多少个缺页中断*/
printf("\nOPT\n");/*显示OPT淘汰的页面序列*/
change=0;
for(i=0;i<B;i++) {buf[i]=f[i]=-1;}
for(i=0;i<N;i++){
j=IsInBuf(buf,list[i]);
if(j==-1){
old=oldest2(list,buf,f,i);
printf("%2d",buf[old]);
buf[old]=list[i];
f[old]=0;
change++; }
else{ f[j]=0; printf(" "); } }
printf("\n changes %2d\n",change); /*显示有多少个缺页中断*/ getch();
return 0; }
(假设当前随机产生的页面序列为:7 1 0 4 2 5 8 6 9 1)
四.填表题
(1).在一个请求分页存储管理系统中,一个作业的页面走向为4、3、2、1、4、3、5、4、3、2、1、5,当分配给该作业的物理块数分别为4时,试计算采用先进先出淘汰算法时的缺页率(假设开始执行时主存中没有页面),并将所得结果填表。

缺页率为:
【答案】
根据所给页面走向,使用先进先出页面淘汰算法时,页面置换情况如下:
缺页率为:10/12
缺页率为:9/12
(2).在一个请求分页存储管理系统中,一个作业的页面走向为4、3、2、1、4、3、5、4、
3、2、1、5,当分配给该作业的物理块数分别为3时,试计算采用最近最久未使用淘汰算法时的缺页率(假设开始执行时主存中没有页面),并将所得结果填表。

缺页率为:
【答案】
根据所给页面走向,使用最近最久未使用页面淘汰算法时,页面置换情况如下:
缺页率为:10/12
(3).在一个请求分页存储管理系统中,一个作业的页面走向为4、3、2、1、4、3、5、4、3、2、1、5,当分配给该作业的物理块数分别为3时,试计算采用最佳置换淘汰算法(OPT 算法)时的缺页率(假设开始执行时主存中没有页面),并将所得结果填表。

缺页率为:
【答案】
解:根据所给页面走向,使用最佳页面淘汰算法时,页面置换情况如下;
缺页率为:7/12
五、RLU分析结果:
7 1 0 4 2 5 8 6 9 1 初始:
Buf -1 -1 -1 -1
F -1 -1 -1 -1
J=0:
Buf 7-1 -1 -1
F 0 0 0 0
J=1:
Buf 7 1 -1 -1
F 1 1 1 1
J=2:
Buf 7 1 0 -1
F 2 2 2 2
J=3:
Buf 7 1 0 4
F 3 3 3 3
J=-1:
Buf 2 1 0 4
F 0 4 4 4
J=-1:
Buf 2 50 4
F 1 0 5 5
J=-1:
Buf 2 5 8 4
F 2 1 0 6
J=-1:
Buf 2 5 8 6
F 3 2 1 0
J=-1:
Buf 9 5 8 6
F 0 3 2 1
J=-1:
Buf 9 18 6
F 1 0 3 2
六、OPT分析结果:
7 1 0 4 2 5 8 6 9 1 初始:
Buf -1 -1 -1 -1
F -1 -1 -1 -1
J=0:J=1:J=2:J=3:
Buf 7 1 0 4
F -1 -1 -1 -1
J=-1:
Buf 2 1 0 4 F 10 (0) 9 10 10 J=-1:
Buf 5 1 0 4
F 10 9 10 10
J=-1:
Buf 8 1 0 4
F 10 9 10 10
J=-1:
Buf 6 1 0 4
F 10 9 10 10
J=-1:
Buf 9 1 0 4
F 10 9 10 10。

相关文档
最新文档