#include<stdlib.h>
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
struct pro
{
int no;
int btime;
int atime;
int stime;
int etime;
int wtime;
int ttime;
int rtime;
}proc[100],junk;
void sort(int n)
{
pro temp;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
if(proc[j].atime>proc[j+1].atime)
{
temp=proc[j];
proc[j]=proc[j+1];
proc[j+1]=temp;
}
}
}
pro min(int n,int & t)
{ sort(n);
pro temp; pro mint;
for(int i=0;i<n;i++)
for(int j=0;j<n-i-1;j++)
{
if(proc[j].rtime>proc[j+1].rtime)
{
temp=proc[j];
proc[j]=proc[j+1];
proc[j+1]=temp;
}
}
int i;int flag=0;
for( i=0;i<n;i++)
{
if(proc[i].rtime>0&&proc[i].atime<=t&&flag==0)
{
cout<<"return proc id"<<proc[i].no<<endl;
return proc[i];
flag++;
}
}
for(int k=0;k<n;k++)
{
cout<<endl<<proc[k].rtime<<" remaining time of process "<<proc[k].no<<endl;
}
if(flag)
{
return mint;
}
if(proc[n-1].atime>t)
{
cout<<"no such process exists"<<endl;
junk.no=-100;
return junk;
}
}
int main()
{
junk.no=-100;
int to_time=0,n;
float avgwtime=0,avgtatime=0;
int total=0;
printf("Enter no of processes you want");
cin>>n;
if(n<=0)
{
printf("\nInvalid no of processes\n");
return 1;
}
for(int i=0;i<n;i++)
{
printf("\nEnter arrival time of process t %d\t",i+1);cin>>proc[i].atime;
printf("\nEnter burst time of process t %d\t",i+1);cin>>proc[i].btime;
proc[i].rtime=proc[i].btime;
proc[i].no=i+1; proc[i].ttime=0;
total+=proc[i].btime;
}
int t=0 ;
pro current;
int i=0;
while(t<=total)
{
if((min(n,t)).no==junk.no)
{
t++;
}
else{
current=min(n,t);
cout<<"cuurent proc id"<<current.no<<endl;
}
while(current.rtime>0&& (min(n,t)).no==(current).no)
{
current.rtime--;
for(int l=0;l<n;l++)
{ if(proc[l].no==current.no)
{
proc[l].rtime=current.rtime;
}
}
cout<<"running time of current process "<<current.no <<" is"<<current.rtime<<endl;
t++;
}
if((current).rtime==0)
{
cout<<endl<<"process over now"<<endl;
}
else
{
cout <<endl<<"process needs to be preemted"<<endl;
}
cout<<"current time is :"<<t<<endl;
if((min(n,t)).no==junk.no)
{
}
else{
current=min(n,t);
cout<<"cuurent proc id"<<current.no<<endl;
}
}
/*
for(int i=1;i<n;i++)
{
proc[i].stime=proc[i-1].etime;
proc[i].etime=proc[i].stime+proc[i].btime;
proc[i].wtime=proc[i].stime;
proc[i].ttime=proc[i].wtime+proc[i].btime;
}
for(int i=0;i<n;i++)
{printf("\nThe Process %d \n\t\tStart Time: %d \n\t\t\n\t\tWaiting Time: %d \n\t\tTurnaround Time: %d \n\t\tEnd Time :%d \n",proc[i].no,proc[i].stime,proc[i].wtime,proc[i].ttime,proc[i].atime,proc[i].etime);
avgwtime+=proc[i].wtime;avgtatime+=proc[i].ttime;
}
avgwtime/=n;
avgtatime/=n;
printf("\nThe average waiting time is %f \n",avgwtime);
printf("The average turn around time is %f",avgtatime);
*/
getch();
return 0;
}
I am trying to implement SRTF CPU scheduling algorithm .I am inputting the process arrival time and the process burst time from the user.
Currently I am trying to just display the correct remaining time for the processes.
Kindly ignore the part of code that is commented.
The problem I am facing is that suppose I run 3 processes,then it shows the first 2 processes running correctly but it doesn't show the thirsd one running correctly.In fact the third one doesn't start.Here is the relevant output.
Enter no of processes you want3
Enter arrival time of process t 1 0
Enter burst time of process t 1 5
Enter arrival time of process t 2 5
Enter burst time of process t 2 5
Enter arrival time of process t 3 10
Enter burst time of process t 3 5
return proc id1
return proc id1
cuurent proc id1
return proc id1
running time of current process 1 is4
return proc id1
running time of current process 1 is3
return proc id1
running time of current process 1 is2
return proc id1
running time of current process 1 is1
return proc id1
running time of current process 1 is0
process over now
current time is :5
return proc id2
return proc id2
cuurent proc id2
return proc id2
return proc id2
cuurent proc id2
return proc id2
running time of current process 2 is4
return proc id2
running time of current process 2 is3
return proc id2
running time of current process 2 is2
return proc id2
running time of current process 2 is1
return proc id2
running time of current process 2 is0
process over now
current time is :10
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
cuurent proc id2
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
cuurent proc id2
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
running time of current process 2 is0
process over now
current time is :11
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
cuurent proc id2
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
cuurent proc id2
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
running time of current process 2 is0
process over now
current time is :12
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
cuurent proc id2
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
cuurent proc id2
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
running time of current process 2 is0
process over now
current time is :13
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
cuurent proc id2
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
cuurent proc id2
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
running time of current process 2 is0
process over now
current time is :14
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
cuurent proc id2
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
cuurent proc id2
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
running time of current process 2 is0
process over now
current time is :15
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
cuurent proc id2
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
cuurent proc id2
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
running time of current process 2 is0
process over now
current time is :16
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
0 remaining time of process 0
0 remaining time of process 1
0 remaining time of process 2
cuurent proc id2
Any possible help/suggestion would be great ......
Please help me someone.