Non Pre Emptive Priority Scheduling Program In C Code Example


Example 1: c program to implement non preemptive priority scheduling algorithm

#include<stdio.h>   int main() {     int bt[20],p[20],wt[20],tat[20],pr[20],i,j,n,total=0,pos,temp,avg_wt,avg_tat;     printf("Enter Total Number of Process:");     scanf("%d",&n);       printf("\nEnter Burst Time and Priority\n");     for(i=0;i<n;i++)     {         printf("\nP[%d]\n",i+1);         printf("Burst Time:");         scanf("%d",&bt[i]);         printf("Priority:");         scanf("%d",&pr[i]);         p[i]=i+1;           //contains process number     }       //sorting burst time, priority and process number in ascending order using selection sort     for(i=0;i<n;i++)     {         pos=i;         for(j=i+1;j<n;j++)         {             if(pr[j]<pr[pos])                 pos=j;         }           temp=pr[i];         pr[i]=pr[pos];         pr[pos]=temp;           temp=bt[i];         bt[i]=bt[pos];         bt[pos]=temp;           temp=p[i];         p[i]=p[pos];         p[pos]=temp;     }       wt[0]=0;	//waiting time for first process is zero       //calculate waiting time     for(i=1;i<n;i++)     {         wt[i]=0;         for(j=0;j<i;j++)             wt[i]+=bt[j];           total+=wt[i];     }       avg_wt=total/n;      //average waiting time     total=0;       printf("\nProcess\t    Burst Time    \tWaiting Time\tTurnaround Time");     for(i=0;i<n;i++)     {         tat[i]=bt[i]+wt[i];     //calculate turnaround time         total+=tat[i];         printf("\nP[%d]\t\t  %d\t\t    %d\t\t\t%d",p[i],bt[i],wt[i],tat[i]);     }       avg_tat=total/n;     //average turnaround time     printf("\n\nAverage Waiting Time=%d",avg_wt);     printf("\nAverage Turnaround Time=%d\n",avg_tat);   	return 0; }

Example 2: preemptive priority scheduling implementation in c

#include <iostream> #include <algorithm>  #include <iomanip> #include <string.h>  using namespace std;  struct process {     int pid;     int arrival_time;     int burst_time;     int priority;     int start_time;     int completion_time;     int turnaround_time;     int waiting_time;     int response_time; };  int main() {      int n;     struct process p[100];     float avg_turnaround_time;     float avg_waiting_time;     float avg_response_time;     float cpu_utilisation;     int total_turnaround_time = 0;     int total_waiting_time = 0;     int total_response_time = 0;     int total_idle_time = 0;     float throughput;     int burst_remaining[100];     int is_completed[100];     memset(is_completed,0,sizeof(is_completed));      cout << setprecision(2) << fixed;      cout<<"Enter the number of processes: ";     cin>>n;      for(int i = 0; i < n; i++) {         cout<<"Enter arrival time of process "<<i+1<<": ";         cin>>p[i].arrival_time;         cout<<"Enter burst time of process "<<i+1<<": ";         cin>>p[i].burst_time;         cout<<"Enter priority of the process "<<i+1<<": ";         cin>>p[i].priority;         p[i].pid = i+1;         burst_remaining[i] = p[i].burst_time;         cout<<endl;     }      int current_time = 0;     int completed = 0;     int prev = 0;      while(completed != n) {         int idx = -1;         int mx = -1;         for(int i = 0; i < n; i++) {             if(p[i].arrival_time <= current_time && is_completed[i] == 0) {                 if(p[i].priority > mx) {                     mx = p[i].priority;                     idx = i;                 }                 if(p[i].priority == mx) {                     if(p[i].arrival_time < p[idx].arrival_time) {                         mx = p[i].priority;                         idx = i;                     }                 }             }         }          if(idx != -1) {             if(burst_remaining[idx] == p[idx].burst_time) {                 p[idx].start_time = current_time;                 total_idle_time += p[idx].start_time - prev;             }             burst_remaining[idx] -= 1;             current_time++;             prev = current_time;                          if(burst_remaining[idx] == 0) {                 p[idx].completion_time = current_time;                 p[idx].turnaround_time = p[idx].completion_time - p[idx].arrival_time;                 p[idx].waiting_time = p[idx].turnaround_time - p[idx].burst_time;                 p[idx].response_time = p[idx].start_time - p[idx].arrival_time;                  total_turnaround_time += p[idx].turnaround_time;                 total_waiting_time += p[idx].waiting_time;                 total_response_time += p[idx].response_time;                  is_completed[idx] = 1;                 completed++;             }         }         else {              current_time++;         }       }      int min_arrival_time = 10000000;     int max_completion_time = -1;     for(int i = 0; i < n; i++) {         min_arrival_time = min(min_arrival_time,p[i].arrival_time);         max_completion_time = max(max_completion_time,p[i].completion_time);     }      avg_turnaround_time = (float) total_turnaround_time / n;     avg_waiting_time = (float) total_waiting_time / n;     avg_response_time = (float) total_response_time / n;     cpu_utilisation = ((max_completion_time - total_idle_time) / (float) max_completion_time )*100;     throughput = float(n) / (max_completion_time - min_arrival_time);      cout<<endl<<endl;      cout<<"#P\t"<<"AT\t"<<"BT\t"<<"PRI\t"<<"ST\t"<<"CT\t"<<"TAT\t"<<"WT\t"<<"RT\t"<<"\n"<<endl;      for(int i = 0; i < n; i++) {         cout<<p[i].pid<<"\t"<<p[i].arrival_time<<"\t"<<p[i].burst_time<<"\t"<<p[i].priority<<"\t"<<p[i].start_time<<"\t"<<p[i].completion_time<<"\t"<<p[i].turnaround_time<<"\t"<<p[i].waiting_time<<"\t"<<p[i].response_time<<"\t"<<"\n"<<endl;     }     cout<<"Average Turnaround Time = "<<avg_turnaround_time<<endl;     cout<<"Average Waiting Time = "<<avg_waiting_time<<endl;     cout<<"Average Response Time = "<<avg_response_time<<endl;     cout<<"CPU Utilization = "<<cpu_utilisation<<"%"<<endl;     cout<<"Throughput = "<<throughput<<" process/unit time"<<endl;   }  /*  AT - Arrival Time of the process BT - Burst time of the process ST - Start time of the process CT - Completion time of the process TAT - Turnaround time of the process WT - Waiting time of the process RT - Response time of the process  Formulas used:  TAT = CT - AT WT = TAT - BT RT = ST - AT  */  }

Comments

Popular posts from this blog

Are Regular VACUUM ANALYZE Still Recommended Under 9.1?

Can Feynman Diagrams Be Used To Represent Any Perturbation Theory?