1
1
package com .thealgorithms .scheduling ;
2
2
3
+ import java .util .ArrayList ;
3
4
import java .util .LinkedList ;
5
+ import java .util .List ;
4
6
import java .util .Queue ;
5
7
6
8
/**
9
11
* between queues depending on their CPU burst behavior.
10
12
*/
11
13
public class MLFQScheduler {
12
- private Queue <Process >[] queues ; // Multi-level feedback queues
14
+ private List < Queue <Process >> queues ; // Multi-level feedback queues
13
15
private int [] timeQuantum ; // Time quantum for each queue level
14
16
private int currentTime ; // Current time in the system
15
17
@@ -22,9 +24,9 @@ public class MLFQScheduler {
22
24
* @param timeQuantums Time quantum for each queue level
23
25
*/
24
26
public MLFQScheduler (int levels , int [] timeQuantums ) {
25
- queues = new LinkedList [ levels ] ;
27
+ queues = new ArrayList <>( levels ) ;
26
28
for (int i = 0 ; i < levels ; i ++) {
27
- queues [ i ] = new LinkedList <>();
29
+ queues . add ( new LinkedList <>() );
28
30
}
29
31
timeQuantum = timeQuantums ;
30
32
currentTime = 0 ;
@@ -36,7 +38,7 @@ public MLFQScheduler(int levels, int[] timeQuantums) {
36
38
* @param p The process to be added to the scheduler
37
39
*/
38
40
public void addProcess (Process p ) {
39
- queues [ 0 ] .add (p );
41
+ queues . get ( 0 ) .add (p );
40
42
}
41
43
42
44
/**
@@ -46,8 +48,8 @@ public void addProcess(Process p) {
46
48
*/
47
49
public void run () {
48
50
while (!allQueuesEmpty ()) {
49
- for (int i = 0 ; i < queues .length ; i ++) {
50
- Queue <Process > queue = queues [ i ] ;
51
+ for (int i = 0 ; i < queues .size () ; i ++) {
52
+ Queue <Process > queue = queues . get ( i ) ;
51
53
if (!queue .isEmpty ()) {
52
54
Process p = queue .poll ();
53
55
int quantum = timeQuantum [i ];
@@ -60,11 +62,11 @@ public void run() {
60
62
if (p .isFinished ()) {
61
63
System .out .println ("Process " + p .pid + " finished at time " + currentTime );
62
64
} else {
63
- if (i < queues .length - 1 ) {
65
+ if (i < queues .size () - 1 ) {
64
66
p .priority ++; // Demote the process to the next lower priority queue
65
- queues [ i + 1 ] .add (p ); // Add to the next queue level
67
+ queues . get ( i + 1 ) .add (p ); // Add to the next queue level
66
68
} else {
67
- queues [ i ] .add (p ); // Stay in the same queue if it's the last level
69
+ queue .add (p ); // Stay in the same queue if it's the last level
68
70
}
69
71
}
70
72
}
0 commit comments