沈阳工程学院信息学院操作系统课程设计 第五章 详细设计
5.5 程序源代码
#include
typedef struct BLOCK//声明一种新类型——物理块类型 {
int pagenum;//页号
int accessed;//访问字段,其值表示多久未被访问 }BLOCK;
int count;//程序计数器,用来记录指令的序号 int n;//缺页计数器,用来记录缺页的次数
static int temp[320];//用来存储320条随机数 BLOCK block[size]; //定义一大小为4的物理块数组 void init( ); //程序初始化函数
int findExist(int curpage);//查找物理块中是否有该页面 int findSpace( );//查找是否有空闲物理块 int findReplace( );//查找应予置换的页面
void display ( );//显示
void Random( );//产生320条随机数,显示并存储到temp[320] void pagestring( );//显示调用的页面队列 void FIFO( );//FIFO算法 void init( ) {
for(int i=0;i block[i].pagenum=-1; block[i].accessed=0; count=n=0; } } int findExist(int curpage) //查找物理块中是否有该页面 { for(int i=0; i if(block[i].pagenum == curpage ) return i; //检测到内存中有该页面,返回block中的位置 } return -1; } 18 沈阳工程学院信息学院操作系统课程设计 第五章 详细设计 int findSpace( ) //查找是否有空闲物理块 { for(int i=0; i if(block[i].pagenum == -1) return i; //找到空闲的block,返回block中的位置 } return -1; } int findReplace( ) //查找应予置换的页面 { int pos = 0; for(int i=0; i if(block[i].accessed >block[pos].accessed) pos = i;//找到应予置换页面,返回BLOCK中位置 } return pos; } void display( ) { for(int i=0; i { if(block[i].pagenum != -1) //物理块不空 { printf(\} } cout< { int flag=0; cin>>count; cout<<\按照要求产生的320个随机数:*******\ for(int i=0;i<320;i++) { temp[i]=count; if(flag%2==0)count=++count20;//产生50%的顺序执行指令(flag=0或2时顺序执行) if(flag==1) count=rand( )% (count-1); //产生25%的均匀分布在前地址部分指令 if(flag==3) count=count+1+(rand( )%(320-(count+1))); //产生25%的均匀分布在后地址部分指令 flag=++flag%4; 19 沈阳工程学院信息学院操作系统课程设计 第五章 详细设计 printf(\if((i+1)==0) cout< for(int i=0;i<320;i++) { printf(\if((i+1)==0) cout< } //--------------- 先进先出算法 void FIFO( ) { int exist,space,position; int curpage; for(int i=0;i<320;i++) { if(i0==0) getch( ); //getch直接从键盘获取键值 count=temp[i]; curpage=count/10; exist = findExist(curpage); //查找物理块中是否有该页面 if(exist==-1) { space = findSpace( ); //查找是否有空闲物理块 if(space != -1) //有空闲物理块 { block[space].pagenum = curpage; display( ); n=n+1; } else //无空闲物理块,则寻找置换页面 { position = findReplace( ); //查找应予置换的页面 block[position].pagenum = curpage; display( ); n++; block[position].accessed--; //置换页面所在的物理块中访问标记设为-1 } } else//若存在该页 20 沈阳工程学院信息学院操作系统课程设计 第五章 详细设计 { for(int i=0; i { if(block[i].pagenum != -1) //物理块不空 printf(\ cout<<\指令已经存在! 其物理块地址为:\ } for(int j=0; j cout<<\缺页率:\void main( ) { int select; cout<<\请输入第一条指令号(1~320): \Random( ); cout<<\对应的调用页面队列*******\do { cout<<\cout<<\退出 *\ cout<<\cout<<\请选择:\cin>>select; cout<<\init( ); switch(select) { case 1:cout<<\先进先出置换算法FIFO:\ cout<<\ FIFO( ); break; default: ; } }while(select!=2); } 21