//PROGRAM FOR SHORTEST-JOB-FIRST(SJF) "CPU SCHEDULING ALGORITHM" WITH PRE_EMPTION
#include<stdio.h>
#include<conio.h>
int main()
{
int n,at[10], bt[10], ct[10], wt[10], tn =0, c, ta[10],tat[10];
//at-ArritvalTime::br-BurstTime::ct-CompletionTime::ta-TemporaryArray
//wt-WaitingTime::tat-TurnAroundTime::tn-CurrentTime(TimeNow)
// int i, j, k, tot, pc=0, pointer = 0, lp=-1;//lp-Last-executedProcess
int i, k, tot, pc=0, pointer = 0, lp=-1;//lp-Last-executedProcess
char pn[10][10];
printf("Enter the number of processes: ");
scanf("%d",&n);
printf("Enter <ProcessName> <ArrivalTime> <BurstTime>\n");
for(i=0;i<n;i++)
scanf("%s%d%d",&pn[i],&at[i],&bt[i]);
for(i=0; i<n; i++)
{
ct[i] = -1;
ta[i] = bt[i];
}
while(pc!=n)
{
k=0;
c = 0;
for(i=0; i<n; i++)
{
if(ct[i]<0 && at[i]<=tn)
c++;
}
if(c==0)
tn++;
else
{
pointer = 0;
while(at[pointer]>tn || ct[pointer]>0)
pointer++;
for(k=pointer+1; k<n; k++)
if( (at[k]<=tn && ct[k]<0) &&
( (bt[pointer]==bt[k] && k==lp) || bt[pointer]>bt[k] ) )
pointer = k;
if(ct[pointer]<0)
{
bt[pointer]--;
tn++;
if(bt[pointer]==0)
{
ct[pointer] = tn;
wt[pointer] = ct[pointer] - ( at[pointer]+ ta[pointer] );
tat[pointer] = ct[pointer] - at[pointer];
pc++;
}
}
lp = pointer;
}
}
printf("\nPN\tAT\tBT\tCT\tWT\tTAT\n");
for(i=0;i<n;i++)
printf("%s\t%d\t%d\t%d\t%d\t%d\n",pn[i],at[i],ta[i],ct[i],wt[i],tat[i]);
return 0;
}
/* SAMPLE OUTPUT
Enter the number of processes: 6
Enter <ProcessName> <ArrivalTime> <BurstTime>
p1 3 1
p2 1 4
p3 10 6
p4 25 10
p5 1 3
p6 12 3
PN AT BT CT WT TAT
p1 3 1 5 1 2
p2 1 4 9 4 8
p3 10 6 19 3 9
p4 25 10 35 0 10
p5 1 3 4 0 3
p6 12 3 15 0 3
*/
Thursday, 7 April 2016
SJF CPU Scheduling Algorithm (Preemptive)
Labels:
OS
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment