C语言实现页面置换算法(FIFO、LRU)

1.实现效果

C语言实现页面置换算法(FIFO、LRU)_第1张图片

C语言实现页面置换算法(FIFO、LRU)_第2张图片

2.实现源代码 

#include
#include
#include
#include
#include
#include
#include
using namespace std;

#define Myprintf printf("|---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---|\n")/*表格控制*/
#define bsize 4 //物理块大小
#define psize 16 //进程大小
 void chushihua();//初始化函数
 void ymzh();
 void yemianzhihuan ();
 void changeaddr(struct Page p[], int logaddr);
 void dizhizhuanhuan();
 void menu();
 int wang();

 int yemianliu[32]={0};//全局变量数组,地址流
 int p;
 struct Page  {
     int pno;//页号
     int flag;//标志位
     int cno;//主存号
     int modf;//修改位
     int addr;//外存地址
}Page;  //全局变量p是一共有多少地址流

 typedef struct pagel
 {
     int num; /*记录页面号*/
     int time;  /*记录调入内存时间*/
 }Pagel;  /*页面逻辑结构,方便算法实现*/

 Pagel b[bsize]; /*内存单元数*/
 int c[bsize][psize];/*保存内存当前的状态:缓冲区*/
 int queue[100];/*记录调入队列*/
 int k;/*调入队列计数变量*/
 int phb[bsize]={0};//物理块标号
 int pro[psize]={0};//进程序列号
 int flag[bsize]={0};//进程等待次数(存放最久未被使用的进程标志)*/
 int i=0,j=0;//i表示进程序列号,j表示物理块号*/
 int m =-1,n =-1;//物理块空闲和进程是否相同判断标志*/
 int mmax=-1, maxflag=0;//标记替换物理块进程下标*/
 int count =0; //统计页面缺页次数

 void chushihua() //初始化函数
{
     int t;
     srand(time(0));//随机产生指令序列
         p=12+rand()%32;
     cout<<"地址流序列:";
     cout<=0;i--)
    {
        cout<>a;

    cout<<"页号"<<"标记位"<<"外存地址"<<"主存号"<>ins;
         changeaddr(p, ins);break;
     case 2: system("CLS"); a=wang();break;
     default:cout<<"输入有误,请重新输入!"<maxflag)
         {
             maxflag = flag[j];
             mmax = j;
        }
    }

    if(n == -1)//不存在相同进程
    {
        if(m != -1)//存在空闲物理块
        {
            phb[m]=pro[i];//进程号填入该空闲物理块
//             count++;
             flag[m]=0;
             for (j=0;j<=m; j++)
             {
                 flag[j]++;
            }
            m=-1;
        }
         else//不存在空闲物理块
         {
             phb[mmax] =pro[i];
             flag[mmax] =0;
             for (j=0;jmax)
         {
             max=b[i].time;
             tag= i;
        }
    }
     return tag;
}

/*判断页面是否已在内存中*/
 int Equation(int fold, Pagel *b)
 {
     int i;
    for(i=0;i=0)
     {
         b[val].time=0;
         for(i=0;i 
 

到此这篇关于C语言实现页面置换算法(FIFO、LRU)的文章就介绍到这了,更多相关C语言 页面置换算法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

你可能感兴趣的:(C语言实现页面置换算法(FIFO、LRU))