Skip to content

Commit c59fc92

Browse files
smiti-maheshwariSmiti
and
Smiti
authored
Add fcfs scheduling (#3335)
Co-authored-by: Smiti <smmaheshwari@paypal.com>
1 parent 911b984 commit c59fc92

File tree

3 files changed

+153
-0
lines changed

3 files changed

+153
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
packagecom.thealgorithms.devutils.entities;
2+
3+
publicclassProcessDetails {
4+
privateStringprocessId;
5+
privateintarrivalTime;
6+
privateintburstTime;
7+
privateintwaitingTime;
8+
privateintturnAroundTime;
9+
10+
publicProcessDetails(finalStringprocessId, finalintarrivalTime, finalintburstTime) {
11+
this.processId = processId;
12+
this.arrivalTime = arrivalTime;
13+
this.burstTime = burstTime;
14+
}
15+
16+
publicStringgetProcessId() {
17+
returnprocessId;
18+
}
19+
20+
publicintgetArrivalTime() {
21+
returnarrivalTime;
22+
}
23+
24+
publicintgetBurstTime() {
25+
returnburstTime;
26+
}
27+
28+
29+
publicintgetWaitingTime() {
30+
returnwaitingTime;
31+
}
32+
33+
publicintgetTurnAroundTimeTime() {
34+
returnturnAroundTime;
35+
}
36+
37+
publicvoidsetProcessId(finalStringprocessId) {
38+
this.processId = processId;
39+
}
40+
41+
publicvoidsetArrivalTime(finalintarrivalTime) {
42+
this.arrivalTime = arrivalTime;
43+
}
44+
45+
publicvoidsetBurstTime(finalintburstTime) {
46+
this.burstTime = burstTime;
47+
}
48+
49+
publicvoidsetWaitingTime(finalintwaitingTime) {
50+
this.waitingTime = waitingTime;
51+
}
52+
53+
publicvoidsetTurnAroundTimeTime(finalintturnAroundTime) {
54+
this.turnAroundTime = turnAroundTime;
55+
}
56+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
packagecom.thealgorithms.scheduling;
2+
3+
importcom.thealgorithms.devutils.entities.ProcessDetails;
4+
5+
importjava.util.List;
6+
7+
/**
8+
* Non-pre-emptive First Come First Serve scheduling. This can be understood here - https://www.scaler.com/topics/first-come-first-serve/
9+
*/
10+
publicclassFCFSScheduling {
11+
12+
privateList<ProcessDetails> processes;
13+
14+
FCFSScheduling(finalList<ProcessDetails> processes) {
15+
this.processes = processes;
16+
}
17+
18+
publicvoidscheduleProcesses() {
19+
evaluateWaitingTime();
20+
evaluateTurnAroundTime();
21+
}
22+
23+
privatevoidevaluateWaitingTime() {
24+
intprocessesNumber = processes.size();
25+
26+
if(processesNumber == 0) {
27+
return;
28+
}
29+
30+
intwaitingTime = 0;
31+
intburstTime = processes.get(0).getBurstTime();
32+
33+
processes.get(0).setWaitingTime(waitingTime); // for the first process, waiting time will be 0.
34+
35+
for(inti=1; i<processesNumber; i++) {
36+
processes.get(i).setWaitingTime(waitingTime + burstTime);
37+
waitingTime = processes.get(i).getWaitingTime();
38+
burstTime = processes.get(i).getBurstTime();
39+
}
40+
}
41+
42+
privatevoidevaluateTurnAroundTime() {
43+
for(inti=0; i<processes.size(); i++) {
44+
processes.get(i).setTurnAroundTimeTime(processes.get(i).getBurstTime() + processes.get(i).getWaitingTime());
45+
}
46+
}
47+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
packagecom.thealgorithms.scheduling;
2+
3+
importcom.thealgorithms.devutils.entities.ProcessDetails;
4+
importorg.junit.jupiter.api.Test;
5+
6+
importjava.util.ArrayList;
7+
importjava.util.List;
8+
9+
importstaticorg.junit.jupiter.api.Assertions.assertEquals;
10+
11+
publicclassFCFSSchedulingTest {
12+
13+
14+
@Test
15+
publicvoidtestingProcesses() {
16+
List<ProcessDetails> processes = addProcessesForFCFS();
17+
finalFCFSSchedulingfcfsScheduling = newFCFSScheduling(processes); // for sending to FCFS
18+
19+
fcfsScheduling.scheduleProcesses();
20+
21+
assertEquals(3, processes.size());
22+
23+
assertEquals("P1", processes.get(0).getProcessId());
24+
assertEquals(0, processes.get(0).getWaitingTime());
25+
assertEquals(10, processes.get(0).getTurnAroundTimeTime());
26+
27+
assertEquals("P2", processes.get(1).getProcessId());
28+
assertEquals(10, processes.get(1).getWaitingTime());
29+
assertEquals(15, processes.get(1).getTurnAroundTimeTime());
30+
31+
assertEquals("P3", processes.get(2).getProcessId());
32+
assertEquals(15, processes.get(2).getWaitingTime());
33+
assertEquals(23, processes.get(2).getTurnAroundTimeTime());
34+
35+
}
36+
37+
privateList<ProcessDetails> addProcessesForFCFS() {
38+
finalProcessDetailsprocess1 = newProcessDetails("P1", 0, 10);
39+
finalProcessDetailsprocess2 = newProcessDetails("P2", 1, 5);
40+
finalProcessDetailsprocess3 = newProcessDetails("P3", 2, 8);
41+
42+
finalList<ProcessDetails> processDetails = newArrayList<>();
43+
processDetails.add(process1);
44+
processDetails.add(process2);
45+
processDetails.add(process3);
46+
47+
returnprocessDetails;
48+
}
49+
50+
}

0 commit comments

Comments
 (0)
close