MP4: Schedule Me!

CS 241, Spring 2011


MP4 Example: RR2, 1 core

Consider the following simple schedule:

job number arrival time running time priority
0 0 8 1
1 1 8 1
2 3 4 2

The flow of execution of functions calls is as follows:

scheduler_start_up(cores = 1, scheme = RR)
    --> scheduler initialized

new_job(job_number = 0, time = 0, running_time = 8, priority = 1)
    --> returns 0, indicating job(id=0) should run on core(id=0)

new_job(job_number = 1, time = 1, running_time = 8, priority = 1)
    --> returns -1, indicating that job(id=1) will not be scheduled at this time.

quantum_expired(core_id = 0, time = 2)
    --> returns 1, indicating job(id=1) should run next on core(id=0).

new_job(job_number = 2, time = 3, running_time = 4, priority = 2)
    --> returns -1, indicating that job(id=2) will not be scheduled at this time.

quantum_expired(core_id = 0, time = 4)
    --> returns 0, indicating job(id=0) should run next on core(id=0).

quantum_expired(core_id = 0, time = 6)
    --> returns 2, indicating job(id=2) should run next on core(id=0).

quantum_expired(core_id = 0, time = 8)
    --> returns 1, indicating job(id=1) should run next on core(id=0).

... /* jobs will continue rotating and running until all jobs finish, statistics, and then cleanup */

...it's important to note that even though the jobs arrive in the order 0 1 2, the order of the jobs in your priority queue will following the rotation: 0 2 1 -> 2 1 0 -> 1 0 2 -> 0 2 1.

When the simulator is executed and the flow of execution is implemented correctly, you will see the following output:

Loaded 1 core(s) and 3 job(s) using Round Robin (RR) with a quantum of 2 scheduling...

=== [TIME 0] ===
A new job, job 0 (running time=8, priority=1), arrived. Job 0 is now running on core 0.
  Queue: 0(0)

At the end of time unit 0...
  Core  0: 0

  Queue: 0(0)

=== [TIME 1] ===
A new job, job 1 (running time=8, priority=1), arrived. Job 1 is set to idle (-1).
  Queue: 0(0) 1(-1)

At the end of time unit 1...
  Core  0: 00

  Queue: 0(0) 1(-1)

=== [TIME 2] ===
Job 0, running on core 0, had its quantum expire. Core 0 is now running job 1.
  Queue: 1(0) 0(-1)

At the end of time unit 2...
  Core  0: 001

  Queue: 1(0) 0(-1)

=== [TIME 3] ===
A new job, job 2 (running time=4, priority=2), arrived. Job 2 is set to idle (-1).
  Queue: 1(0) 0(-1) 2(-1)

At the end of time unit 3...
  Core  0: 0011

  Queue: 1(0) 0(-1) 2(-1)

=== [TIME 4] ===
Job 1, running on core 0, had its quantum expire. Core 0 is now running job 0.
  Queue: 0(0) 2(-1) 1(-1)

At the end of time unit 4...
  Core  0: 00110

  Queue: 0(0) 2(-1) 1(-1)

=== [TIME 5] ===
At the end of time unit 5...
  Core  0: 001100

  Queue: 0(0) 2(-1) 1(-1)

=== [TIME 6] ===
Job 0, running on core 0, had its quantum expire. Core 0 is now running job 2.
  Queue: 2(0) 1(-1) 0(-1)

At the end of time unit 6...
  Core  0: 0011002

  Queue: 2(0) 1(-1) 0(-1)

=== [TIME 7] ===
At the end of time unit 7...
  Core  0: 00110022

  Queue: 2(0) 1(-1) 0(-1)

=== [TIME 8] ===
Job 2, running on core 0, had its quantum expire. Core 0 is now running job 1.
  Queue: 1(0) 0(-1) 2(-1)

At the end of time unit 8...
  Core  0: 001100221

  Queue: 1(0) 0(-1) 2(-1)

=== [TIME 9] ===
At the end of time unit 9...
  Core  0: 0011002211

  Queue: 1(0) 0(-1) 2(-1)

=== [TIME 10] ===
Job 1, running on core 0, had its quantum expire. Core 0 is now running job 0.
  Queue: 0(0) 2(-1) 1(-1)

At the end of time unit 10...
  Core  0: 00110022110

  Queue: 0(0) 2(-1) 1(-1)

=== [TIME 11] ===
At the end of time unit 11...
  Core  0: 001100221100

  Queue: 0(0) 2(-1) 1(-1)

=== [TIME 12] ===
Job 0, running on core 0, had its quantum expire. Core 0 is now running job 2.
  Queue: 2(0) 1(-1) 0(-1)

At the end of time unit 12...
  Core  0: 0011002211002

  Queue: 2(0) 1(-1) 0(-1)

=== [TIME 13] ===
At the end of time unit 13...
  Core  0: 00110022110022

  Queue: 2(0) 1(-1) 0(-1)

=== [TIME 14] ===
Job 2, running on core 0, finished. Core 0 is now running job 1.
  Queue: 1(0) 0(-1)

At the end of time unit 14...
  Core  0: 001100221100221

  Queue: 1(0) 0(-1)

=== [TIME 15] ===
At the end of time unit 15...
  Core  0: 0011002211002211

  Queue: 1(0) 0(-1)

=== [TIME 16] ===
Job 1, running on core 0, had its quantum expire. Core 0 is now running job 0.
  Queue: 0(0) 1(-1)

At the end of time unit 16...
  Core  0: 00110022110022110

  Queue: 0(0) 1(-1)

=== [TIME 17] ===
At the end of time unit 17...
  Core  0: 001100221100221100

  Queue: 0(0) 1(-1)

=== [TIME 18] ===
Job 0, running on core 0, finished. Core 0 is now running job 1.
  Queue: 1(0)

At the end of time unit 18...
  Core  0: 0011002211002211001

  Queue: 1(0)

=== [TIME 19] ===
At the end of time unit 19...
  Core  0: 00110022110022110011

  Queue: 1(0)

=== [TIME 20] ===
Job 1, running on core 0, finished. Core 0 is now running job -1.
  Queue:

FINAL TIMING DIAGRAM:
  Core  0: 00110022110022110011

Average Waiting Time: 9.33
Average Turnaround Time: 16.00
Average Response Time: 1.33
==5703==
==5703== HEAP SUMMARY:
==5703==     in use at exit: 0 bytes in 0 blocks
==5703==   total heap usage: 22 allocs, 22 frees, 2,169 bytes allocated
==5703==
==5703== All heap blocks were freed -- no leaks are possible
==5703==
==5703== For counts of detected and suppressed errors, rerun with: -v
==5703== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 4 from 4)