Uploaded by muhammadfadhilalkandias

UAS Praktikum Sistem Operasi Fadhil dan Haru

advertisement
UJIAN AKIR SEMSTER
ANALISIS DAN IMPLEMENTASI ALGORITMA
ROUND ROBIN DAN PRIORITY SCHEDULING
PADA BAHASA C
DOSEN PENGAMPU :
Febie Elfaladonna, S.Kom., M.Kom
Kelas 2ID
DISUSUN OLEH :
M. Fadhil Al Kandias
Muhammad Fadlil
062430801639
062430801640
JURUSAN MANAJEMEN INFORMATIKA
POLITEKNIK NEGERI SRIWIJAYA 2025
I. Algoritma Round Robin
A. Penjelasan Singkat
Round Robin adalah algoritma penjadwalan CPU preemptive di mana setiap
proses mendapatkan jatah waktu CPU (time quantum) secara bergilir. Jika
dalam jatah waktu itu proses belum selesai, maka akan dimasukkan kembali
ke antrian ready queue untuk menunggu giliran berikutnya.
a) Konsep dasar
 Semua proses dimasukkan ke ready queue.
 Scheduler mengeksekusi proses pertama selama time quantum
tertentu.
 Jika proses selesai sebelum time quantum habis, CPU
langsung berpindah ke proses berikutnya.
 Jika proses belum selesai ketika time quantum habis, proses
dikembalikan ke belakang antrian dan menunggu giliran
berikutnya.
b) Time Quantum
 Time quantum (TQ) adalah interval waktu maksimum untuk
eksekusi proses sebelum dialihkan ke proses berikutnya.
 Jika TQ terlalu kecil → terlalu banyak context switching →
overhead besar.
 Jika TQ terlalu besar → Round Robin mendekati FCFS (First Come
First Serve).
c) Karakteristik dan Kelebihan




Bersifat preemptive, mendukung sistem multitasking.
Adil: semua proses mendapat waktu yang sama secara bergiliran.
Cocok untuk time-sharing system (misal OS modern).
Overhead tinggi jika TQ terlalu kecil.

Adil (Fair): Tidak ada proses yang dimonopoli, cocok untuk sistem
multitasking.
Responsif: Karena preemptive, proses dengan burst time kecil
tidak akan menunggu lama dibanding FCFS.
Cocok untuk time-sharing systems seperti komputer umum atau
server multi-user.
Sederhana diimplementasikan menggunakan queue



1
d) Contoh soal 1
Soal
Terdapat 4 proses dengan burst time berikut:
Proses
Burst Time
P1
10 ms
P2
4 ms
P3
5 ms
P4
3 ms
Gunakan time quantum = 3 ms. Hitung:
a.
Average
b. Average Turnaround Time
Waiting
Penyelesaian Manual
Proses Eksekusi
Sisa burst time
P1 (0-3)
7
P2 (3-6)
1
P3 (6-9)
2
P4 (9-12)
0 (selesai)
P1 (12-15)
4
P2 (15-16)
0 (selesai)
P3 (16-18)
0 (selesai)
P1 (18-21)
1
P1 (21-22)
0 (selesai)
Completion Time (CT)
P1 = 22, P2 = 16, P3 = 18, P4 = 12
2
Time
Turnaround Time (TAT) = CT - Arrival (arrival = 0 semua)
P1 = 22, P2 = 16, P3 = 18, P4 = 12
Waiting Time (WT) = TAT - Burst Time
P1 = 22-10=12
P2 = 16-4=12
P3 = 18-5=13
P4 = 12-3=9
Average Waiting Time = (12+12+13+9)/4 = 11.5 ms
Average Turnaround Time = (22+16+18+12)/4 = 17 ms
KODE C SOAL 1
#include <stdio.h>
int main() {
int n = 4, i, time = 0, remain = 4, flag = 0, tq = 3;
int bt[4] = {10,4,5,3};
int rt[4], wt[4] = {0}, tat[4] = {0};
for(i = 0; i < n; i++)
rt[i] = bt[i];
while(remain != 0) {
flag = 0;
for(i = 0; i < n; i++) {
if(rt[i] > 0) {
flag = 1;
if(rt[i] > tq) {
time += tq;
rt[i] -= tq;
}
else {
time += rt[i];
tat[i] = time;
wt[i] = tat[i] - bt[i];
rt[i] = 0;
remain--;
}
}
}
if(flag == 0)
break;
}
3
int total_wt = 0, total_tat = 0;
printf("Process\tBT\tTAT\tWT\n");
for(i = 0; i < n; i++) {
printf("P%d\t%d\t%d\t%d\n", i+1, bt[i], tat[i], wt[i]);
total_wt += wt[i];
total_tat += tat[i];
}
printf("Average Waiting Time: %.2f ms\n", total_wt*1.0/n);
printf("Average Turnaround Time: %.2f ms\n", total_tat*1.0/n);
return 0;
}
Output:
e) Soal 2
3 proses dengan burst time:
Proses
Burst Time
P1
7 ms
P2
3 ms
P3
9 ms
f)
g)
Gunakan time quantum = 2 ms. Hitung:
a. Average Waiting Time
b. Average Turnaround Time
h)
4
i)



