15 Program to demonstrate Shortest Job First (SJF) Preemptive CPU Scheduling Algorithm

Program:

#include<stdio.h>

struct Process
{             
    int id,WT,AT,BT,TAT;
    // WT - Waiting Time
    // AT - Arrival Time
    // BT - Burst Time
    // TAT - TurnAroundTime
};

int main()
{
    freopen("input.txt","r",stdin);
    int n,temp[10];
    int count=0,t=0,short_P;
    float total_WT=0, total_TAT=0,Avg_WT,Avg_TAT;

    printf("Enter the number of the process\n");
    scanf("%d",&n);
    
    struct Process a[10], a1[10];

    printf("Enter the arrival time and burst time of the process\n");
    printf("AT WT\n");

    for(int i=0;i<n;i++)
    {
        a[i].id = i+1;
        scanf("%d%d",&a[i].AT,&a[i].BT);
        
        // copying the burst time in
        // a temp array for the further use
        // in calculation of WT
        temp[i]=a[i].BT;
    }
    
    printf("\n\n Input Data:");
    printf("\n\nID \t AT \t BT \n\n");
    for(int i =0;i<n;i++)
    {
        printf("%d \t %d \t %d\n",a[i].id,a[i].AT,a[i].BT);
    }

    // we initialize the burst time
    // of a process with the maximum
    a[9].BT=10000;

    // loop will be execute until all the process
    // complete so we use count!= number of 
    // the process

    // t = time 
    for(t=0;count!=n;t++)
    {
        // for finding min burst
        // it is useful 
        short_P=9;

        for(int i=0;i<n;i++)
        {
            // If Process is shortest 
            // and process arrived and It is remain to execute i.e Burst time greater than 0
            // So assign that as shortest process

            if( (a[i].AT <= t && a[i].BT>0) &&  a[i].BT <= a[short_P].BT)
            {
                short_P=i; 
            }   
        }

        // Reduce burst time by 1 and check again
        a[short_P].BT = a[short_P].BT-1;
        
        // if any process is completed
        if(a[short_P].BT==0)
        {
            // one process complete
            a[short_P].WT= t + 1 - a[short_P].AT - temp[short_P]; 
        
            a[short_P].TAT= t + 1 - a[short_P].AT; 
            
            a1[count] = a[short_P];

            count++;
            
            // total calculation
            total_WT=total_WT+a[short_P].WT;
            total_TAT=total_TAT+a[short_P].TAT;
        }

    }

    Avg_WT=total_WT/n;
    Avg_TAT=total_TAT/n;
    

    // printing of the answer
    printf("\n\n After Applying SJF Preemptive:");
    printf("\n\nId \t AT \t BT \t WT \t TAT\n");
    for(int i=0;i<n;i++)
    {  
        printf("%d\t%d\t%d\t%d\t%d\n",a1[i].id,a1[i].AT,temp[i],a1[i].WT,a1[i].TAT);
    }

    printf("Avg waiting time of the process is %f\n",Avg_WT);
    printf("Avg turn around time of the process %f\n",Avg_TAT);
    
}


    

Output:

SJF-Preemptive


Previous
Next Post »