Untitled
unknown
plain_text
a year ago
2.1 kB
8
Indexable
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int pointer;
int faults ,hits;
void print(int frame_size,int frame[])
{
int i;
for(i=0;i<frame_size;i++)
{
if(frame[i]==-1)
printf("- ");
else
printf("%d ",frame[i]);
}
printf("\n");
}
int predict(int reference_length, int references[], int page_no ,int frame_size,int frame[], int start)
{
int pos = -1, farthest = start, i;
for(i=0;i<frame_size;i++)
{
int j;
for(j=start-1;j>=0;j--)
{
if(frame[i]==references[j])
{
if(j<farthest)
{
farthest=j;
pos=i;
}
break;
}
}
if(j==page_no)
return i;
}
if(pos == -1)
return 0;
else
return pos;
}
void add_reference(int frame_size,int frame[], int reference, int current_position,int reference_length, int references[])
{
int i;
bool allocated=false;
for(i=0;i<frame_size;i++)
{
if(frame[i]==reference)
{
printf(" Hit for %d | ", reference);
hits++;
allocated = true;
break;
}
else if(frame[i]==-1)
{
frame[i] = reference;
printf("Fault for %d | ", reference);
faults++;
allocated = true;
break;
}
}
if(allocated==false)
{
int j = predict(reference_length,references,current_position,frame_size,frame,current_position+1);
frame[j] = reference;
printf("Fault for %d | ", reference);
faults++;
}
print(frame_size, frame);
}
int main()
{
int frame_size,i,number_of_references;
printf("Enter frame size: ");
scanf("%d",&frame_size);
int frame[frame_size];
for(i=0;i<frame_size;i++)
{
frame[i] = -1;
}
print(frame_size,frame);
printf("Enter the number of references: ");
scanf("%d",&number_of_references);
int reference[number_of_references];
for(i=0;i<number_of_references;i++)
{
scanf("%d",&reference[i]);
add_reference(frame_size,frame,reference[i],i,number_of_references,reference);
}
printf("\nNumber of Page faults: %d \nNumber of Page hits: %d\n",faults,hits );
printf("\nMiss ratio: %f\nHit ratio: %f\n",((double)faults/number_of_references),((double)hits/number_of_references));
}
Editor is loading...
Leave a Comment