Penyelesaian Manual
Proses Eksekusi
Sisa burst time
P1 (0-2)
5
P2 (2-4)
1
P3 (4-6)
7
P1 (6-8)
3
P2 (8-9)
0 (selesai)
P3 (9-11)
5
P1 (11-13)
1
P3 (13-15)
3
P1 (15-16)
0 (selesai)
P3 (16-18)
1
P3 (18-19)
0 (selesai)
Completion Time (CT)
P1 = 16, P2 = 9, P3 = 19
Turnaround Time (TAT) = CT - Arrival
P1 = 16, P2 = 9, P3 = 19
Waiting Time (WT) = TAT - BT
P1 = 16-7=9
P2 = 9-3=6
P3 = 19-9=10
Average Waiting Time = (9+6+10)/3 = 8.33 ms
Average Turnaround Time = (16+9+19)/3 = 14.67 ms
KODE C SOAL 2
#include <stdio.h>
int main() {
int n = 3, i, time = 0, remain = 3, flag = 0, tq = 2;
int bt[3] = {7,3,9};
int rt[3], wt[3] = {0}, tat[3] = {0};
for(i = 0; i < n; i++)
5
rt[i] = bt[i];
while(remain != 0) {
flag = 0;
for(i = 0; i < n; i++) {
if(rt[i] > 0) {
flag = 1;
if(rt[i] > tq) {
time += tq;
rt[i] -= tq;
}
else {
time += rt[i];
tat[i] = time;
wt[i] = tat[i] - bt[i];
rt[i] = 0;
remain--;
}
}
}
if(flag == 0)
break;
}
int total_wt = 0, total_tat = 0;
printf("Process\tBT\tTAT\tWT\n");
for(i = 0; i < n; i++) {
printf("P%d\t%d\t%d\t%d\n", i+1, bt[i], tat[i], wt[i]);
total_wt += wt[i];
total_tat += tat[i];
}
printf("Average Waiting Time: %.2f ms\n", total_wt*1.0/n);
printf("Average Turnaround Time: %.2f ms\n",
total_tat*1.0/n);
return 0;
}
Output:
6
II PRIORITY SCHEDULING
1. Penjelasan Singkat
A) Priority Scheduling adalah algoritma penjadwalan di mana proses
dengan prioritas tertinggi akan dieksekusi lebih dahulu. Jika dua
proses memiliki prioritas sama, maka biasanya diatur dengan FCFS.
2. Konsep Dasar
Setiap
proses
memiliki
nilai
prioritas.
CPU akan dialokasikan ke proses dengan prioritas tertinggi (nilai
prioritas paling rendah untuk sistem prioritas angka kecil) atau
sebaliknya tergantung sistem.
Contoh:
Jika angka kecil = prioritas tinggi → P1(priority=1) didahulukan
daripada P2(priority=4).
Jika proses baru masuk memiliki prioritas lebih tinggi daripada
proses saat ini:
Jika preemptive, CPU akan segera dialihkan ke proses baru.
Jika non-preemptive, proses yang sedang berjalan akan tetap
selesai dulu.
3. Jenis Priority Scheduling
a. Preemptive Priority Scheduling
 Proses baru dengan prioritas lebih tinggi akan menghentikan
