Write a program that will simulate nonpreemptive process sch
Solution
#include <stdio.h>
int waiting_time[10],burst_time[10],priority[10],arrival_time[10],tat[10],n;
float awt,atat;
void input()
{
printf(\"Enter Number of processes:\");
scanf(\"%d\",&n);
int i;
for(i=0;i<n;i++)
{
printf(\"\ Please Enter Burst Time of process %d:\",i+1);
scanf(\"%d\",&burst_time[i]);
printf(\"Please Enter Arrival Time of process %d:\",i+1);
scanf(\"%d\",&arrival_time[i]);
printf(\"Please Enter priority of the process %d:\",i+1);
scanf(\"%d\",&priority[i]);
}
}
void priority_scheduling()
{
int x,p[10],w[10],t[10],awt,atat,i,j;
printf(\"\ Shortest Job First Scheduling\");
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++) //sorting by priority of process
{
if(priority[i]<priority[j]) //if process i has lower priority than process j
{
x=priority[i];
priority[i]=priority[j];
priority[j]=x;
x=burst_time[i];
burst_time[i]=burst_time[j];
burst_time[j]=x;
x=p[i];
p[i]=p[j];
p[j]=x;
}
}
}
w[0]=0;
awt=0;
t[0]=burst_time[0];
atat=t[0];
for(i=1;i<n;i++) calculating wait time, turn around time
{
w[i]=t[i-1];
awt+=w[i];
t[i]=w[i]+burst_time[i];
atat+=t[i];
}
printf(\"\ \ Job \\t Burst Time \\t Wait Time \\t Turn Around Time Priority \ \");
for(i=0;i<n;i++)
printf(\"\ %d \\t\\t %d \\t\\t %d \\t\\t %d \\t\\t %d \ \",p[i],burst_time[i],w[i],t[i],priority[i]);
awt/=n;
atat/=n;
printf(\"\ Average Wait Time : %d \ \",awt);
printf(\"\ Average Turn Around Time : %d \ \",atat);
}
void SJF()
{
int i,p[10]={1,2,3,4,5,6,7,8,9,10},min,k=1,btime=0;
int temp,j,wt[10],tt[10],ta=0,sum=0;
float wavg=0,tavg=0,tsum=0,wsum=0;
printf(\"\ Shortest Job First Scheduling\");
/*Sorting According to Arrival Time*/
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(arrival_time[i]<arrival_time[j]) //sorting processes by arrival time
{
temp=p[j];
p[j]=p[i];
p[i]=temp;
temp=arrival_time[j];
arrival_time[j]=arrival_time[i];
arrival_time[i]=temp;
temp=burst_time[j];
burst_time[j]=burst_time[i];
burst_time[i]=temp;
}
}
}
for(j=0;j<n;j++)
{
btime=btime+burst_time[j];
min=burst_time[k];
for(i=k;i<n;i++)
{
if (btime>=arrival_time[i] && burst_time[i]<min)
{
temp=p[k];
p[k]=p[i];
p[i]=temp;
temp=arrival_time[k];
arrival_time[k]=arrival_time[i];
arrival_time[i]=temp;
temp=burst_time[k];
burst_time[k]=burst_time[i];
burst_time[i]=temp;
}
}
k++;
}
wt[0]=0;
for(i=1;i<n;i++)
{
sum=sum+burst_time[i-1];
wt[i]=sum-arrival_time[i];
wsum=wsum+wt[i];
}
wavg=(wsum/n);
for(i=0;i<n;i++)
{
ta=ta+burst_time[i];
tt[i]=ta-arrival_time[i];
tsum=tsum+tt[i];
}
tavg=(tsum/n);
printf(\"************************\");
printf(\"\ RESULT:-\");
printf(\"\ Process\\t Burst\\t Arrival\\t Waiting\\t Turn-around\" );
for(i=0;i<n;i++)
{
printf(\"\ p%d\\t %d\\t %d\\t\\t %d\\t\\t\\t%d\",p[i],burst_time[i],arrival_time[i],wt[i],tt[i]);
}
printf(\"\ \ AVERAGE WAITING TIME : %f\",wavg);
printf(\"\ AVERAGE TURN AROUND TIME : %f\",tavg);
}
void FCFS()
{
waiting_time[0]=0;
atat=tat[0]=burst_time[0];
int btt=burst_time[0];//to store total burst time sum
int i;
for(i=1;i<n;i++){
waiting_time[i]=btt-arrival_time[i];
btt+=burst_time[i];
awt+=waiting_time[i];
tat[i]= waiting_time[i]+burst_time[i];
atat+=tat[i];
}
atat/=n;
awt/=n;
printf(\"SR.\\tA.T.\\tB.T.\\tW.T.\\tT.A.T.\ \");
for(i=0;i<n;i++)
{
printf(\"%3d\\t%3d\\t%3d\\t%3d\\t%4d\ \",i+1,arrival_time[i],burst_time[i],waiting_time[i],tat[i]);
}
printf(\"Average Waiting Time: %f\ Average Turn Around Time:%f\",awt,atat);
}
int main()
{
printf(\"\ FCFS CPU Scheduling Algorithm\ \");
input();
FCFS();
SJF();
priority_scheduling();
}


