My C program isn\'t prompting the user for the page size before it runs an algor
ID: 3869207 • Letter: M
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 so that it takes user page size input.
#include<stdio.h>
#include <stdlib.h>
//#include<iostream.h>
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 <page_fault_count ; 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;
}
}
}
Explanation / Answer
You are just prompting(printf (" Page Size :");) for the page size but not reading it in the getFileData (); function
just add scanf("%d",&page_size); line after the printf in the getFileData function.
Just add exit(0) in the no file found error otherwise it will go to infinite loop if no file was there
change index variable name to other name otherwise it causes warning because it has index function
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.