You are on page 1of 16

LAPORAN PROJECT DESIGN OPERATING SYSTEM

SIMULASI PENJADWALAN DALAM SISTEM OPERASI

DOSEN:
DR. POLTAK SIHOMBING, M.Kom.

Cut desy arisandi (177038023)


Rafika Sari (177038024)
Defy Syafira (177038019)

PROGRAM STUDI S2 TEKNIK INFORMATIKA


FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI
UNIVERSITAS SUMATERA UTARA
MEDAN
2019
Bentuk Tampilan Program Penjadwalan

a. Tampilan program setelah di jalankan pada Clock-15


b. Tampilan program setelah di jalankanpada Clock-90

c. Tampilan program setelah di jalankanpada Clock-282


Listing Program Penjadwalan Sistem Operasi

Imports System.IO

Public Class Form1


Dim Antrian(100)() As String
Dim Qa(100)() As String
Dim Qb(100)() As String
Dim Qc(100)() As String
Dim temp(100) As String
Dim N As Integer = 0
Dim NA As Integer = 0
Dim NB As Integer = 0
Dim NC As Integer = 0
Dim ia As Integer = 1
Dim ib As Integer = 1
Dim ic As Integer = 1
Dim quantumtime As Integer = 6
Dim ClockNow As Integer
Dim AntrianNow As Integer
Dim sPrint As String
Dim emptyA As Boolean = True
Dim emptyB As Boolean = True
Dim emptyC As Boolean = True
Dim finishA As Boolean = False
Dim finishB As Boolean = False
Dim finishC As Boolean = False

'Keterangan
'1 : Id
'2 : Priority
'3 : Lama Proses
'4 : Burst Time
'5 : Execution Time
'6 : Waiting Time
'7 : Status
'8 : Execution Time 2

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)


Handles MyBase.Load
Me.Text = "Simulasi Antrian"
ListBox1.Items.Add("=========================================================")
ListBox1.Items.Add("Id Priority Burst Clock Awal")
ListBox1.Items.Add("=========================================================")
For Each line In File.ReadAllLines("..\\..\\MyFile.txt")
N = N + 1
Antrian(N) = line.Split(vbTab)
Antrian(N)(5) = "0"
Antrian(N)(6) = "0"
Antrian(N)(7) = "Waiting"
Antrian(N)(8) = "0"
Next

'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

Private Sub Print(ByVal A As String()(), ByVal N As Integer, ByVal Title As String)


For i = 1 To N
ListBox1.Items.Add(A(i)(0) & vbTab & A(i)(1) & vbTab & A(i)(3) & vbTab &
A(i)(4))
Next
End Sub

Private Sub PrintA(ByVal A As String()(), ByVal N As Integer, ByVal Title As String)