proses yang sedang berjalan, dan CPU dialihkan ke proses baru
tersebut.
b. Non-preemptive Priority Scheduling
 Proses yang sedang berjalan tetap melanjutkan hingga selesai,
meskipun ada proses baru dengan prioritas lebih tinggi yang
masuk.
7
4. Karakteristik, Kelebihan, dan Kekurangan
B) Karakteristik:
 Memperhatikan priority number pada setiap proses.
 Cocok untuk real-time system yang memerlukan prioritas ketat.
 Dapat menyebabkan starvation pada proses dengan prioritas rendah
jika banyak proses prioritas tinggi masuk.
Kelebihan:
 Memberikan CPU kepada proses yang lebih penting.
 Baik untuk sistem real-time atau time-critical tasks.
 Preemptive Priority Scheduling dapat meningkatkan responsiveness
untuk proses high-priority.
Kekurangan:
 Starvation (kelaparan CPU) pada proses prioritas rendah jika proses
high-priority terus masuk.
 Memerlukan penanganan aging untuk meningkatkan prioritas
proses lama dan mencegah starvation.
 Implementasi lebih kompleks dibanding FCFS atau SJF.
CONTOH SOAL 1
Soal (Non-Preemptive Priority Scheduling)
Diketahui 5 proses berikut:
Proses
P1
P2
P3
P4
P5
Burst Time
10
1
2
1
5
8
Priority
3
1
4
5
2
Urutkan eksekusi proses dan hitung:
a. Average Waiting Time
b. Average Turnaround Time
Penyelesaian Manual
Urutan berdasarkan prioritas kecil = prioritas tinggi:
1.
2.
3.
4.
5.
P2 (priority=1) → BT=1
P5 (priority=2) → BT=5
P1 (priority=3) → BT=10
P3 (priority=4) → BT=2
P4 (priority=5) → BT=1
Proses
P2
Waiting Time
0
Turnaround Time
1
P5
1
6
P1
6
16
P3
16
18
P4
18
19
Average WT = (0+1+6+16+18)/5 = 41/5
Average TAT = (1+6+16+18+19)/5 = 60/5 = 12 ms
KODE C SOAL 1
#include <stdio.h>
struct Process {
int id;
int burstTime;
int priority;
int waitingTime;
int turnaroundTime;
};
void sortByPriority(struct Process p[], int n) {
struct Process temp;
for(int i=0; i<n-1; i++) {
9
=
8.2
ms
for(int j=i+1; j<n; j++) {
if(p[j].priority < p[i].priority) {
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
}
int main() {
int n = 5;
struct Process p[5] = {
{1, 10, 3, 0, 0}, // P1
{2, 1, 1, 0, 0}, // P2
{3, 2, 4, 0, 0}, // P3
{4, 1, 5, 0, 0}, // P4
{5, 5, 2, 0, 0} // P5
};
// Sort berdasarkan prioritas (semakin kecil semakin tinggi)
sortByPriority(p, n);
// Hitung Waiting Time dan Turnaround Time
int totalWT = 0, totalTAT = 0;
p[0].waitingTime = 0;
p[0].turnaroundTime = p[0].burstTime;
totalTAT += p[0].turnaroundTime;
for(int i = 1; i < n; i++) {
p[i].waitingTime = p[i-1].waitingTime + p[i-1].burstTime;
p[i].turnaroundTime = p[i].waitingTime + p[i].burstTime;
totalWT += p[i].waitingTime;
totalTAT += p[i].turnaroundTime;
}
printf("Urutan Eksekusi Berdasarkan Prioritas:\n");
for(int i = 0; i < n; i++) {
printf("P%d ", p[i].id);
}
printf("\n\n");
printf("Proses\tBT\tPrio\tWT\tTAT\n");
for(int i = 0; i < n; i++) {
printf("P%d\t%d\t%d\t%d\t%d\n",
p[i].id, p[i].burstTime, p[i].priority,
10
p[i].waitingTime, p[i].turnaroundTime);
}
float avgWT = (float)totalWT / n;
float avgTAT = (float)totalTAT / n;
printf("\nAverage Waiting Time: %.2f ms", avgWT);
printf("\nAverage Turnaround Time: %.2f ms\n", avgTAT);
return 0;
}
Output:
CONTOH SOAL 2
Soal (Preemptive Priority Scheduling)
Terdapat 4 proses berikut:
Proses
Burst Time
P1
6
Priority
2
P2
8
1
P3
7
3
P4
3
4
Hitung:
a. Average Waiting Time
b. Average Turnaround Time
Penyelesaian Manual (Preemptive)
Urutan eksekusi:




P2 (priority=1) → BT=8
P1 (priority=2) → BT=6
P3 (priority=3) → BT=7
P4 (priority=4) → BT=3
11
Karena tidak ada arrival time berbeda, maka urutannya tetap seperti di
atas, dan hasilnya sama seperti non-preemptive.
Proses
P2
P1
P3
P4
Waiting Time
0
8
14
21
Turnaround Time
8
14
21
24
Average WT = (0+8+14+21)/4 = 43/4
Average TAT = (8+14+21+24)/4 = 67/4 = 16.75 ms
KODE C SOAL 2
#include <stdio.h>
struct process {
int pid, bt, priority, wt, tat;
};
int main() {
int n = 4, i, j;
struct process p[4] = {
{1, 6, 2}, // P1
{2, 8, 1}, // P2
{3, 7, 3}, // P3
{4, 3, 4} // P4
};
struct process temp;
12
=
10.75
ms
// Sort processes based on ascending priority (lower = higher priority)
for(i = 0; i < n - 1; i++) {
for(j = i + 1; j < n; j++) {
if(p[i].priority > p[j].priority) {
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
// Calculate Waiting Time and Turnaround Time
p[0].wt = 0;
p[0].tat = p[0].bt;
for(i = 1; i < n; i++) {
p[i].wt = p[i-1].wt + p[i-1].bt;
p[i].tat = p[i].wt + p[i].bt;
}
// Print process table and calculate total WT and TAT
int total_wt = 0, total_tat = 0;
13
printf("PID\tBT\tPriority\tWT\tTAT\n");
for(i = 0; i < n; i++) {
printf("P%d\t%d\t%d\t\t%d\t%d\n", p[i].pid, p[i].bt, p[i].priority, p[i].wt,
p[i].tat);
total_wt += p[i].wt;
total_tat += p[i].tat;
}
printf("\nAverage Waiting Time : %.2f ms\n", (float)total_wt / n);
printf("Average Turnaround Time: %.2f ms\n", (float)total_tat / n);
return 0;
}
Output:
14
III. KESIMPULAN
Berdasarkan pembahasan yang telah dilakukan mengenai algoritma Round
Robin dan Priority Scheduling, dapat disimpulkan bahwa:
1. Algoritma Round Robin merupakan algoritma penjadwalan preemptive
yang memberikan jatah waktu eksekusi secara bergilir dengan time quantum
tertentu. Algoritma ini bersifat adil bagi semua proses karena setiap proses
mendapatkan alokasi waktu CPU secara merata, sehingga cocok digunakan
pada time-sharing system. Namun, penggunaan time quantum yang terlalu
kecil akan meningkatkan overhead akibat frekuensi context switching
yang tinggi.
2. Algoritma Priority Scheduling menjadwalkan proses berdasarkan
prioritas, baik secara preemptive maupun non-preemptive. Algoritma ini
efektif digunakan untuk sistem yang memiliki kebutuhan prioritas tertentu
(real-time system). Namun, algoritma ini memiliki kelemahan yaitu dapat
menyebabkan starvation pada proses dengan prioritas rendah apabila tidak
diterapkan teknik aging.
3. Berdasarkan hasil implementasi menggunakan Bahasa C, diketahui bahwa:
o Round Robin menghasilkan waiting time dan turnaround time yang
bergantung pada nilai time quantum dan urutan proses.
o Priority Scheduling menghasilkan waiting time dan turnaround time
yang dipengaruhi oleh urutan prioritas proses.
4. Dengan memahami kedua algoritma dan mengimplementasikannya, dapat
membantu dalam menentukan algoritma penjadwalan yang tepat untuk
berbagai kebutuhan sistem operasi dan meningkatkan performa CPU sesuai
tujuan sistem.
15
Download