-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSRTFScheduler.java
80 lines (68 loc) · 2.38 KB
/
SRTFScheduler.java
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
public class SRTFScheduler extends Scheduler {
public void addNewTask(Task t) {
int burstTime = t.getRemainingBurstTime();
int readyTaskCount = getReadyTaskCount();
for (int i = 0; i < readyTaskCount; i++) {
Task otherTask = readyTasks.get(i);
int otherBurstTime = otherTask.getRemainingBurstTime();
if (burstTime < otherBurstTime) {
readyTasks.add(i, t);
return;
}
}
readyTasks.add(t);
}
public Task getNextTask() {
int readyTaskCount = getReadyTaskCount();
if (activeTask == null) {
if (readyTaskCount > 0) {
Task firstReadyTask = readyTasks.get(0);
return firstReadyTask;
} else {
return null;
}
}
if (readyTaskCount == 0) {
if (activeTask.getRemainingBurstTime() > 0) {
return activeTask;
} else {
return null;
}
}
Task firstReadyTask = readyTasks.get(0);
if (activeTask.getRemainingBurstTime() <= firstReadyTask.getRemainingBurstTime()
&& activeTask.getRemainingBurstTime() > 0) {
return activeTask;
}
return firstReadyTask;
}
public void switchToNextTask() {
activeTask = getNextTask();
readyTasks.remove(activeTask);
}
// Ütemezés
public void run() {
elapsedTime++;
if (activeTask != null) {
int readyTaskCount = getReadyTaskCount();
if (readyTaskCount > 0 && activeTask.getRemainingBurstTime() > 0) {
Task firstReadyTask = readyTasks.get(0);
if (firstReadyTask.getRemainingBurstTime() < activeTask.getRemainingBurstTime()) {
addNewTask(activeTask);
}
}
}
switchToNextTask();
// Taszk lefutása
activeTask.decreaseRemainingBurstTime();
if (activeTask.getRemainingBurstTime() == 0) {
int waitTime = getWaitTime(activeTask);
activeTask.setWaitTime(waitTime);
finishedTasks.add(activeTask);
}
}
public boolean isResourceNeeded() {
Task nextTask = getNextTask();
return nextTask != null;
}
}