Professional Documents
Culture Documents
TR
TR
DOSEN:
DR. POLTAK SIHOMBING, M.Kom.
Imports System.IO
'Keterangan
'1 : Id
'2 : Priority
'3 : Lama Proses
'4 : Burst Time
'5 : Execution Time
'6 : Waiting Time
'7 : Status
'8 : Execution Time 2
'For i = 1 To N
' ListBox1.Items.Add(Antrian(i)(0) & vbTab & Antrian(i)(1) & vbTab &
Antrian(i)(3) & vbTab & Antrian(i)(4) & vbTab & Antrian(i)(5) & vbTab & Antrian(i)(6) &
vbTab & Antrian(i)(7))
'Next
Print(Antrian, N, "")
For i = 1 To N - 1
For j = i + 1 To N
If CInt(Antrian(i)(4)) > CInt(Antrian(j)(4)) Then
temp = Antrian(i)
Antrian(i) = Antrian(j)
Antrian(j) = temp
End If
Next
Next
ListBox2.Items.Add("Antrian A : FIFO")
ListBox2.Items.Add("=============================================================")
ListBox2.Items.Add("Id Priority Burst Awal Proses
Waiting Status Lama")
ListBox2.Items.Add("=============================================================")
ListBox3.Items.Add("Antrian B : Round Robin")
ListBox3.Items.Add("=============================================================")
ListBox3.Items.Add("Id Priority Burst Awal Proses
Waiting Status Round")
ListBox3.Items.Add("=============================================================")
ListBox4.Items.Add("Antrian C : SJF")
ListBox4.Items.Add("=============================================================")
ListBox4.Items.Add("Id Priority Burst Awal Proses
Waiting Status Wait")
ListBox4.Items.Add("=============================================================")
Timer1.Interval = 1000
ClockNow = 0
AntrianNow = 1
txtSet1.Text = 30
txtSet2.Text = 3
txtSet3.Text = 60
ib = 1
'Timer1.Enabled = True
End Sub
For i = 1 To N
ListBox2.Items.Add(A(i)(0) & vbTab & A(i)(1) & vbTab & A(i)(3) & vbTab & A(i)(4)
& vbTab & A(i)(5) & vbTab & A(i)(6) & vbTab & A(i)(7) & vbTab & A(i)(8))
Next
End Sub
For i = 1 To N
ListBox3.Items.Add(A(i)(0) & vbTab & A(i)(1) & vbTab & A(i)(3) & vbTab & A(i)(4)
& vbTab & A(i)(5) & vbTab & A(i)(6) & vbTab & A(i)(7) & vbTab & A(i)(8))
Next
End Sub
For i = 1 To N
ListBox4.Items.Add(A(i)(0) & vbTab & A(i)(1) & vbTab & A(i)(3) & vbTab & A(i)(4)
& vbTab & A(i)(5) & vbTab & A(i)(6) & vbTab & A(i)(7) & vbTab & A(i)(8))
' ListBox5.Items.Add(A(i)(0) & vbTab & A(i)(1) & vbTab & A(i)(3) & vbTab &
A(i)(4) & vbTab & A(i)(5) & vbTab & A(i)(6) & vbTab & A(i)(7) & vbTab & A(i)(8))
Next
End Sub
For i = 1 To NA
If Qa(i)(7) = "Proses" And CInt(Qa(i)(8)) >= CInt(txtSet1.Text) Then
'Demosi ke Qc
finishC = False
NC = NC + 1
Qc(NC) = Qa(i)
Qc(NC)(7) = "Waiting"
Qc(NC)(8) = 0
For j = i To NA - 1
Qa(j) = Qa(j + 1)
Next
NA = NA - 1
Qa(i)(7) = "Proses"
ListBox5.Items.Add("ID : " + Qc(NC)(0) + " didemosi dari Qa ke Qc pada " +
lblClock.Text)
End If
Next
For i = 1 To NB
If Qb(i)(7) <> "Finish" And CInt(Qb(i)(8)) >= CInt(txtSet2.Text) Then
'Demosi ke Qc
finishC = False
NC = NC + 1
Qc(NC) = Qb(i)
Qc(NC)(7) = "Waiting"
Qc(NC)(8) = 0
For j = i To NB - 1
Qb(j) = Qb(j + 1)
Next
NB = NB - 1
finishB = True
For k = 1 To NB
If Qb(k)(7) = "Waiting" Then finishB = False
Next
End If
Next
For i = 1 To NC
If Qc(i)(7) = "Waiting" And CInt(Qc(i)(8)) >= CInt(txtSet3.Text) Then
'Promosi ke Qa
finishA = False
NA = NA + 1
Qa(NA) = Qc(i)
Qa(NA)(7) = "Waiting"
Qa(NA)(8) = 0
For j = i To NC - 1
Qc(j) = Qc(j + 1)
Next
NC = NC - 1
ListBox5.Items.Add("ID : " + Qa(NA)(0) + " dipromosi dari Qc ke Qa pada " +
lblClock.Text)
End If
Next
For i = 1 To NA
If emptyA And Not finishA Then
Qa(ia)(7) = "Proses"
Qa(ia)(8) = 1
emptyA = False
End If
Next
For i = 1 To NB
If emptyB And Not Qb(ib)(7) = "Finish" Then
Qb(ib)(7) = "Proses"
emptyB = False
End If
Next
For i = 1 To NA
If Qa(i)(7) = "Proses" Then
Qa(i)(5) = CInt(Qa(i)(5)) + 1
Qa(i)(8) = CInt(Qa(i)(8)) + 1
If (CInt(Qa(i)(5)) = CInt(Qa(i)(3))) Then
Qa(i)(7) = "Finish"
ia = i + 1
emptyA = True
finishA = False
End If
ElseIf Qa(i)(7) = "Waiting" Then
Qa(i)(6) = CInt(Qa(i)(6)) + 1
finishA = False
End If
If Qa(NA)(7) = "Finish" Then finishA = True
Next
For i = ib To NB
If Qb(i)(7) = "Finish" Then
ib = ib + 1
End If
If Qb(i)(7) = "Proses" Then
Qb(i)(5) = CInt(Qb(i)(5)) + 1
quantumtime = quantumtime - 1
If quantumtime = 0 Then
Qb(i)(8) = CInt(Qb(i)(8)) + 1
Qb(i)(7) = "Waiting"
ib = ib + 1
If ib > NB Then ib = 1
emptyB = True
quantumtime = 6
finishB = False
End If
If (CInt(Qb(i)(5)) = CInt(Qb(i)(3))) Then
Qb(i)(7) = "Finish"
ib = ib + 1
emptyB = True
'finishB = True
End If
ElseIf Qb(i)(7) = "Waiting" Then
Qb(i)(6) = CInt(Qb(i)(6)) + 1
' Qb(ib)(7) = "Proses"
finishB = False
End If
If Qb(NB)(7) = "Finish" Then finishB = True
Next
ic = 0
For i = 1 To NC
If Qc(i)(7) = "Waiting" And CInt(Qc(i)(3)) - CInt(Qc(i)(5)) < Min Then
Min = CInt(Qc(i)(3)) - CInt(Qc(i)(5))
ic = i
End If
Next
For i = 1 To NC
If Qc(i)(7) = "Proses" Then
Qc(i)(5) = CInt(Qc(i)(5)) + 1
finishC = False
If (CInt(Qc(i)(5)) = CInt(Qc(i)(3))) Then
Qc(i)(7) = "Finish"
emptyC = True
'finishC = True
End If
ElseIf Qc(i)(7) = "Waiting" Then
Qc(i)(8) = CInt(Qc(i)(8)) + 1
Qc(i)(6) = CInt(Qc(i)(6)) + 1
finishC = False
End If
'For j = 1 To ic
If Qc(NC)(7) = "Finish" Then
finishC = True
Else
finishC = False
End If
'Next
Next
'Perhitungan setiap Q
ClockNow = ClockNow + 1
same = Nothing
ActiveA = 0
If NA > 20 Then
For i = 1 To NA
If Qa(i)(7) <> "Finish" Then ActiveA = ActiveA + 1
Next
End If
For j = i To NA - 1
Qa(j) = Qa(j + 1)
Next
NA = NA - 1
Qa(i)(7) = "Proses"
ListBox5.Items.Add("ID : " + Qb(NB)(0) + " didemosi dari Qc ke Qb pada "
+ lblClock.Text)
End If
Next
End If
End Sub
Start
N
End
Start
N Y
Antrian Qa maksimum dan ada proses baru
Di
akan masuk, maka proses di Qa yang akan
demosikan
menggunakan CPU paling banyak (total
waktu paling besar)
N
Y Di
Y Proses di Qb yang telah melakukan
siklus RR selama3 (tiga) kali demosikan
Y
Di
Proses di Qc yang telah menunggu
demosikan selama 60 clock
N End
Perbandingan Algoritma FIFO, Round Robin dan Non-Preemtive SJF
Konsep dasar dari algoritma ini adalah dengan menggunakan time-sharing. Pada dasarnya
algoritma ini sama dengan FCFS, hanya saja bersifat preemptive. Setiap proses mendapatkan waktu
CPU yang disebut dengan waktu quantum (quantum time) untuk membatasi waktu proses, biasanya
1-100 milidetik. Setelah waktu habis, proses ditunda dan ditambahkan pada ready queue.Jika suatu
proses memiliki CPU burst lebih kecil dibandingkan dengan waktu quantum, maka proses tersebut
akan melepaskan CPU jika telah selesai bekerja,sehingga CPU dapat segera digunakan oleh proses
selanjutnya. Sebaliknya, jika suatu proses memiliki CPU burst yang lebih besar dibandingkan
dengan waktu quantum,maka proses tersebut akan dihentikan sementara jika sudah mencapai waktu
quantum,dan selanjutnya mengantri kembali pada posisi ekor dari ready queue, CPU kemudian
menjalankan proses berikutnya.
Round Robin (RR) penjelasan singkatnya adalah eksekusi proses diatur oleh alokasi waktu
tertentu yang diatur dengan clock interrupt. Clock Interrupt sendiri terjadi secara periodic. RR juga
memiliki kelebihan diantaranya yaitu response time lebih cepat untuk proses yang ukurannya kecil,
overhead juga lebih kecil, menghindari ketidakadilan terhadap proses kecil, dan dapat mencegah
starvation. Disamping kelebihan juga ada kekurangan, kekurangannya yaitu bias terjadi overhead
yang berlebihan apabila ukuran slot terlalu kecil, proses I/O bound mendapatkan layanan yang
lebihs edikit. Cirinya adalah slot waktu lebih kecil dari response time.
Pada penjadwalan SJF, proses yang memiliki CPU burst paling kecil dilayani terlebih dahulu.
Non preemptive, bila CPU diberikan pada proses, maka tidak bisa ditunda sampai CPU burst
selesai. SJF adalah algoritma penjadwalan yang optimal dengan rata-rata waktu tunggu yang
minimal.Meskipun algoritma ini optimal, namun pada kenyataannya sulit untuk diimplementasikan
karena sulit untuk mengetahui Panjang CPU burst berikutnya. Namun nilai ini dapat diprediksi.
CPU burst berikutnya biasanya diprediksi sebagai suatu rata-rata eksponensial yang ditentukan dari
CPU burst sebelumnya atau “Exponential Average”.Rumusnya dalah:
- Algoritma FIFO
Algoritma ini adalah algoritma yang paling sederhana. Prinsip dari algoritma ini adalah seperti
prinsi pantrian (antrian tak berprioritas), halaman yang masuk lebih dulu maka akan keluar lebih
dulu juga. Algoritma ini menggunakan struktur data stack. Apa bila tidak ada frame kosong saat
terjadi page fault, maka korban yang dipilih adalah frame yang berada di stack paling bawah, yaitu
halaman yang berada paling lama berada di memori.
Padaa walnya, algoritma ini dianggap cukup mengatasi masalah tentang pergantian halaman,
sampai pada tahun 70-an, Belady menemukan keanehan pada algoritma ini yang dikenal kemudian
dengan anomaly Belady. Anomali Belady adalah keadaan di mana page fault rate meningkat seiring
dengan pertambahan jumlah frame ,seperti yang bias dilihat pada contoh di bawah ini.
Ketika jumlah frame ditambah dari 3 frame menjadi 4 frame, jumlah page fault yang terjadi malah
bertambah (dari 14 page fault menjadi 15 page fault )
Flowchart Algoritma FIFO
Start
i=1
i++
i=1
Awt += Wt[i]
Yes
i++
i < trp3
No
Start
Flowchart Algoritma ROUND ROBIN
START
int i = 0;
IF (i < trp3) No STOP
int k = 0;
Yes
IF (Ar[i+1] = 0 &&
No IF (Br[i] >= q) k=i
Ar[i+1]>=q)
Yes Yes
Arr[k] -= Br[i]
Br[i] = 0 IF (k < trp3) No
k++
Yes Arr[k] -= Br[i] i++
Br[i] = 0
k++
IF (k < trp3)
IF (k < trp3)
Arr[k] -= Br[i]
Arr[k] -= Br[i] Yes Br[i] = 0
Yes
Br[i] = 0 k++
No k++ i++
i++
No
No
IF (k < trp3)
No IF (k < trp3)
Flowchart Algoritma SJF Non Preemtive