Setiap komputer menjalankan ratusan proses secara bersamaan, tetapi CPU hanya bisa eksekusi satu pada satu waktu. Sistem operasi menyelesaikan tantangan ini dengan scheduler — komponen yang memilih proses mana yang berjalan kapan. Pada proyek ini, kita membangun simulator scheduler sederhana yang menerima daftar tugas dengan atribut (arrival time, burst time, priority), menjalankan tiga algoritma klasik (FCFS, SJF, Priority), dan menghitung metrik performa (waiting time, turnaround time).

Tool yang akan kita bangun memiliki cakupan berikut:

  • mendefinisikan struct Task dengan id, arrival, burst, dan priority,
  • memakai std::priority_queue dengan custom comparator untuk pemilihan task,
  • mengimplementasikan tiga algoritma: FCFS (First-Come First-Served), SJF (Shortest Job First non-preemptive), Priority (non-preemptive),
  • mensimulasikan eksekusi dan menghitung waiting time + turnaround time per task,
  • mencetak tabel ringkasan dan Gantt chart sederhana.

Tampilan Akhir Tool #

Berikut contoh output simulasi dengan lima task:

text
Daftar task:
  T1  arrival=0  burst=5  prio=2
  T2  arrival=1  burst=3  prio=1
  T3  arrival=2  burst=8  prio=3
  T4  arrival=3  burst=6  prio=2
  T5  arrival=4  burst=4  prio=1

=== FCFS ===
Gantt: [T1:0-5][T2:5-8][T3:8-16][T4:16-22][T5:22-26]
Task  Wait  Turnaround
  T1     0          5
  T2     4          7
  T3     6         14
  T4    13         19
  T5    18         22
Avg wait=8.2  avg turnaround=13.4

Gantt chart [T1:0-5] berarti T1 dieksekusi dari waktu 0 hingga 5. Waiting time dihitung sebagai turnaround - burst, dan turnaround sebagai selesai - arrival. Pada Bagian 4 kita membandingkan tiga algoritma pada task set yang sama.

Tujuan Pembelajaran #

Setelah menyelesaikan proyek ini, kita mampu:

  • mendefinisikan struct Task dengan atribut yang relevan untuk scheduling,
  • menggunakan std::priority_queue dengan custom comparator untuk SJF dan Priority,
  • membedakan preemptive vs non-preemptive scheduling (kita fokus pada non-preemptive),
  • menghitung metrik waiting time dan turnaround time,
  • mencetak Gantt chart sederhana untuk visualisasi eksekusi.

Prasyarat #

Proyek ini memanfaatkan materi yang sudah dibahas pada Section sebelumnya:

  • Priority Queue dan Heap — std::priority_queue dengan custom comparator,
  • STL Containers — std::vector, std::priority_queue,
  • Sorting Algorithms — konsep pengurutan berdasarkan atribut (arrival, burst, priority),
  • Standard Library Algorithms — std::sort, std::stable_sort,
  • Operator Overloading — custom comparator sebagai functor atau lambda.

Tahapan Pengerjaan #

Proyek dikerjakan dalam empat bagian berurutan:

  1. Bagian 1: Pemodelan Tugas — mendefinisikan struct Task dan atributnya.
  2. Bagian 2: Priority Queue — menggunakan std::priority_queue dengan custom comparator.
  3. Bagian 3: Aturan Penjadwalan — menerapkan FCFS, SJF, dan Priority non-preemptive.
  4. Bagian 4: Simulasi Penjadwalan — menjalankan simulasi dan menghitung metrik.

Mulailah dari Bagian 1 dan kerjakan secara berurutan. Setiap bagian membangun di atas berkas bagian sebelumnya.