Skip to content

Commit 203f006

Browse files
committed
added scheduling algorithm
1 parent 6f7c2bf commit 203f006

File tree

1 file changed

+168
-0
lines changed

1 file changed

+168
-0
lines changed

Others/SJF.java

Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
import java.util.Scanner;
2+
import java.util.ArrayList;
3+
import java.util.Comparator;
4+
import java.util.*;
5+
6+
class Process {
7+
8+
public int pid;
9+
public int arrivalTime;
10+
public int burstTime;
11+
public int priority;
12+
public int turnAroundTime;
13+
public int waitTime;
14+
public int remainingTime;
15+
}
16+
17+
18+
class Schedule {
19+
20+
private int noOfProcess;
21+
private int timer = 0;
22+
private ArrayList<Process> processes;
23+
private ArrayList<Process> remainingProcess;
24+
private ArrayList<Integer> gantChart;
25+
private float burstAll;
26+
private Map<Integer, ArrayList<Process>> arrivals;
27+
28+
Schedule() {
29+
Scanner in = new Scanner(System.in);
30+
31+
processes = new ArrayList<Process>();
32+
remainingProcess = new ArrayList<Process>();
33+
34+
gantChart = new ArrayList<Integer>();
35+
arrivals = new HashMap<Integer, ArrayList<Process>>();
36+
37+
System.out.print("Enter the no. of processes: ");
38+
noOfProcess = in.nextInt();
39+
System.out.println("Enter the arrival, burst and priority of processes");
40+
for (int i = 0; i < noOfProcess; i++) {
41+
Process p = new Process();
42+
p.pid = i;
43+
p.arrivalTime = in.nextInt();
44+
p.burstTime = in.nextInt();
45+
p.priority = in.nextInt();
46+
p.turnAroundTime = 0;
47+
p.waitTime = 0;
48+
p.remainingTime = p.burstTime;
49+
50+
if (arrivals.get(p.arrivalTime) == null) {
51+
arrivals.put(p.arrivalTime, new ArrayList<Process>());
52+
}
53+
arrivals.get(p.arrivalTime).add(p);
54+
processes.add(p);
55+
burstAll += p.burstTime;
56+
}
57+
58+
}
59+
60+
61+
void startScheduling() {
62+
63+
64+
processes.sort(new Comparator<Process>() {
65+
@Override
66+
public int compare (Process a, Process b) {
67+
return a.arrivalTime - b.arrivalTime;
68+
}
69+
});
70+
71+
while(!(arrivals.size() == 0 && remainingProcess.size() == 0)) {
72+
removeFinishedProcess();
73+
if(arrivals.get(timer) != null) {
74+
remainingProcess.addAll(arrivals.get(timer));
75+
arrivals.remove(timer);
76+
}
77+
78+
remainingProcess.sort(new Comparator<Process>() {
79+
private int alpha = 6;
80+
private int beta = 1;
81+
82+
@Override
83+
public int compare (Process a, Process b) {
84+
int aRem = a.remainingTime;
85+
int bRem = b.remainingTime;
86+
int aprior = a.priority;
87+
int bprior = b.priority;
88+
return (alpha*aRem + beta*aprior) - (alpha*bRem + beta*bprior);
89+
}
90+
});
91+
92+
int k = timeElapsed(timer);
93+
ageing(k);
94+
timer++;
95+
}
96+
97+
System.out.println("Total time required: " + (timer-1));
98+
}
99+
100+
void removeFinishedProcess() {
101+
ArrayList<Integer> completed = new ArrayList<Integer>();
102+
for (int i = 0; i < remainingProcess.size(); i++) {
103+
if(remainingProcess.get(i).remainingTime == 0) {
104+
completed.add(i);
105+
}
106+
}
107+
108+
for (int i = 0; i < completed.size(); i++) {
109+
int pid = remainingProcess.get(completed.get(i)).pid;
110+
processes.get(pid).waitTime = remainingProcess.get(completed.get(i)).waitTime;
111+
remainingProcess.remove(remainingProcess.get(completed.get(i)));
112+
}
113+
114+
115+
}
116+
117+
public int timeElapsed(int i) {
118+
if(!remainingProcess.isEmpty()) {
119+
gantChart.add(i, remainingProcess.get(0).pid);
120+
remainingProcess.get(0).remainingTime--;
121+
return 1;
122+
}
123+
return 0;
124+
}
125+
126+
public void ageing(int k) {
127+
for (int i = k; i < remainingProcess.size(); i++) {
128+
remainingProcess.get(i).waitTime++;
129+
if (remainingProcess.get(i).waitTime % 7 == 0) {
130+
remainingProcess.get(i).priority--;
131+
}
132+
}
133+
}
134+
135+
136+
public void solve() {
137+
System.out.println("Gant chart ");
138+
for (int i = 0; i < gantChart.size(); i++) {
139+
System.out.print(gantChart.get(i) + " ");
140+
}
141+
System.out.println();
142+
143+
float waitTimeTot = 0;
144+
float tatTime = 0;
145+
146+
for (int i = 0; i < noOfProcess; i++) {
147+
processes.get(i).turnAroundTime = processes.get(i).waitTime + processes.get(i).burstTime;
148+
149+
waitTimeTot += processes.get(i).waitTime;
150+
tatTime += processes.get(i).turnAroundTime;
151+
152+
System.out.println("Process no.: " + i + " Wait time: " + processes.get(i).waitTime + " Turn Around Time: " + processes.get(i).turnAroundTime);
153+
}
154+
155+
System.out.println("Average Waiting Time: " + waitTimeTot/noOfProcess);
156+
System.out.println("Average TAT Time: " + tatTime/noOfProcess);
157+
System.out.println("Throughput: " + (float)noOfProcess/(timer - 1));
158+
}
159+
160+
}
161+
162+
public class SJF {
163+
public static void main(String[] args) {
164+
Schedule s = new Schedule();
165+
s.startScheduling();
166+
s.solve();
167+
}
168+
}

0 commit comments

Comments
 (0)