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
Get step-by-step solutions from verified subject matter experts
