Initial commit
This commit is contained in:
@@ -0,0 +1,587 @@
|
||||
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);
|
||||
}
|
||||
Reference in New Issue
Block a user