操作系统课程设计 下载本文

沈阳工程学院信息学院操作系统课程设计 第五章 详细设计

5.5 程序源代码

#include #include #include #include #define size 4

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