Skip to content

Commit c59fc92

Browse files
smiti-maheshwariSmiti
andauthored
Add fcfs scheduling (TheAlgorithms#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
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.thealgorithms.devutils.entities;
2+
3+
public class ProcessDetails {
4+
private String processId;
5+
private int arrivalTime;
6+
private int burstTime;
7+
private int waitingTime;
8+
private int turnAroundTime;
9+
10+
public ProcessDetails(final String processId, final int arrivalTime, final int burstTime) {
11+
this.processId = processId;
12+
this.arrivalTime = arrivalTime;
13+
this.burstTime = burstTime;
14+
}
15+
16+
public String getProcessId() {
17+
return processId;
18+
}
19+
20+
public int getArrivalTime() {
21+
return arrivalTime;
22+
}
23+
24+
public int getBurstTime() {
25+
return burstTime;
26+
}
27+
28+
29+
public int getWaitingTime() {
30+
return waitingTime;
31+
}
32+
33+
public int getTurnAroundTimeTime() {
34+
return turnAroundTime;
35+
}
36+
37+
public void setProcessId(final String processId) {
38+
this.processId = processId;
39+
}
40+
41+
public void setArrivalTime(final int arrivalTime) {
42+
this.arrivalTime = arrivalTime;
43+
}
44+
45+
public void setBurstTime(final int burstTime) {
46+
this.burstTime = burstTime;
47+
}
48+
49+
public void setWaitingTime(final int waitingTime) {
50+
this.waitingTime = waitingTime;
51+
}
52+
53+
public void setTurnAroundTimeTime(final int turnAroundTime) {
54+
this.turnAroundTime = turnAroundTime;
55+
}
56+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.thealgorithms.scheduling;
2+
3+
import com.thealgorithms.devutils.entities.ProcessDetails;
4+
5+
import java.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+
public class FCFSScheduling {
11+
12+
private List<ProcessDetails> processes;
13+
14+
FCFSScheduling(final List<ProcessDetails> processes) {
15+
this.processes = processes;
16+
}
17+
18+
public void scheduleProcesses() {
19+
evaluateWaitingTime();
20+
evaluateTurnAroundTime();
21+
}
22+
23+
private void evaluateWaitingTime() {
24+
int processesNumber = processes.size();
25+
26+
if(processesNumber == 0) {
27+
return;
28+
}
29+
30+
int waitingTime = 0;
31+
int burstTime = processes.get(0).getBurstTime();
32+
33+
processes.get(0).setWaitingTime(waitingTime); // for the first process, waiting time will be 0.
34+
35+
for(int i=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+
private void evaluateTurnAroundTime() {
43+
for(int i=0; i<processes.size(); i++) {
44+
processes.get(i).setTurnAroundTimeTime(processes.get(i).getBurstTime() + processes.get(i).getWaitingTime());
45+
}
46+
}
47+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package com.thealgorithms.scheduling;
2+
3+
import com.thealgorithms.devutils.entities.ProcessDetails;
4+
import org.junit.jupiter.api.Test;
5+
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
9+
import static org.junit.jupiter.api.Assertions.assertEquals;
10+
11+
public class FCFSSchedulingTest {
12+
13+
14+
@Test
15+
public void testingProcesses() {
16+
List<ProcessDetails> processes = addProcessesForFCFS();
17+
final FCFSScheduling fcfsScheduling = new FCFSScheduling(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+
private List<ProcessDetails> addProcessesForFCFS() {
38+
final ProcessDetails process1 = new ProcessDetails("P1", 0, 10);
39+
final ProcessDetails process2 = new ProcessDetails("P2", 1, 5);
40+
final ProcessDetails process3 = new ProcessDetails("P3", 2, 8);
41+
42+
final List<ProcessDetails> processDetails = new ArrayList<>();
43+
processDetails.add(process1);
44+
processDetails.add(process2);
45+
processDetails.add(process3);
46+
47+
return processDetails;
48+
}
49+
50+
}

0 commit comments

Comments
 (0)