1
+ import java .util .Scanner ;
2
+ import java .util .ArrayList ;
3
+ import java .util .Comparator ;
4
+ import java .util .*;
5
+
6
+ class Process {
7
+
8
+ public int pid ;
9
+ public int arrivalTime ;
10
+ public int burstTime ;
11
+ public int priority ;
12
+ public int turnAroundTime ;
13
+ public int waitTime ;
14
+ public int remainingTime ;
15
+ }
16
+
17
+
18
+ class Schedule {
19
+
20
+ private int noOfProcess ;
21
+ private int timer = 0 ;
22
+ private ArrayList <Process > processes ;
23
+ private ArrayList <Process > remainingProcess ;
24
+ private ArrayList <Integer > gantChart ;
25
+ private float burstAll ;
26
+ private Map <Integer , ArrayList <Process >> arrivals ;
27
+
28
+ Schedule () {
29
+ Scanner in = new Scanner (System .in );
30
+
31
+ processes = new ArrayList <Process >();
32
+ remainingProcess = new ArrayList <Process >();
33
+
34
+ gantChart = new ArrayList <Integer >();
35
+ arrivals = new HashMap <Integer , ArrayList <Process >>();
36
+
37
+ System .out .print ("Enter the no. of processes: " );
38
+ noOfProcess = in .nextInt ();
39
+ System .out .println ("Enter the arrival, burst and priority of processes" );
40
+ for (int i = 0 ; i < noOfProcess ; i ++) {
41
+ Process p = new Process ();
42
+ p .pid = i ;
43
+ p .arrivalTime = in .nextInt ();
44
+ p .burstTime = in .nextInt ();
45
+ p .priority = in .nextInt ();
46
+ p .turnAroundTime = 0 ;
47
+ p .waitTime = 0 ;
48
+ p .remainingTime = p .burstTime ;
49
+
50
+ if (arrivals .get (p .arrivalTime ) == null ) {
51
+ arrivals .put (p .arrivalTime , new ArrayList <Process >());
52
+ }
53
+ arrivals .get (p .arrivalTime ).add (p );
54
+ processes .add (p );
55
+ burstAll += p .burstTime ;
56
+ }
57
+
58
+ }
59
+
60
+
61
+ void startScheduling () {
62
+
63
+
64
+ processes .sort (new Comparator <Process >() {
65
+ @ Override
66
+ public int compare (Process a , Process b ) {
67
+ return a .arrivalTime - b .arrivalTime ;
68
+ }
69
+ });
70
+
71
+ while (!(arrivals .size () == 0 && remainingProcess .size () == 0 )) {
72
+ removeFinishedProcess ();
73
+ if (arrivals .get (timer ) != null ) {
74
+ remainingProcess .addAll (arrivals .get (timer ));
75
+ arrivals .remove (timer );
76
+ }
77
+
78
+ remainingProcess .sort (new Comparator <Process >() {
79
+ private int alpha = 6 ;
80
+ private int beta = 1 ;
81
+
82
+ @ Override
83
+ public int compare (Process a , Process b ) {
84
+ int aRem = a .remainingTime ;
85
+ int bRem = b .remainingTime ;
86
+ int aprior = a .priority ;
87
+ int bprior = b .priority ;
88
+ return (alpha *aRem + beta *aprior ) - (alpha *bRem + beta *bprior );
89
+ }
90
+ });
91
+
92
+ int k = timeElapsed (timer );
93
+ ageing (k );
94
+ timer ++;
95
+ }
96
+
97
+ System .out .println ("Total time required: " + (timer -1 ));
98
+ }
99
+
100
+ void removeFinishedProcess () {
101
+ ArrayList <Integer > completed = new ArrayList <Integer >();
102
+ for (int i = 0 ; i < remainingProcess .size (); i ++) {
103
+ if (remainingProcess .get (i ).remainingTime == 0 ) {
104
+ completed .add (i );
105
+ }
106
+ }
107
+
108
+ for (int i = 0 ; i < completed .size (); i ++) {
109
+ int pid = remainingProcess .get (completed .get (i )).pid ;
110
+ processes .get (pid ).waitTime = remainingProcess .get (completed .get (i )).waitTime ;
111
+ remainingProcess .remove (remainingProcess .get (completed .get (i )));
112
+ }
113
+
114
+
115
+ }
116
+
117
+ public int timeElapsed (int i ) {
118
+ if (!remainingProcess .isEmpty ()) {
119
+ gantChart .add (i , remainingProcess .get (0 ).pid );
120
+ remainingProcess .get (0 ).remainingTime --;
121
+ return 1 ;
122
+ }
123
+ return 0 ;
124
+ }
125
+
126
+ public void ageing (int k ) {
127
+ for (int i = k ; i < remainingProcess .size (); i ++) {
128
+ remainingProcess .get (i ).waitTime ++;
129
+ if (remainingProcess .get (i ).waitTime % 7 == 0 ) {
130
+ remainingProcess .get (i ).priority --;
131
+ }
132
+ }
133
+ }
134
+
135
+
136
+ public void solve () {
137
+ System .out .println ("Gant chart " );
138
+ for (int i = 0 ; i < gantChart .size (); i ++) {
139
+ System .out .print (gantChart .get (i ) + " " );
140
+ }
141
+ System .out .println ();
142
+
143
+ float waitTimeTot = 0 ;
144
+ float tatTime = 0 ;
145
+
146
+ for (int i = 0 ; i < noOfProcess ; i ++) {
147
+ processes .get (i ).turnAroundTime = processes .get (i ).waitTime + processes .get (i ).burstTime ;
148
+
149
+ waitTimeTot += processes .get (i ).waitTime ;
150
+ tatTime += processes .get (i ).turnAroundTime ;
151
+
152
+ System .out .println ("Process no.: " + i + " Wait time: " + processes .get (i ).waitTime + " Turn Around Time: " + processes .get (i ).turnAroundTime );
153
+ }
154
+
155
+ System .out .println ("Average Waiting Time: " + waitTimeTot /noOfProcess );
156
+ System .out .println ("Average TAT Time: " + tatTime /noOfProcess );
157
+ System .out .println ("Throughput: " + (float )noOfProcess /(timer - 1 ));
158
+ }
159
+
160
+ }
161
+
162
+ public class SJF {
163
+ public static void main (String [] args ) {
164
+ Schedule s = new Schedule ();
165
+ s .startScheduling ();
166
+ s .solve ();
167
+ }
168
+ }
0 commit comments