资源简介
第一个输入的为页面数,不是内存中页面,失踪的页面,内存中的页面在宏定义中设置
第二个输入的是页面执行的顺序,以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(m p=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
- 上一篇:基于 OPENCV 对三角形 的 角度检测
- 下一篇:C语言-哈夫曼编码实验报告
评论
共有 条评论