• 大小: 5KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-23
  • 语言: C/C++
  • 标签: OPT  NUR  

资源简介

第一个输入的为页面数,不是内存中页面,失踪的页面,内存中的页面在宏定义中设置 第二个输入的是页面执行的顺序,以0结束

资源截图

代码片段和文件信息

#include“stdio.h“
#include“stdlib.h“
#define ap 4
#define CLEAR_PERIOD 4
#define max 100
struct zhan     //处理页数顺序的栈
{
int i;
int j;       //状态项,用于最近没有使用页面的替换选择
zhan *next;
}*ap_top*ap_tail;

zhan *mem_zhan[ap];//数组表示内存页实现处理的页栈

void shuru()   //输入函数实现,实现页面数和执行顺序的存取
{
    int m=1;
int ap_num;   //页面数量
zhan *t;
printf(“please input the ap‘s number of storage:“);
scanf(“%i“&ap_num);
ap_tail=(zhan *)malloc(sizeof(zhan));
printf(“please input the turn of the ap:(end by ‘0‘)\n“);
    do{ 
        if(m==1)
ap_top=ap_tail;
    scanf(“%d“&ap_tail->i);
 if(ap_tail->i==0)
{ap_tail->next=NULL;break;
 }
    if(ap_tail->i<0||ap_tail->i>ap_num)//输入判错处理
  do{
 printf(“your inpution is wrong!continue~~\n“);
     scanf(“%d“&ap_tail->i);
 if(ap_tail->i==0)
 {ap_tail->next=NULL;
 break;}
  }while(ap_tail->i<0||ap_tail->i>ap_num);
        t=(zhan *)malloc(sizeof(zhan));
ap_tail->next=t;//建立链表
ap_tail=t;
m++;
}while(ap_tail->i!=0);
}

void shuchu()//出数内存页面的图表表示
{
zhan *p;
int m=0;
int n;
while(mp=mem_zhan[m];
m++;
n=1;
do{
if(n==1)
printf(“内存页%d号**%d “mp->i);
else
printf(“*%d “p->i);
n++;
p=p->next;
}while(p->next!=NULL);
printf(“\n“);
}
};


//====================算法实现的公共函数部分============================
int mingzhong(zhan *p[ap]zhan *jt)//命中函数
{
int m;
for(m=0;m if(p[m]->i==jt->i)
{   p[m]->j=max;
   return 1;
   break;
}

     return 0;
}

//=====================最近没有使用页面淘汰算法NUR实现===============
void suanfa1()
{
int n;
int m;
int l;
zhan *p;
zhan *top[ap]*tail[ap];
p=ap_top;
for(m=0;m{
mem_zhan[m]=(zhan *)malloc(sizeof(zhan));
mem_zhan[m]->i=0;mem_zhan[m]->j=0;
tail[m]=top[m]=mem_zhan[m];
}
do{
for(n=1;n<=CLEAR_PERIOD;n++)//周期循环
{
//命中处理
if(mingzhong(&tail[ap]p)==1)
{
for(m=0;m {
tail[m]=(zhan *)malloc(sizeof(zhan));
    tail[m]->i=top[m]->i;
tail[m]->j=top[m]->j;
top[m]->next=tail[m];
top[m]=tail[m];
if(m==ap-1)
if(top[m]->j==max)
for(m=0;m              top[m]->j=0;
if(top[m]->i==p->i)
top[m]->j=max;
}
}
//不中处理
else
{
for(m=0;m {
  if(top[m]->i==0)
  {
  l=1;
  break;
  }
  else
  l=0;
}

if(l==1)
 for(m=0;m  {
if(top[m]->i==0)
{
top[m]->i=p->i;
    top[m]->j=max;
break;
}
 }
else
 for(m=0;m  {
if(top[m]->j==0)
{
top[m]->i=p->i;
    top[m]->j=max;
break;
}
 }

    for(m=0;m

评论

共有 条评论