programming-examples/c++/Others/Cpu scheduling program in c++.cpp
2019-11-15 12:59:38 +01:00

588 lines
8.3 KiB
C++

Cpu scheduling program in c++
The program will help "HOW TO INTERACT Cpu scheduling program in c++"
Code :
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
class cpuschedule
{
int n,Bu[20];
float Twt,Awt,A[10],Wt[10],w;
public:
//Getting the No of processes & burst time
void Getdata();
//First come First served Algorithm
void Fcfs();
//Shortest job First Algorithm
void Sjf();
//Shortest job First Algorithm with Preemption
void SjfP();
//Shortest job First Algorithm with NonPreemption
void SjfNp();
//Round Robin Algorithm
void RoundRobin();
//Priority Algorithm
void Priority();
};
// Implementation file for Cpu scheduling
#include "cpuh.h"
//Getting no of processes and Burst time
void cpuschedule::Getdata()
{
int i;
cout<<"
Enter the no of processes:";
cin>>n;
for(i=1;i<=n;i++)
{
cout<<"
Enter The BurstTime for Process p"<<i<<"= ";
cin>>Bu[i];
}
}
//First come First served Algorithm
void cpuschedule::Fcfs()
{
int i,B[10];
Twt=0.0;
for(i=1;i<=n;i++)
{
B[i]=Bu[i];
cout<<"
Burst time for process p"<<i<<"= ";
cout<<B[i];
}
Wt[1]=0;
for(i=2;i<=n;i++)
{
Wt[i]=B[i-1]+Wt[i-1];
}
//Calculating Average Weighting Time
for(i=1;i<=n;i++)
Twt=Twt+Wt[i];
Awt=Twt/n;
cout<<"
Total Weighting Time="<<Twt;
cout<<"
Average Weighting Time="<<Awt<<"
";
}
//Shortest job First Algorithm
void cpuschedule::Sjf()
{
int i,j,temp,B[10];
Twt=0.0;
for(i=1;i<=n;i++)
{
B[i]=Bu[i];
cout<<"
Burst time for process p"<<i<<"= ";
cout<<B[i];
}
for(i=n;i>=1;i--)
{
for(j=1;j<=n;j++)
{
if(B[j-1]>B[j])
{
temp=B[j-1];
B[j-1]=B[j];
B[j]=temp;
}
}
}
Wt[1]=0;
for(i=2;i<=n;i++)
{
Wt[i]=B[i-1]+Wt[i-1];
}
//calculating Average Weighting Time
for(i=1;i<=n;i++)
Twt=Twt+Wt[i];
Awt=Twt/n;
cout<<"
Total Weighting Time="<<Twt;
cout<<"
Average Weighting Time="<<Awt<<"
";
}
//Shortest job First Algorithm with NonPreemption
void cpuschedule::SjfNp()
{
int i,B[10],Tt=0,temp,j;
char S[10];
float A[10],temp1,t;
Twt=0.0;
w=0.0;
for(i=1;i<=n;i++)
{
B[i]=Bu[i];
cout<<"
Burst time for process p"<<i<<"= ";
cout<<B[i];
S[i]='T';
Tt=Tt+B[i];
cout<<"
Enter the Arrival Time for"<<i<<"th process= ";
cin>>A[i];
}
for(i=n;i>=1;i--)
{
for(j=3;j<=n;j++)
{
if(B[j-1]>B[j])
{
temp=B[j-1];
temp1=A[j-1];
B[j-1]=B[j];
A[j-1]=A[j];
B[j]=temp;
A[j]=temp1;
}
}
}
for(i=1;i<=n;i++)
{
cout<<"
p"<<i<<" "<<B[i]<<" "<<A[i];
}
//For the 1st process
Wt[1]=0;
w=w+B[1];
t=w;
S[1]='F';
while(w<Tt)
{
i=2;
while(i<=n)
{
if(S[i]=='T'&&A[i]<=t)
{
Wt[i]=w;
cout<<"
WT"<<i<<"="<<Wt[i];
S[i]='F';
w=w+B[i];
t=w;
i=2;
}
else
i++;
}
}
for(i=1;i<=n;i++)
cout<<"
Wt"<<i<<"=="<<Wt[i];
//calculating average weighting Time
for(i=1;i<=n;i++)
Twt=Twt+(Wt[i]-A[i]);
Awt=Twt/n;
cout<<"Total Weighting Time="<<Twt<<"
";
cout<<"Average Weighting Time="<<Awt<<"
";
}
//Priority Algorithm
void cpuschedule::Priority()
{
int i,B[10],P[10],j;
w=0.0;
int max;
Twt=0.0;
max=1;
for(i=1;i<=n;i++)
{
B[i]=Bu[i];
cout<<"
Burst time for process p"<<i<<"= ";
cout<<B[i];
cout<<"
Enter the priority for process P"<<i<<"= ";
cin>>P[i];
if(max<P[i])
max=P[i];
}
j=1;
while(j<=max)
{
i=1;
while(i<=n)
{
if(P[i]==j)
{
Wt[i]=w;
w=w+B[i];
}
i++;
}
j++;
}
//calculating average weighting Time
for(i=1;i<=n;i++)
Twt=Twt+Wt[i];
Awt=Twt/n;
cout<<"Total Weighting Time="<<Twt<<"
";
cout<<"Average Weighting Time="<<Awt<<"
";
}
//Shortest job First Algorithm with Preemption
void cpuschedule::SjfP()
{
int i,j,m,Wt[10],k,B[10],A[10],Tt=0,Wtm[10],temp;
char S[20],start[20];
int max=0,Time=0,min;
float Twt=0.0,Awt;
for(i=1;i<=n;i++)
{
B[i]=Bu[i];
cout<<"
Burst time for process P"<<i<<"= "<<B[i];
if(B[i]>max)
max=B[i];
Wt[i]=0;
S[i]='T';
start[i]='F';
Tt=Tt+B[i];
cout<<"
Enter the Arrival Time for"<<i<<"th process= ";
cin>>A[i];
if(A[i]>Time)
Time=A[i];
}
//cout<<"
Max="<<max;
int w=0,flag=0,t=0;
i=1;
while(t<Time)
{
if(A[i]<=t && B[i]!=0)
{
if(flag==0)
{
Wt[i]=Wt[i]+w;
cout<<"
Wt["<<i<<"]="<<Wt[i];
}
B[i]=B[i]-1;
if(B[i]==0)
S[i]='F';
start[i]='T';
t++;
w=w+1;
if(S[i]!='F')
{
j=1;flag=1;
while(j<=n && flag!=0)
{
if(S[j]!='F' && B[i]>B[j] && A[j]<=t && i!=j )
{
flag=0;
Wt[i]=Wt[i]-w;
i=j;
}
else
{
flag=1;
}
j++;
}
}
else
{
i++;
j=1;
while(A[j]<=t &&j<=n)
{
if(B[i]>B[j] && S[j]!='F')
{
flag=0;
i=j;
}
j++;
}
}
}
else
if(flag==0)
i++;
}
cout<<"
Printing remaining burst time
";
for(i=1;i<=n;i++)
cout<<"
B["<<i<<"]="<<B[i];
cout<<"
";
while(w<Tt)
{
min=max+1;
i=1;
while(i<=n)
{
if(min>B[i] && S[i]=='T')
{
min=B[i];
j=i;
}
i++;
}
i=j;
if(w==Time && start[i]=='T')
{
w=w+B[i];
S[i]='F';
}
else
{
Wt[i]=Wt[i]+w;
w=w+B[i];
S[i]='F';
}
}
cout<<"Weight info
";
for(i=1;i<=n;i++)
cout<<"
WT["<<i<<"]="<<Wt[i];
cout<<"after subtracting arrival time
";
for(i=1;i<=n;i++)
{
Wt[i]=Wt[i]-A[i];
cout<<"
WT["<<i<<"]="<<Wt[i];
}
//Calculating Average Weighting time
for(i=1;i<=n;i++)
Twt=Twt+Wt[i];
Awt=Twt/n;
cout<<"
Average Weighting Time="<<Awt;
}
//Round Robin Algorithm
void cpuschedule::RoundRobin()
{
int i,j,tq,k,B[10],Rrobin[10][10],count[10];
int max=0;
int m;
Twt=0.0;
for(i=1;i<=n;i++)
{
B[i]=Bu[i];
cout<<"
Burst time for process p"<<i<<"= ";
cout<<B[i];
if(max<B[i])
max=B[i];
Wt[i]=0;
}
cout<<"
Enter the Time Quantum=";
cin>>tq;
//TO find the dimension of the Rrobin array
m=max/tq+1;
//initializing Rrobin array
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
Rrobin[i][j]=0;
}
}
//placing value in the Rrobin array
i=1;
while(i<=n)
{
j=1;
while(B[i]>0)
{
if(B[i]>=tq)
{
B[i]=B[i]-tq;
Rrobin[i][j]=tq;
j++;
}
else
{
Rrobin[i][j]=B[i];
B[i]=0;
j++;
}
}
count[i]=j-1;
i++;
}
cout<<"Display
";
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
cout<<"Rr["<<i<<","<<j<<"]="<<Rrobin[i][j];
cout<<" ";
}
cout<<"
";
}
//calculating weighting time
int x=1;
i=1;
while(x<=n)
{
for(int a=1;a<x;a++)
{
Wt[x]=Wt[x]+Rrobin[a][i];
}
i=1;
int z=x;
j=count[z];
k=1;
while(k<=j-1)
{
if(i==n+1)
{
i=1;
k++;
}
else
{
if(i!=z)
{
Wt[z]=Wt[z]+Rrobin[i][k];
}
i++;
}
}
x++;
}
for(i=1;i<=n;i++)
cout<<"
Weighting Time for process P"<<i<<"="<<Wt[i];
//calculating Average Weighting Time
for(i=1;i<=n;i++)
Twt=Twt+Wt[i];
Awt=Twt/n;
cout<<"
Total Weighting Time="<<Twt;
cout<<"
Average Weighting Time="<<Awt<<"
";
}
//Application file for cpu Scheduling
#include "cpuh.h"
void main()
{
int ch,cho;
cpuschedule c;
do
{
cout<<" MENU
";
cout<<"1.Getting BurstTime
";
cout<<"2.FirstComeFirstServed
";
cout<<"3.ShortestJobFirst
";
cout<<"4.RoundRobin
";
cout<<"5.Priority
";
cout<<"6.EXIT
";
cout<<"Enter your choice
";
cin>>ch;
switch(ch)
{
case 1:
c.Getdata();
break;
case 2:
cout<<"FIRST COME FIRST SERVED SCHEDULING
";
c.Fcfs();
break;
case 3:
cout<<"SHORTEST JOB FIRST SCHEDULING
";
do
{
cout<<"1.SJF-Normel
";
cout<<"2.SJF-Preemptive
";
cout<<"3.SJF-NonPreemptive
";
cout<<"Enter your choice
";
cin>>cho;
switch(cho)
{
case 1:
c.Sjf();
break;
case 2:
c.SjfP();
break;
case 3:
c.SjfNp();
break;
}
}while(cho<=3);
break;
case 4:
cout<<"ROUND ROBIN SCHEDULING
";
c.RoundRobin();
break;
case 5:
cout<<"PRIORITY SCHEDULING
";
c.Priority();
break;
case 6:
break;
}
}while(ch<=5);
}