It\'s not running once I selected an algorithm menu opiton. Asking for help modi
ID: 3868832 • Letter: I
Question
It's not running once I selected an algorithm menu opiton. Asking for help modifying the code so the algorithm works.
The following is a menu driven c program that prompts the user to open a file that contains addresses(create a text file with a list of values to test), prompts for pg size and frame, and prints out page fault for the selected algo. This is what I have so far.
--CODE--
#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()
{
//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()
{
initialize();
for(va1=0; va1<n; 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<n; 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[li];
page_fault_count++;
show_pages();
}
else
printf("No page fault");
}
show_fault();
}
void lru()
{
initialize();
int least_used[50];
for(va1=0; va1<n; 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
During compilation I found three errors:
1. There is variable n used in the program which has never been initialized or declared.
2. Like same there is another variable li[] used in the program which is never declared in the program.
So, that i corrected in the program . first I gone through the menu program for a better understanding and then found that variable n should be replaced with variable num_of_add. please find the updated code below which is running fine .
#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;
}
}
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.