BAB VI
PENJADWALAN
6.1 Kebutuhan
Untuk dapat menjalankan modul ini, anda memerlukan sebuah
komputer dengan operasi Linux. Dalam praktikum ini tidak ada batasan untuk
distribusi sistem operasi linux apa yang ingin dipakai.
6.2 Tujuan Praktikum
1. Mengerti konsep CPU Scheduling
2. Mampu melakukan algoritma CPU scheduling
6.3 Dasar Teori
Pada sistem single-processor hanya ada satu proses yang berjalan
pada satu waktu. Proses yang lain harus menunggu hingga CPU kosong dan
bisa dijadwalkan kembali. Sedangkan pada sistem multiprogramming ada
beberapa proses yang berjalan pada satu waktu dan untuk meningkatkan
performansi dari CPU. Beberapa proses disimpan dalam memori pada waktu
yang sama, ketika satu proses harus menunggu, sistem operasi
mengambil CPU dari proses itu dan memberikannya ke proses yang
lain.
6.4 Percobaan
1. Login ke sistem GNU/Linux kemudian buka terminal.
2. Lakukan percobaan pada kode program berikut.
main1.c
1 #include<stdio.h>
2 #include<string.h>
3
4 main() {
5 // n= banyak proses, AT= Arrival Time, WT= Waiting Time,
TAT= TurnAround Time
6 // b= burst time, TotWT= Total Waiting Time, TotTA= Total
TurnAround time
7 // name= nama proses, AvWT= Average Waiting Time, AvTA=
Average TurnAround time
8
9 int n, AT[100], b[100], i, j, tmp, WT[100], TAT[100],
time[100];
10 int TotWT=0, TotTA=0;
11 float AvWT, AvTA;
12 char name[20][20], tmpName[20];
13
14 printf("\t Algoritma CPU Scheduling FCFS \n");
15 puts("");
16 printf("Jumlah Proses\t= "); scanf("%d", &n);
17 puts("");
18
19 // Masukkan data yang diproses
20 for(i=0; i<n; i++){
21 fflush(stdin);
22 printf("Nama Proses\t= ");scanf("%s", name[i]);
23 printf("Arrival time\t= "); scanf("%d", &AT[i]);
24 printf("Burst time\t= "); scanf("%d", &b[i]);
25 puts("");
26 }
27
28 // Urutkan Data
29 for(i=0; i<n; i++){
30 for(j=i+1; j<n; j++)
31 if(AT[i]>AT[j]){
32
33 //tukar nama
34
35 strcpy(tmpName, name[i]);
36 strcpy(name[i], name[j]);
37 strcpy(name[j], tmpName);
38
39 //tukar arrival time
40
41 tmp=AT[i];
42 AT[i]=AT[j];
43 AT[j]=tmp;
44
45 //tukar burst
46
47 tmp=b[i];
48 b[i]=b[j];
49 b[j]=tmp;
50 }
51 }
52
53 time[0]=AT[0];
54
55 puts("\n\t Tabel Proses ");
56 puts("==========================================");
57 printf("| no | proses\t | time arrival\t | burst |\n");
58 puts("——————————————————————————————————————————");
59
60 for (i=0; i<n; i++){
61
62 printf("| %2d | %s\t | \t%d\t | %d\t |\n", i+1,
name[i], AT[i], b[i]);
63 time[i+1]=time[i]+b[i]; //menghitung time pada gant
chart
64 WT[i]=time[i]-AT[i];
65 TAT[i]=time[i+1]-AT[i];
66 TotWT+=WT[i];
67 TotTA+=TAT[i];
68
69 }
70
71 puts("==========================================");
72 printf("\tTotal waiting time\t= %d \n", TotWT);
73 printf("\tTurn around time\t= %d \n", TotTA);
74 puts("\n\t Tabel Waktu Proses ");
75 puts("==================================================");
76 printf("| no | proses\t | waiting time\t | turn arround\t
|\n");
77 puts("——————————————————————————————————————————————————");
78
79 for(i=0; i<n; i++){
80 printf("| %2d | %s\t | \t%d\t | \t%d\t |\n", i+1,
name[i], WT[i], TAT[i]);
81 }
82
83 puts("==================================================");
84
85 //untuk Gant Chart
86 puts("\n");
87 puts("\t Gant-Chart \n");
88 for(i=0; i<n; i++){
89 printf(" %s\t ", name[i]);
90 }
91
92 puts("");
93 for(i=0; i<n; i++){
94 printf("|=========");
95
96 }
97
98 printf("|\n");
99 for(i=0; i<=n; i++){
100 printf(" %d\t ", time[i]);
101
102 }
103
104 printf("//diperoleh dari penjumlahan Burst");
105 puts("\n");
106 AvWT=(float)TotWT/n;
107 AvTA=(float)TotTA/n;
108 printf("\tAverage Waiting Time : %f\n", AvWT);
109 printf("\tAverage Turn Around TIme : %f\n", AvTA);
110 }
LABORATORIUM PEMBELAJARAN ILMU KOMPUTER
FAKULTAS ILMU KOMPUTER
UNIVERSITAS BRAWIJAYA
6.5 Tugas
1. Login ke sistem GNU/Linux kemudian buka terminal.
2. Lakukan percobaan terhadap kode program berikut.
main2.c
1 #include<stdio.h>
2
3 int main() {
4 int i,j,n,time,remain,flag=0,tq;
5 int TotWT=0,TotTA=0,AT[100],b[100],rt[100];
6
7 printf("Masukkan jumlah proses : ");
8 scanf("%d",&n);
9 remain=n;
10
11 for(i=0;i<n;i++) {
12 printf("Masukkan arrival time untuk Proses P%d :",i+1);
13 scanf("%d",&AT[i]);
14 printf("Masukkan burst time untuk Proses P%d :",i+1);
15 scanf("%d",&b[i]);
16 rt[i]=b[i];
17 }
18
19 printf("Masukkan time quantum ");
20 scanf("%d",&tq);
21 printf("\n\nProcess\t|Turnaround time|waiting time\n\n");
22
23 for(time=0,i=0;remain!=0;) {
24 if(rt[i]<=tq && rt[i]>0) {
25 time+=rt[i];
26 rt[i]=0;
27 flag=1;
28 } else if(rt[i]>0) {
29 rt[i]-=tq;
30 time+=tq;
31 }
32 if(rt[i]==0 && flag==1) {
33 remain--;
34 printf("P[%d]\t|\t%d\t|\t%d\n",i+1,time-AT[i],time-
AT[i]-b[i]);
35 TotWT+=time-AT[i]-b[i];
36 TotTA+=time-AT[i];
37 flag=0;
38 }
39
40 if(i==n-1)
41 i=0;
42 else if(AT[i+1]<=time)
43 i++;
44 else
45 i=0;
46 }
47 printf("\nAverage Waiting Time = %f\n",TotWT*1.0/n);
48 printf("Average Turnaround Time = %f\n",TotTA*1.0/n);
49 return 0;
50 }
LABORATORIUM PEMBELAJARAN ILMU KOMPUTER
FAKULTAS ILMU KOMPUTER
UNIVERSITAS BRAWIJAYA
6.6 Kesimpulan
1. Jelaskan cara kerja dari algoritma Shortest Job First Scheduler (SJF)!
Pada algoritma ini setiap proses yang ada di ready queue akan
dieksekusi berdasarkan burst time terkecil. Hal ini
mengakibatkan waiting time yang pendek untuk setiap proses
dan karena hal tersebut makawaiting time rata-ratanya juga
menjadi pendek, sehingga dapat dikatakan bahwa algoritma ini
adalah algoritma yang optimal.
ROUNDROBIN