-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathSJF.java
More file actions
78 lines (63 loc) · 2.33 KB
/
Copy pathSJF.java
File metadata and controls
78 lines (63 loc) · 2.33 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
package schedulermanager;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import sun.util.calendar.CalendarUtils;
/**
*
* @author Nycholas de Sousa
* @matricula 11228201
*
*/
public class SJF extends Scheduler {
private static List<Process> listReady = new ArrayList<Process>();
// Ordena a lista de acordo com o tempo de chegada e duração do processo e prepara uma lista de prontos
private void prepareList(List<Process> process) {
List<Process> p = new ArrayList<Process>(process);
int returnSum = 0;
int min = 0;
int pivo = 0;
//Ordena para garantir a hierarquia da chegada
Collections.sort(p);
listReady.add(p.remove(0));
returnSum = listReady.get(0).getDuration();
while (p.size() > 1) {
pivo = 0;
for (int i = 1; i < p.size(); i++) {
if (p.get(pivo).getDuration() <= p.get(i).getDuration()
&& p.get(pivo).getArrivalTime() < returnSum) {
min = pivo;
} else if (p.get(i).getArrivalTime() < returnSum) {
pivo = i;
min = i;
}
}
returnSum += p.get(min).getDuration();
listReady.add(p.remove(min));
}
if (p.size() == 1) {
listReady.add(p.remove(0));
}
}
public SJF(List<Process> process) {
int returnTime = 0;
int responseTime = 0;
int waitTime = 0;
int totalProcess = super.getAmountOfProcess(process);
int arrivalProcess = arrivalMin(process);
prepareList(process);
// enquanto existir processos
for (Process p: listReady) {
arrivalProcess += p.getDuration();
returnTime += (arrivalProcess - p.getArrivalTime());
waitTime += (arrivalProcess - p.getArrivalTime() - p.getDuration());
}
responseTime = waitTime; //SJF: tempo de resposta e de espera são iguais
super.setAvgReturn((double) returnTime / totalProcess);
super.setAvgResponse((double) responseTime / totalProcess);
super.setAvgWait((double) waitTime / totalProcess);
}
public void print() {
super.print("SJF");
}
}