ListBox2.Items.Clear()
ListBox2.Items.Add("Antrian A : FIFO")
ListBox2.Items.Add("=============================================================")
ListBox2.Items.Add("Id Priority Burst Awal Proses
Waiting Status Lama")
ListBox2.Items.Add("=============================================================")

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

Private Sub PrintB(ByVal A As String()(), ByVal N As Integer, ByVal Title As String)


ListBox3.Items.Clear()
ListBox3.Items.Add("Antrian B : Round Robin")
ListBox3.Items.Add("=============================================================")
ListBox3.Items.Add("Id Priority Burst Awal Proses
Waiting Status Round")
ListBox3.Items.Add("=============================================================")

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

Private Sub PrintC(ByVal A As String()(), ByVal N As Integer, ByVal Title As String)


ListBox4.Items.Clear()
ListBox4.Items.Add("Antrian C : SJF")
ListBox4.Items.Add("=============================================================")
ListBox4.Items.Add("Id Priority Burst Awal Proses
Waiting Status Wait")
ListBox4.Items.Add("=============================================================")

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

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)


Handles Timer1.Tick
Dim same As Boolean = True

lblClock.Text = "Clock : " & ClockNow

'Demosi and Promosi

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

Dim Min As Integer = 10000

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

If (ic <> 0) Then


For i = 1 To NC
Qc(ic)(7) = "Proses"
Next
End If

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

While (same And AntrianNow <= N)


If Antrian(AntrianNow)(4) = ClockNow Then
Select Case Antrian(AntrianNow)(1)
Case 1
NA = NA + 1
Qa(NA) = Antrian(AntrianNow)
Case 2
NB = NB + 1
Qb(NB) = Antrian(AntrianNow)
Case 3
NC = NC + 1
Qc(NC) = Antrian(AntrianNow)
End Select
AntrianNow = AntrianNow + 1
End If
If AntrianNow > N Then
same = False
ElseIf Antrian(AntrianNow)(4) <> ClockNow Then
same = False
End If
End While

'Perhitungan setiap Q

PrintA(Qa, NA, "Qa : ")


PrintB(Qb, NB, "Qb : ")
PrintC(Qc, NC, "Qc : ")

ClockNow = ClockNow + 1
same = Nothing

If (ic <> 0) Then


For i = 1 To NC
If Qc(ic)(7) = "Proses" Then Qc(ic)(7) = "Waiting"
Next
End If

Dim ActiveA As Integer

ActiveA = 0
If NA > 20 Then
For i = 1 To NA
If Qa(i)(7) <> "Finish" Then ActiveA = ActiveA + 1
Next
End If

Dim MaxA As Integer = 0


If ActiveA > 20 Then
For i = 1 To NA
If Qa(i)(7) <> "Finish" And CInt(Qc(i)(3)) - CInt(Qc(i)(5)) > MaxA Then
MaxA = CInt(Qa(i)(3)) - CInt(Qa(i)(5))
ActiveA = i
End If
Next
For i = 1 To NA
If i = ActiveA Then
'Demosi ke Qb
finishB = False
NB = NB + 1
Qb(NB) = Qa(i)
Qb(NB)(7) = "Waiting"
Qb(NB)(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 : " + Qb(NB)(0) + " didemosi dari Qc ke Qb pada "
+ lblClock.Text)
End If
Next
End If

If finishA And finishB And finishC Then Timer1.Enabled = False


End Sub

Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)


Handles btnStart.Click
Select Case btnStart.Text
Case "Start"
If Trim(txtSet1.Text) = "" Or IsNumeric(txtSet1.Text) = False Then
MessageBox.Show("Isi setting 1")
txtSet1.Focus()
Exit Sub
End If
If Trim(txtSet2.Text) = "" Or IsNumeric(txtSet2.Text) = False Then
MessageBox.Show("Isi setting 2")
txtSet2.Focus()
Exit Sub
End If
If Trim(txtSet3.Text) = "" Or IsNumeric(txtSet3.Text) = False Then
MessageBox.Show("Isi setting 3")
txtSet3.Focus()
Exit Sub
End If
txtSet1.Enabled = False
txtSet2.Enabled = False
txtSet3.Enabled = False
Timer1.Enabled = True
btnStart.Text = "Pause"
Case "Pause"
Timer1.Enabled = False
btnStart.Text = "Continue"
Case "Continue"
Timer1.Enabled = True
btnStart.Text = "Pause"
End Select
End Sub

Private Sub Label8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

End Sub

Private Sub lblClock_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)


Handles lblClock.Click
Timer1.Enabled = False
End Sub
End Class
Flowchart Mekanisme Kerja Antrian

Start
N

Antrian Qa dijalankan dahulu Qa


secara pseudo paralelism kosong
N

Qb Antrian Qb harus jalan secara Y


kosong pseudo paralelism

Antrian Qc harus jalan secara


Y pseudo paralelism

End

Flowchart Perpindahan Proses pada Antrian dengan Promosi dan Demosi

Start

Antrian Qa telah menggunakan CPU Di


selama 30 clock demosikan

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

- Algoritma Round Robin

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.

- Algoritma SJF Non Preemtive

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.

Gambar Algoritma FIFO

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.

Gambar Anomali Algoritma FIFO

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

Ft[i] = ar[i] + burst[i]


Yes Wt[i] = Ft[i-1] - ar[i];

i++

i < trp3 No Awt = 0

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

k=i Yes Arr[k] -= Br[i]


IF (Br[i] >= q) No Br[i] = 0
k++

Yes k=i Arr[k] -= Br[i] Yes


Br[i] = 0
k++ IF (k < trp3)
k=i

Arr[k] -= Br[i]
Br[i] = 0 IF (k < trp3) No
k++
Yes Arr[k] -= Br[i] i++
Br[i] = 0
k++

k=i No IF (k < trp3) Yes k=i

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

You might also like