Question: My C program isn't calculating page fault count ;its showing 0 or reports the page size as the number of faults. This is a menu

My C program isn't calculating page fault count ;its showing 0 or reports the page size as the number of faults. This is a menu driven program that prompts the user for frame and page size and reads in values from a text file. Page fault % has to be determined in show_fault(). Please show your modifications to the program in bold. Much Appreciated!

#include

#include

//#include

int num_of_add, number_frames, page_fault_count = 0;

int input[10000], page[50];

int curr_fault = 0;

//virtual addresses

int va1, va2, va3;

//FROM A FILE

void getFileData ()

{

printf (" Page Size :");

scanf("%d",&page_size);

/* Pointer to the file */

FILE * fp1;

/* Opening a file in r mode */

fp1 = fopen ("inputfile.txt, "r");

if (fp1 == NULL)

{

printf ("error in file open");

exit( );

}

while (1)

{

char c;

int x;

///c = fgetc(fp1);

fscanf (fp1, "%i", &x);

printf ("reading: %i", x);

//if (x == -1)

if (feof(fp1))

break;

else

{

//x is a memory value

input[num_of_add] = x;

//printf ("# of pages %d", input[num_of_add]);

num_of_add = num_of_add + 1;

}

}

fclose (fp1);

///num_of_add is the number of values in the file

//int num_of_add = 0;

//printf ("number of addresses: %d", num_of_add);

printf ("number of addresses:");

scanf("%d",&num_of_add);

printf (" Number of frames allocated to the process:");

//Number of Frames

scanf ("%d", &number_frames);

}

void

initialize ()

{

printf("initializing data");

//Page Fault Count

page_fault_count = 0;

for (va1 = 0; va1 < number_frames; va1++)

page[va1] = 9999;

}

//Fault Found

int

fault_found (int data)

{

//Current Fault

curr_fault = 0;

for (va2 = 0; va2 < number_frames; va2++)

{

if (page[va2] == data)

{

curr_fault = 1;

break;

}

}

return curr_fault;

}

int

table (int data)

{

int input_length;

for (va3 = 0; va3 < number_frames; va3++)

{

if (page[va3] == data)

{

input_length = va3;

break;

}

}

return input_length;

}

//Display Fault

void

show_fault ()

{

printf (" Total page fault count:%d", page_fault_count);

printf (" Page Fault percentage:%d"); //determine fault percentage

}

//Display Pages

void

show_pages ()

{

for (va3 = 0; va3 < number_frames; va3++)

{

if (page[va3] != 9999)

printf (" %d", page[va3]);

}

}

void

fifo ()

{

printf("FIFO selected");

initialize ();

for (va1 = 0; va1 < num_of_add; va1++)

{

printf (" For %d :", input[va1]);

if (fault_found (input[va1]) == 0)

{

for (va3 = 0; va3 < number_frames - 1; va3++)

//Read the page array

page[va3] = page[va3 + 1];

//Update page array is the new input

page[va3] = input[va1];

page_fault_count++;

show_pages ();

}

else

printf ("No page fault");

}

show_fault ();

}

void

optimal ()

{

initialize ();

int head[50];

for (va1 = 0; va1 < num_of_add; va1++)

{

printf (" For %d :", input[va1]);

if (fault_found (input[va1]) == 0)

{

for (va2 = 0; va2 < number_frames; va2++)

{

int last_page = page[va2];

int lfnd = 0;

for (va3 = va1; va3

{

if (last_page == input[va3])

{

head[va2] = va3;

lfnd = 1;

break;

}

else

lfnd = 0;

}

if (!lfnd)

head[va2] = 9999;

}

int limit = -9999;

int temp_input;

for (va2 = 0; va2 < number_frames; va2++)

{

if (head[va2] > limit)

{

limit = head[va2];

temp_input = va2;

}

}

page[temp_input] = input[va2];

page_fault_count++;

show_pages ();

}

else

printf ("No page fault");

}

show_fault ();

}

void

lru ()

{

initialize ();

int least_used[50];

for (va1 = 0; va1 < num_of_add; va1++)

{

printf (" For %d :", input[va1]);

if (fault_found (input[va1]) == 0)

{

for (va2 = 0; va2 < number_frames; va2++)

{

int last_page = page[va2];

int lfnd = 0;

for (va3 = va1 - 1; va3 >= 0; va3--)

{

if (last_page == input[va3])

{

least_used[va2] = va3;

lfnd = 1;

break;

}

else

lfnd = 0;

}

if (!lfnd)

least_used[va2] = -9999;

}

int lowbound = 9999;

int temp_input;

for (va2 = 0; va2 < number_frames; va2++)

{

if (least_used[va2] < lowbound)

{

lowbound = least_used[va2];

temp_input = va2;

}

}

page[temp_input] = input[va1];

page_fault_count++;

show_pages ();

}

else

printf ("No page fault!");

}

show_fault ();

}

void

mru ()

{

int last_count[100];

int least_used, last_number;

int frame_count = 0, new_number = 0;

initialize ();

for (va1 = 0; va1 < number_frames; va1++)

last_count[va1] = 0;

for (va1 = 0; va1 < num_of_add; va1++)

{

printf (" For %d :", input[va1]);

if (fault_found (input[va1]))

{

int input_length = table (input[va1]);

last_count[input_length]++;

printf ("No page fault!");

}

else

{

page_fault_count++;

if (new_number < number_frames)

{

page[new_number] = input[va1];

last_count[new_number] = last_count[new_number] + 1;

new_number++;

}

else

{

least_used = 9999;

for (va3 = 0; va3 < number_frames; va3++)

if (last_count[va3] < least_used)

{

least_used = last_count[va3];

last_number = va3;

}

page[last_number] = input[va1];

frame_count = 0;

for (va3 = 0; va3 <= va1; va3++)

if (input[va1] == input[va3])

frame_count = frame_count + 1;

last_count[last_number] = frame_count;

}

show_pages ();

}

}

show_fault ();

}

//MAIN

int

main ()

{

int selectone;

while (1)

{

printf

(" Select an Algorithm 1.Open the data file 2.FIFO 3.LRU 4.MRU 5.Optimal 6.Exit Please make a selection:");

scanf ("%d", &selectone);

switch (selectone)

{

case 1:

getFileData ();

break;

case 2:

fifo ();

break;

case 3:

lru ();

break;

case 4:

mru ();

break;

case 5:

optimal ();

break;

default:

return 0;

break;

}

}

}

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!