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
It seems the problem with your code is that it does not prompt the user to enter the page size befor... View full answer
Get step-by-step solutions from verified subject matter experts
