Может кто-нибудь сказать мне, почему эта функция не выполняется должным образом? Он прыгает прямо до конца и печатает последнюю строку:
«0 сбоев страниц»
, когда определенно должно быть какое-то действие. Я не уверен, что функция выбирает значения и передается правильно, когда я вызываю ее в основной функции.
Файл для чтения:
8 4 12
4
3
4
6
1
6
4
5
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
void runningMessage(int, int, int);
void fifo();
int flag = 0, var, currFrame = 0, numFault, currRequest,minRequest,maxRequest ,request;
int numPages, numFrames, numRequest, fc =0, go =0, c =0;
void runningMessage(int pg, int frame, int msg){
if(msg == 1)
{
printf("Page %d already in Frame %d\n",pg, frame);
}
if(msg == 2)
{
printf("Page %d loaded into Frame %d\n",pg, frame);
}
if(msg == 3)
{
printf("Page %d unloaded from Fram %d\n",pg, frame);
}
}
int main(int argc, char *argv[])
{
FILE *fp;
fp = fopen(argv[1], "r");
int x =0;
fscanf(fp, "%d %d %d", &numPages, &numFrames, &numRequest);
int pgAccess[numRequest],pgArray[numPages], pgRequest[numRequest];
while(!feof(fp))
{
fscanf(fp, "%d", &pgAccess[x]);
x++;
}
fclose(fp);
printf("Algorithm: %s\n\n", argv[2]);
var = numRequest;
if(strcmp(argv[2] ,"FIFO") == 0)
{
fifo(&pgArray, &pgAccess, numPages, numFrames, numRequest, var);
}
}
void fifo(int *pgArray, int *pgAccess, int numPages, int numFrames, int numRequest, int var){
int i, x, y;
for(i = 0; i < numFrames; i++)
{
pgArray[i] = -1;
}
while(x < numRequest)
{
flag =0;
var = pgAccess[x];
for(i = 0; i < numFrames; i++)
{
if(var == pgArray[i])
{
flag = 1;
x++;
runningMessage(pgArray[i], i, 1);
break;
}
}
if(flag == 0)
{
if(currFrame < numFrames)
{
pgArray[currFrame] = pgAccess[x];
runningMessage(pgAccess[x], currFrame, 2);
currFrame++;
x++;
numFault++;
}
else if( y < numFrames)
{
runningMessage(pgArray[y], y, 3);
pgArray[y] = pgAccess[x];
runningMessage(pgAccess[x], y, 2);
x++;
y++;
numFault++;
}
else
{
y =0;
}
}
}
printf(" %d Page Faults\n\n", numFault);
}