资源简介

模拟操作系统中请求调页存储管理方式,中的OPT LRU FIFU 三种算法的实现

资源截图

代码片段和文件信息

//BY Wutingt
#include 
#include
#include
#include
#define Bsize 4

typedef struct BLOCK//声明一种新类型--物理块类型
{  
int pagenum;//页号
int accessed;//访问字段,其值表示多久未被访问

}BLOCK;

int pc;//程序计数器,用来记录指令的序号
int n;//缺页计数器,用来记录缺页的次数
static int temp[320];//用来存储320条随机数
BLOCK block[Bsize]; //定义一大小为4的物理块数组
//*************************************************************
void init();     //程序初始化函数
int findExist(int curpage);//查找物理块中是否有该页面
int findSpace();//查找是否有空闲物理块
int findReplace();//查找应予置换的页面
void display();//显示
void suijishu();//产生320条随机数显示并存储到temp[320]
void pagestring();//显示调用的页面队列
void OPT();//OPT算法
void LRU();// LRU算法
void FIFO();//FIFO算法
//*************************************************************
void init() 
{  
   for(int i=0;i   {
   block[i].pagenum=-1;
       block[i].accessed=0;
       pc=n=0;
   }
}
//-------------------------------------------------------------
int findExist(int curpage)
{
 
    for(int i=0; i {
if(block[i].pagenum == curpage )
        return i;//检测到内存中有该页面,返回block中的位置
}
    return -1;
}
//-------------------------------------------------------------
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(“ %02d“block[i].pagenum);}
   }
   cout<}
//-------------------------------------------------------------
void suijishu()
{   int flag=0;
    cin>>pc;
    cout<<“******按照要求产生的320个随机数:*******“<    for(int i=0;i<320;i++)
{    
temp[i]=pc;
if(flag%2==0) pc=++pc%320;
        if(flag==1) pc=rand()% (pc-1);
        if(flag==3) pc=pc+1+(rand()%(320-(pc+1)));
        flag=++flag%4;
printf(“ %03d“temp[i]);
        if((i+1)%10==0) cout<
}
//-------------------------------------------------------------
void pagestring()
{   
for(int i=0;i<320;i++)
{
   printf(“ %02d“temp[i]/10);
       if((i+1)%10==0) cout< }

}
//-------------------------------------------------------------
void OPT()
{
int existspaceposition ;
int curpage;
    for(int i=0;i<320;i++)
{   
if(i%100==0) getch();
pc=temp[i]; 
    curpage=pc/10;
    exist = findExist(curpage);
        if(exist==-1)
{
space = findSpace();
            if(space != -1)
{
block[space].pagenum = curpage;  
                display();
    n=n+1;
}
            else
{
for(int k=0;k {
for(int j=i;j<320;j++)
{

评论

共有 条评论