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 Taskdenganid,arrival,burst, danpriority, - memakai
std::priority_queuedengan 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:
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.4Gantt 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 Taskdengan atribut yang relevan untuk scheduling, - menggunakan
std::priority_queuedengan 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_queuedengan 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:
- Bagian 1: Pemodelan Tugas — mendefinisikan
struct Taskdan atributnya. - Bagian 2: Priority Queue — menggunakan
std::priority_queuedengan custom comparator. - Bagian 3: Aturan Penjadwalan — menerapkan FCFS, SJF, dan Priority non-preemptive.
- 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.
Mendefinisikan struktur data Task dengan atributnya.
Buka → # Bagian 2: Priority QueueMenggunakan std::priority_queue untuk penjadwalan.
Buka → # Bagian 3: Aturan PenjadwalanMenerapkan aturan preemptif/non-preemptif dan aging.
Buka → # Bagian 4: Simulasi PenjadwalanMenjalankan simulasi dan menghitung metrik wait/turnaround.
Buka →