Hi all pls help me with the soln to this probelm, the catch is the interface (menu) needs to be Built in C++ as well.
any suggestions would be of great help as well.
thanks
It is a system written using a structured programming language (e.g. C, Turbo C) that simulates the following CPU Scheduling Algorithms:
• First Come First Serve
• Shortest Job First
• Round Robin
• Shortest Remaining Time First
The user must be given the option to choose from any of the algorithms (Menu). Jobs arrive in the queue through manual input with the following required information:
Job No. CPU Burst Time Arrival Time Status
1
2
3
4
5
Status can be Pending, Processing, Finished.
The system should be able to check for invalid inputs and provide appropriate error messages to the user.
The system then shows the movement of each job in the system (from the ready queue up to when it exits the system) plus drawing the GANTT Chart simultaneously.
At the end of the simulation, the system displays the following information:
• Waiting time for each job;
• Turnaround time for each job;
• Average waiting time for the system; and
• Average turnaround time for the system.
The system then asks the user if he wants to simulate the same algorithm, simulate another algorithm, or to quit the system.
Now that you posted the requirements of the program, what do you want from us? We will not write your program for you.
i want the source code of CPU scheduling algorithm ( FCFS, SJF, priority ) in C++ language i need tis for my mini project
And I'd like to have Bill Gates' $65 Million home :) (Actually not -- taxes and utilities are too expensive).
ENJOY BUDDY:)
CODE:
// Header file for Cpu scheduling
#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);
}// Header file for Cpu scheduling
#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);
}