Question: My C program isn't prompting the user for the page size before it runs an algortihm so the fault count is always zero. Please modify

My C program isn't prompting the user for the page size before it runs an algortihm so the fault count is always zero. Please modify so that it takes user page size input.

#include

#include

//#include

int num_of_add, number_frames, page_fault_count = 0;

int index[10000], page[50];

int curr_fault = 0;

//virtual addresses

int va1, va2, va3;

//FROM A FILE

void getFileData ()

{

printf (" Page Size :");

int num_of_add = 0;

/* Pointer to the file */

FILE * fp1;

/* Opening a file in r mode */

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

if (fp1 == NULL)

{

printf ("error in file open");

}

while (1)

{

char c;

int x;

///c = fgetc(fp1);

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

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

if (x == -1)

break;

else

{

//x is a memory value

index[num_of_add] = x;

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

num_of_add = num_of_add + 1;

}

}

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

fclose (fp1);

printf ("number of addresses: %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 index_length;

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

{

if (page[va3] == data)

{

index_length = va3;

break;

}

}

return index_length;

}

//Display Fault

void

show_fault ()

{

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

printf (" Page Fault percentage:%d"); //percentage to be determined

}

//Display Pages

void

show_pages ()

{

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

{

if (page[va3] != 9999)

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

}

}

void

fifo ()

{

printf("inside fifo");

initialize ();

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

{

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

if (fault_found (index[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 index

page[va3] = index[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 :", index[va1]);

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

{

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

{

int last_page = page[va2];

int lfnd = 0;

for (va3 = va1; va3

{

if (last_page == index[va3])

{

head[va2] = va3;

lfnd = 1;

break;

}

else

lfnd = 0;

}

if (!lfnd)

head[va2] = 9999;

}

int limit = -9999;

int temp_index;

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

{

if (head[va2] > limit)

{

limit = head[va2];

temp_index = va2;

}

}

page[temp_index] = index[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 :", index[va1]);

if (fault_found (index[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 == index[va3])

{

least_used[va2] = va3;

lfnd = 1;

break;

}

else

lfnd = 0;

}

if (!lfnd)

least_used[va2] = -9999;

}

int lowbound = 9999;

int temp_index;

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

{

if (least_used[va2] < lowbound)

{

lowbound = least_used[va2];

temp_index = va2;

}

}

page[temp_index] = index[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 :", index[va1]);

if (fault_found (index[va1]))

{

int index_length = table (index[va1]);

last_count[index_length]++;

printf ("No page fault!");

}

else

{

page_fault_count++;

if (new_number < number_frames)

{

page[new_number] = index[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] = index[va1];

frame_count = 0;

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

if (index[va1] == index[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.Enter 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

It seems the problem with your code is that it does not prompt the user to enter the page size befor... View full answer

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!