Skip to content

marvinjason/CPUScheduler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

4394966 · Aug 25, 2017

History

11 Commits
Aug 25, 2017
Aug 25, 2017
Aug 25, 2017
Jun 25, 2017
Jun 25, 2017
Aug 25, 2017
Jun 12, 2017
Jun 12, 2017

Repository files navigation

CPUScheduler

Java implementation of 6 CPU scheduling algorithms: First Come First Serve (FCFS), Shortest Job First (SJF), Shortest Remaining Time (SRT), Priority Non-preemptive (PSN), Priority Preemptive (PSP), and Round Robin (RR).

Usage

Instantiate a CPUScheduler object of the algorithm

CPUScheduler fcfs = new FirstComeFirstServe();

Add a new Row for every job queued

fcfs.add(new Row("P1", 0, 5));
fcfs.add(new Row("P2", 2, 4));
fcfs.add(new Row("P3", 4, 3));
fcfs.add(new Row("P4", 6, 6));

Call the process method

fcfs.process();

Use the accessors

fcfs.getAverageWaitingTime();     // 3.5
fcfs.getAverageTurnAroundTime();  // 8.0

Round Robin

In the case of RoundRobin, you must first set a time quantum before calling process.

CPUScheduler rr = new RoundRobin();

rr.add(new Row("P1", 0, 5));
rr.add(new Row("P2", 2, 4));
rr.add(new Row("P3", 4, 3));
rr.add(new Row("P4", 6, 6));

rr.setTimeQuantum(2);
rr.process();

Rows

Using the object's getRows method will return a List of all queued Row. After process, each Row will reflect their respective computed waiting time and turnaround time.

CPUScheduler sjf = new ShortestJobFirst();
List<Row> rows;

sjf.add(new Row("P1", 0, 5));
sjf.add(new Row("P2", 2, 4));

rows = sjf.getRows();
rows.get(1).getWaitingTime();     // 0
rows.get(1).getTurnaroundTime();  // 0

sjf.process();

rows = sjf.getRows();
rows.get(1).getWaitingTime();     // 3
rows.get(1).getTurnaroundTime();  // 7

Timeline

Using the object's getTimeline method will return a List of Event which can be used to draw a Gantt chart. The timeline shows what job is being processed at the given time.

List<Event> timeline = fcfs.getTimeline();

for (Event event : timeline)
{
  System.out.println(event.getStartTime());
  System.out.println("|  " + event.getProcessName());
}

System.out.print(timeline.get(timeline.size() - 1).getFinishTime());

Result:

0
|  P1
5
|  P2
9
|  P3
12
|  P4
18

Example

An example can be found here.

Demo

A Java Swing application using the library is included within the project.

Screenshots

Screenshot 1 Screenshot 2 Screenshot 3 Screenshot 4

About

Java implementation of 6 CPU scheduling algorithms

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages