-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathosPROJECT
More file actions
107 lines (105 loc) · 2.32 KB
/
Copy pathosPROJECT
File metadata and controls
107 lines (105 loc) · 2.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include<iostream>
#include<queue>
#define arr 100
using namespace std;
void robin();
queue<int> que;
int tquan= 4,time;
int f[arr],rtf[arr],qt[arr];//to chk wether p ic complete or not
int arival[arr],burst[arr],prior[arr],respT[arr],full[arr],fe[arr],pid[arr];
int sc=0,slc=-1,lc=0;//counters
main()
{
int i=0,n=0,min,sum=0;
cout<<"Enter number of processes: \n";
cin>>n;
cout<<"ProcessId ArrivalTime BurstTime Prirority \n";
for(i=0;i<n;i++)
{ cin>>pid[i]>>arival[i]>>burst[i]>>prior[i];
if(arival[i]>lc)
lc=arival[i];
sum+=burst[i];
respT[i]=burst[i];
} cout<<endl;
min=arr;
for(time=0;!que.empty()||time<=sum+lc;time++){
min=arr;
sc=-1;
for(i=0;i<n;i++)
{
if(arival[i]<=time && prior[i]<min&&respT[i]>0&&!f[i])
{
min=prior[i];
sc=i;
}}
if(sc==-1 && !que.empty())
{
if(slc !=-1 && respT[slc]==0)
{
full[slc]=time;
f[slc]=1;
}
slc=-1;
robin();
continue;
}
else if(sc!=-1 && !que.empty() && slc==-1)
{
if(qt[que.front()]<=4 && qt[que.front()]>0)
{
que.push(que.front());
que.pop();
} }
if(sc!=-1 && !rtf[sc])
{
fe[sc]=time-arival[sc];
rtf[sc]=1;
}
if( sc!=slc && slc!=-1 && !f[slc])
{
que.push(slc);
f[slc]=1;
}
if(sc !=-1)
respT[sc]--;
if((sc !=-1) && ((respT[sc]==0) ||(burst[sc]-respT[sc])==tquan))
{
if((burst[sc]-respT[sc])==tquan && respT[sc]!=0)
{
f[sc]=1;
que.push(sc);
}
else if(sc!=-1)
{
full[sc]=time+1;
f[sc]=1;
}}
slc=sc;
}
cout<<"ProcessId ResponseT FullT WaitingT \n";
for(int i=0;i<n;i++)
cout<<" "<<pid[i]<<"\t\t"<<fe[i]<<"\t"<<full[i]<<" \t"<<full[i]-burst[i]-arival[i]<<endl;
return 0;
}
void robin()
{
if(!que.empty())
{
if(respT[que.front()]>0 && qt[que.front()]<4)
{
qt[que.front()]++;
respT[que.front()]--;
if(respT[que.front()]==0)
{
full[que.front()]=time+1;
que.pop();
}
if(respT[que.front()]!=0 && qt[que.front()]==4)
{
qt[que.front()]=0;
que.push(que.front());
que.pop();
}
}
}
}