Shortest Job First (SJF)
- Best approach to minimize waiting time.
- Impossible to implement
- Processer should know in advance how much time process will take
import java.util.Scanner;
class Sjf
{
Scanner sc=new Scanner(System.in);
class Sjf
{
Scanner sc=new Scanner(System.in);
int MaxProcess=sc.nextInt();
int Pid[]=new int[MaxProcess];
int Burst[]=new int[MaxProcess];
int Wait[]=new int[MaxProcess];
int Trt[]=new int[MaxProcess];
int Arrival[]=new int[MaxProcess];
void input()
{
for(int i=0;i<MaxProcess;i++)
{
System.out.format("enter the process-id for this %d",(i+1));
Pid[i]=sc.nextInt();
System.out.format("enter the burst time for this p%d",Pid[i]);
Burst[i]=sc.nextInt();
System.out.format("enter the arrival time for this p%d",Pid[i]);
Arrival[i]=sc.nextInt();
}
System.out.println("the process-id and burst time is:\n");
System.out.println("process-id\t\tbursttime\t\tarrival\n");
for(int i=0;i<MaxProcess;i++)
{
System.out.format("%d\t\t\t%d\t\t\t%d\n",Pid[i],Burst[i],Arrival[i]);
}
}
void turnAroundTime()
{
for(int i=0;i<MaxProcess;i++)
{
Trt[i]=Wait[i]+Burst[i];
}
}
void waitingTime()
{
int i,Total;
Wait[0]=0;
Total=Arrival[0];
for(i=1;i<MaxProcess;i++)
{
Total=Total+Burst[i-1];
Wait[i]=Total-Arrival[i];;
}
}
void displaySort()
{
System.out.println("after sorting on the basis of arrival time:");
float sum1=0,sum2=0;
System.out.println("process-id\t bursttime\t arrival \t waiting time\t turnaroundtime\n");
for(int i=0;i<MaxProcess;i++)
System.out.format("%d\t\t\t%d\t\t%d\t\t%d\t\t%d\n",Pid[i],Burst[i],Arrival[i],Wait[i],Trt[i]);
}
void display()
{
float sum1=0,sum2=0;
System.out.println("process-id\t bursttime\t arrival \t waiting time\t turnaroundtime\n");
for(int i=0;i<MaxProcess;i++)
System.out.format("%d\t\t\t%d\t\t%d\t\t%d\t\t%d\n",Pid[i],Burst[i],Arrival[i],Wait[i],Trt[i]);
for(int i=0;i<MaxProcess;i++)
{
sum1=sum1+Wait[i];
sum2=sum2+Trt[i];
}
System.out.format("waiting time is %f\n",sum1/MaxProcess);
System.out.format("totalrunaroundtime is %f\n",sum2/MaxProcess);
}
void sort()
{
for(int i=0;i<MaxProcess-1;i++)
{
for(int j=i+1;j<MaxProcess;j++)
{
if(Burst[i]>Burst[j])
{
int temp1=Arrival[i];
Arrival[i]=Arrival[j];
Arrival[j]=temp1;
int temp2=Burst[i];
Burst[i]=Burst[j];
Burst[j]=temp2;
int temp3=Pid[i];
Pid[i]=Pid[j];
Pid[j]=temp3;
}
}
}
int temp=0;
int min=Arrival[0];
for(int i=1;i<MaxProcess;i++)
{
if(min>Arrival[i])
{
min=Arrival[i];
temp=i;
}
}
int f1=Arrival[temp];
int f2=Burst[temp];
int f3=Pid[temp];
for(int i=temp;i>0;i--)
{
Arrival[i]=Arrival[i-1];
Burst[i]=Burst[i-1];
Pid[i]=Pid[i-1];
}
Burst[0]=f2;
Arrival[0]=f1;
Pid[0]=f3;
}
void drawGanttChart()
{
System.out.println();
for(int i=0;i<MaxProcess;i++)
{
for(int j=0;j<Burst[i];j++)
System.out.print("|");
System.out.format(" p%d ",Pid[i]);
}
}
}
class SjfTest
{
public static void main(String args[])
{
System.out.println("enter the total number of process:");
Sjf s1=new Sjf();
s1.input();
s1.sort();
s1.displaySort();
s1.waitingTime();
s1.turnAroundTime();
s1.display();
s1.drawGanttChart();
}
No comments:
Post a Comment