Welcome to the World of Programming

Welcome to the World of Programming

Search this blog

FIFO LRU LFU Generalised Input Program

#include<iostream>
using namespace std;

int c=0;
char b[5][20];

int fifo(char a[],int p,int n){
int i=0,j=0,m,flag=0,rear=0,pf=0;
char q[p];
for(i=0;i<p;i++){
q[i]='-';
}
c=0;
for(i=0;i<p;i++){
for(j=0;j<20;j++){
b[i][j]='\0';
}
}
j=0;
for(i=0;i<n;i++){
while(j<p){
if(q[j]==a[i]){
flag=1;
for(m=0;m<p;m++){
b[m][c]=q[m];
}
c++;
break;
}
j++;
}
if(flag==0){
pf++;
if(rear<p){
q[rear]=a[i];
rear++;
}
else
{
rear=0;
q[rear]=a[i];
rear++;
}
for(j=0;j<p;j++){
b[j][c]=q[j];
}
c++;
}
j=0;
flag=0;
}
return pf;
}

int lru(char p[],int f,int n){
int i=0,j=0,k=0,m,l=0,flag1=0,flag2=0,pf=0,index=0;
char fr[f],fs[f];
for(i=0;i<f;i++){
fr[i]='-';
}
c=0;
for(i=0;i<f;i++){
for(j=0;j<20;j++){
b[i][j]='\0';
}
}
for(j=0;j<n;j++){
flag1=0;flag2=0;
for(i=0;i<f;i++){
if(fr[i]==p[j]){
flag1=1;
flag2=1;
for(m=0;m<f;m++){
b[m][c]=fr[m];
}
c++;
break;
}
}
if(flag1==0){
for(i=0;i<f;i++){
if(fr[i]=='-'){
pf++;
fr[i]=p[j];
flag2=1;
for(i=0;i<f;i++){
b[i][c]=fr[i];
}
c++;
break;
}
}
}
if(flag2==0){
for(i=0;i<f;i++)
fs[i]=0;
for(k=j-1,l=1;l<=f-1;l++,k--){
for(i=0;i<f;i++){
if(fr[i]==p[k])
fs[i]=1;
}
}
for(i=0;i<f;i++){
if(fs[i]==0)
index=i;
}
fr[index]=p[j];
pf++;
for(i=0;i<f;i++){
b[i][c]=fr[i];
}
c++;
}
}
return pf;
}

int lfu(char p[],int f,int n){
int i=0,j=0,m,flag=0,val=0,pf=0,pos=0;
struct page{
char info;
int count;
};
struct page q[f];
while(j<f)
{
q[j].info='-';
q[j].count=-1;
j++;
}
c=0;
for(i=0;i<f;i++){
for(j=0;j<20;j++){
b[i][j]='\0';
}
}
for(i=0;i<n;i++)
{
val=q[0].count;
while(j<f)
{
if(p[i]==q[j].info)
{
q[j].count++;
flag=1;
for(m=0;m<f;m++){
b[m][c]=q[m].info;
}
c++;
break;
}
j++;
}
j=0;
if(flag==0)
{
pf++;
while(j<f)
{
if(q[j].count<val)
{
val=q[j].count;
pos=j;
}
j++;
}
q[pos].info=p[i];
q[pos].count=0;
pos=0;
for(j=0;j<f;j++){
b[j][c]=q[j].info;
}
c++;
}
j=0;
flag=0;
}
return pf;
}

int main(){
int n,frame,choice,fault1,fault2,fault3,i=0,j=0,k=0,count=0;
float prate1,prate2,prate3;
cout<<"Enter no of Pages :";
cin>>n;
char p[n];
cout<<"\nEnter the Page Sequence :"<<endl;
for(i=0;i<n;i++){
cin>>p[i];
}
cout<<"\nEnter Frame Size :"<<endl;
cin>>frame;
cout<<"\n\n";
cout<<"First In First Out :";
fault1=fifo(p,frame,n);
cout<<"\n";
for(i=0;i<frame;i++){
j=0;
cout<<"\n";
while(b[i][j]!='\0'){
cout<<b[i][j];
cout<<" ";
j++;
}
cout<<"\n";
}
cout<<"\n";
cout<<"Least Recently Used :";
fault2=lru(p,frame,n);
cout<<"\n";
for(i=0;i<frame;i++){
j=0;
cout<<"\n";
while(b[i][j]!='\0'){
cout<<b[i][j];
cout<<" ";
j++;
}
cout<<"\n";
}
cout<<"\n";
cout<<"Least Frequently Used :";
fault3=lfu(p,frame,n);
cout<<"\n";
for(i=0;i<frame;i++){
j=0;
cout<<"\n";
while(b[i][j]!='\0'){
cout<<b[i][j];
cout<<" ";
j++;
}
cout<<"\n";
}
cout<<"\n";
cout<<"The Page Fault in FIFO is :"<<fault1<<endl;
cout<<"The Page Fault in LRU is :"<<fault2<<endl;
cout<<"The Page Fault in LFU is :"<<fault3<<endl;
cout<<"\n\n";
prate1=(float)(fault1*100)/n;
prate2=(float)(fault2*100)/n;
prate3=(float)(fault3*100)/n;
cout<<"Page Fault rate in FIFO is :"<<prate1<<endl;
cout<<"Page Fault rate in LRU is :"<<prate2<<endl;
cout<<"Page Fault rate in LFU is :"<<prate3<<endl;
return 0;
}

No comments:

Post a Comment