求助 这个程序还是有问题~~~

来源:百度知道 编辑:UC知道 时间:2024/09/20 12:21:39
程序的目的是模拟页面置换算法的FIFO和LRU。
我用的是WINTC编译,main函数应该没问题了。可能就是LRU算法(FIFO算法先不考虑)有问题。调试好长时间了,还是没解决。前来求助高手。有详细注释。多谢!字数限制,分成两L发。

#include <stdio.h>

int wnum,ynum,i,y[20]; /*物理块数,页面数,待访问页面号的数组*/

typedef struct kuai /*物理块的数据结构*/
{ int num; /*物理块上的页号*/
int time; /*时间,时间最大的物理块被置换*/
}kuai;
kuai w[100];

/*****************************************************************************/

int maxtime(kuai *w) /*FIFO and LRU 通用计时器,用于找出需置换的物理块*/
{ int tag;

int maxtime=-1;
for(i=0;i <wnum;i++)
{if(w[i].time>maxtime)
{maxtime=w[i].time;
tag=i;
}
}

return tag; /*返回最长时间的物理块号*/
}

/*******************************************************************************/

void LRU() /*LRU 算法*/
{ int i,j,k,u;
for(i=0;i <wnum;i++)
{w[i].time=0;/*所有物理块

我并不是什么专家,没有什么深入的研究,今天就姑妄言之了,以下是我的解答,希望对你有帮助
/*****************************************************************************/

void FIFO() /*FIFO算法*/
{ int i,j,k;
for(i=0;i <wnum;i++)
{w[i].time=0;/*所有物理块的时间置0,块号置为-1*/
w[i].num=-1;
}
w[0].num=y[0]; /*访问第一个页面*/
w[0].time=1;
for(i=1;i <ynum;i++) /*访问剩余的页面*/

{
for(j=0;j <wnum;j++)

if(w[wnum-1].num==-1&&w[j].num!=y[i]) /*物理块未满且物理块中无待访问页面*/
{ for(j=0;j <wnum;j++)
{if(w[j].num==-1)w[j].num=y[i];
break;
}
break;
}

if(w[j].num!=-1&&w[j].num==y[i])/*物理块未满且物理块有待访问页面*/
{
break;
}

if(w[wnum-1].num!=-1&&w[j].num==y[i]) /*物理块已满且物理块中有待访问页面*/
{
break;
}

if(w[wnum-1].num!=-1&&w[j].num!=y[i])/*物理块已满且物理块中无待访问页面*/