opt
#include <stdio.h>
int numberOfRef = 0;
int ref[20];
int numberOfFrame = 0;
int frame[20];
int table[20][20];
int pageFault = 0;
int main(void)
{
void accept(void);
void opt(void);
void display(void);
accept();
opt();
display();
return(0);
}
void accept(void)
{
int i = 0;
int r = 0;
printf("How Many References You Have : ");
scanf("%d",&numberOfRef);
for(r = 0; r < numberOfRef;r++)
{
printf("Enter The Page Reference : ");
scanf("%d",&ref[r]);
}
printf("How Many Frames : ");
scanf("%d",&numberOfFrame);
for(i = 0; i < numberOfFrame;i++)
{
frame[i] = -1;
}
}
void opt(void)
{
int search(int,int *);
int getPos(int);
int i = 0;
int pos = 0;
int r = 0;
int found = 0;
for(r = 0; r < numberOfRef ; r++)
{
found = search(ref[r],frame);
if(found == -1)
{
pageFault++;
pos = getPos(r);
frame[pos] = ref[r];
// copying frames into table
for(i = 0; i < numberOfFrame;i++)
{
table[i][r] = frame[i];
}
}
else
{
for(i = 0; i < numberOfFrame;i++)
{
table[i][r] = frame[i];
}
}
}
}
int search(int pno,int *frame)
{
int i;
for(i = 0; i < numberOfFrame;i++)
{
if(frame[i] == pno)
{
return(i);
}
}
return(-1);
}
int getPos(int r)
{
int cnt,tpos,i,k,tframe[20];
for(i = 0; i < numberOfFrame;i++)
{
if(frame[i] == -1)
{
return(i);
}
tframe[i] = frame[i];
}
cnt = 0;
for (k = r + 1; k < numberOfRef; k++)
{
tpos = search(ref[k], tframe);
if (tpos != -1)
{
cnt++;
tframe[tpos] = -1;
if (cnt == numberOfFrame)
{
return(tpos);
}
}
}
for(k = r-1 ; k >= 0 ; k--)
{
tpos = search(ref[k],frame);
if(tpos != -1)
{
cnt++;
tframe[tpos] = -1;
if(cnt == numberOfFrame)
{
return(tpos);
}
}
}
}
void display(void)
{
int i,r;
printf("Refereence String : \n");
for(r = 0; r < numberOfRef;r++)
{
printf("%2d ",ref[r]);
}
printf("\n");
printf("------------------------------------------------------------\n");
for(i =0; i < numberOfFrame;i++)
{
for(r = 0; r < numberOfRef;r++)
{
printf("%2d ",table[i][r]);
}
printf("\n");
}
printf("\n\n number of Page Fault : %d\n",pageFault);
}