/* Objective: To implement Priority based Pre-emptive 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],Priority[max],RT[max],min,maxCT=0,i,count,j,temp; double avg_WT,avg_TAT,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("\nEnter 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; printf("Priority:"); scanf("%d",&Priority[i]); } for(i=0;i< n-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; temp=Priority[i]; Priority[i]=Priority[min]; Priority[min]=temp; } for(i=0;i< n;i++){ RT[i]=ET[i]; } RT[n]=9999; printf("Process\tPriority\tArrival Time\tBurst Time\tCompletion Time\tTAT\tWaiting Time\n"); count=0; for(i=AT[0];count!=n;i++){ min=n; for(j=0;j< n;j++){ if(AT[j]< =i && RT[j]>0 && Priority[j]>Priority[min]){ min=j; } } RT[min]--; if(RT[min]==0){ count++; temp=i+1; CT[min]=temp; TAT[min]=CT[min]-AT[min]; WT[min]=TAT[min]-ET[min]; printf("P%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t%d\n",PID[min],Priority[min],AT[min],ET[min],CT[min],TAT[min],WT[min]); if(temp>maxCT){ maxCT=temp; } avg_TAT=avg_TAT+TAT[min]; avg_WT=avg_WT+WT[min]; } } 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 Priority:2 Enter details for process 2: Arrival Time:7 Execution Time:5 Priority:4 Enter details for process 3: Arrival Time:5 Execution Time:3 Priority:4 Enter details for process 4: Arrival Time:2 Execution Time:3 Priority:1 Enter details for process 5: Arrival Time:4 Execution Time:5 Priority:3 Process Priority AT BT CT TAT WT P3 4 5 3 8 3 0 P2 4 7 5 13 6 1 P5 3 4 5 17 13 8 P1 2 3 4 20 17 13 P4 1 2 3 22 20 17 Avg.TAT=11.80 Avg.WT=7.80 Throughput=0.25