Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Implementation of CPU scheduler in java language. each process is assigned a arr

ID: 3568223 • Letter: I

Question

Implementation of CPU scheduler in java language. each process is assigned a arrival time and CPU burst.

If multiple processes arrive at the same time, the one that come early in the input goes first.

In Round Robin, if there is a tie between a process whose quantum has just expired and come back to ready queue and a new process that has just arrived, the new process goes first.

I need the arival time and turn around time ant their average respectively in table

Example i need like this

Input Example

*******************************************

process arrival_time cpu_burst

--------------------------------------------------

1     0   7

2     2   6

3     4   1

4     5   4

*******************************************

Output Example

*******************************************

First Come First Served Scheduling

proc t_start t_end

-------------------------

1   0     7

2   7     13

3   13    14

4   14   18

Shortest Job First Scheduling

proc t_start t_end

-------------------------

1   0     7

3   7     8

4   8     12

2   12   18

Shortest Remaining Job First Scheduling

proc t_start t_end

-------------------------

1   0     4

3   4     5

1   5     8

4   8     12

2   12   18

Round Robin Scheduling (time quantum = 3)

proc t_start t_end

-------------------------

1   0     3

2   3     6

1   6     9

3   9     10

4   10   13

2   13   16

1   16   17

4   17   18

Explanation / Answer

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);
}