/* Aim: To implement SRTF Scheduling algorithm Author: Rahul kumar */ #include <stdio.h> #define max 100 int main(){ int n,AT[max],WT[max],ET[max],TAT[max],CT[max],PID[max],RT[max],i,min,j,temp,maxCT; double avg_WT=0,avg_TAT=0,thrpt; printf("Please enter number of processes\n"); scanf("%d",&n); if(n>max){ printf("Limit exceeded."); } else if(n<1){ printf("No process exist or negative input."); } else{ for(i=0;i< n;i++){ printf("Enter details for process %d:\n",i+1); printf("Arrival Time: "); scanf("%d",&AT[i]); printf("Execution Time: "); scanf("%d",&ET[i]); PID[i]=i+1; } //sorting for arrival time for(i=0;i< -1;i++){ min=i; for(j=i+1;j< n;j++){ if(AT[j]< AT[min]){ min=j; } } temp=AT[i]; AT[i]=AT[min]; AT[min]=temp; temp=ET[i]; ET[i]=ET[min]; ET[min]=temp; temp=PID[i]; PID[i]=PID[min]; PID[min]=temp; } for(i=0;i< n;i++){ RT[i]=ET[i]; } RT[n]=9999; j=0; for(min=0;j!=n;min++){ temp=n; for(i=0;i< n;i++){ if(AT[i]<=min && RT[i]< RT[temp] && RT[i]>0){ temp=i; } } RT[temp]--; if(RT[temp]==0){ j++; thrpt=min+1; CT[temp]=thrpt; if(maxCT< thrpt) { maxCT=thrpt; } } } printf("Process\tArrival Time\tExecution Time\tCompletion Time\tTAT\tWaiting Time\n"); for(i=0;i< n;i++){ TAT[i]=CT[i]-AT[i]; WT[i]=TAT[i]-ET[i]; avg_TAT=avg_TAT+TAT[i]; avg_WT=avg_WT+WT[i]; printf("P%d\t%d\t\t%d\t\t%d\t\t%d\t%d\n",PID[i],AT[i],ET[i],CT[i],TAT[i],WT[i]); } avg_TAT=(double)avg_TAT/n; avg_WT=(double)avg_WT/n; thrpt=(double)n/(maxCT-AT[0]); printf("\nAvg.TAT=%.2f\n",avg_TAT); printf("Avg.WT=%.2f\n",avg_WT); printf("Throughput=%.2f",thrpt); } return 0; }
Output:
Please enter number of processes 5 Enter details for process 1: Arrival Time: 3 Execution Time: 4 Enter details for process 2: Arrival Time: 5 Execution Time: 3 Enter details for process 3: Arrival Time: 2 Execution Time: 8 Enter details for process 4: Arrival Time: 7 Execution Time: 1 Enter details for process 5: Arrival Time: 3 Execution Time: 6 Process Arrival Time Execution Time Completion Time TAT Waiting Time P3 2 8 24 22 14 P1 3 4 7 4 0 P5 3 6 17 14 8 P2 5 3 11 6 3 P4 7 1 8 1 0 Avg.TAT=9.40 Avg.WT=5.00 Throughput=0.23