repository.usd.ac.idrepository.usd.ac.id/32357/2/045314064_full.pdf · ix kata pengantar puji...
Post on 14-Jul-2020
5 Views
Preview:
TRANSCRIPT
APLIKASI SIMULASI ALGORITMA PENJADWALAN SISTEM OPERASI
SKRIPSI
Diajukan Untuk Memenuhi Salah Satu Syarat
Memperoleh Gelar Sarjana Komputer Program Studi Teknik Informatika
oleh:
Yosef Benny Kurniawan
NIM: 045314064
PROGRAM STUDI TEKNIK INFORMATIKA JURUSAN TEKNIK INFORMATIKA
FAKULTAS SAINS DAN TEKNOLOGI UNIVERSITAS SANATA DHARMA
YOGYAKARTA 2011
ii
OPERATING SYSTEM ALGORITHM OF SCHEDULING SIMULATION APPLICATION
A THESIS
Presented as Partial Fulfillment of The Requirements To Obtain The Bachelor of Computer Science Degree
in Informatics Engineering Study Programme
by:
Yosef Benny Kurniawan
NIM: 045314064
INFORMATICS ENGINEERING STUDY PROGRAMME DEPARTMENT OF INFORMATICS ENGINEERING
FACULTY OF SCIENCE AND TECHNOLOGY SANATA DHARMA UNIVERSITY
YOGYAKARTA 2011
vi
INTISARI
Pembelajaran tentang algoritma juga akan menjelaskan bagaimana alur
berjalannya suatu algoritma. Oleh karena itu akan lebih mudah bila dibuat
simulasi yang menggambarkan jalannya sebuah algoritma.
Tulisan ini dibuat dengan tujuan untuk memudahkan pengguna dalam
pembelajaran algoritma penjadwalan pada sistem operasi.
Dalam pengembangan aplikasi simulasi algoritma penjadwalan ini digunakan
metodologi prototyping. Tahap-tahap prototyping tersebut meliputi pengumpulan
kebutuhan, membangun prototype, evaluasi prototype, mengkodekan sistem,
menguji sistem, evaluasi sistem, dan menggunakan sistem.
Aplikasi ini mampu menampilkan simulasi dari masing-masing algoritma
penjadwalan. Program ini dikembangkan dengan menggunakan Macromedia
Flash 8 dan Action Script 2.0.
vii
ABSTRACT
Algorithm learning is also going to explain how to run the way an
algorithm. So that it will be easier if we make an simulation to describe the run of
algorithm.
This task was made in order to make easier the users in algorithm
scheduling of operating system learning.
In extension this algorithm of scheduling simulation application,it can be
used prototyping methodology. The prototyiping steps include gathering requisite,
building up prototype, evaluating prototype, signing the system, testing the
system, evaluating the system, and using the system.
This application is able to appear the simulation from each scheduling
algorithm. This programme is extended with using Macromedia Flash 8 and
Action Script 2.0.
ix
KATA PENGANTAR
Puji syukur saya ucapkan ke hadirat Tuhan Yang Maha Esa atas berkat
dan limpahan kasih karunia yang telah diberikan-Nya sehingga saya dapat
menyelesaikan skripsi ini dengan judul “APLIKASI SIMULASI ALGORITMA
PENJADWALAN SISTEM OPERASI”.
Dalam penulisan skripsi ini, penulis telah banyak memperoleh bantuan dan
bimbingan dari berbagai pihak, oleh karena itu tidak lupa penulis mengucapkan
terimakasih kepada:
1. Tuhan Yesus Kristus, yang telah menganugerahkan kasih karunia dan
rahmat-Nya serta selalu memberikan keberuntungan.
2. Bunda Maria yang telah mendengarkan segala doa dan permohonan.
3. Ayah, Mamah, kakak serta adikku yang selalu memberikan doa, dorongan
dan semangat baik moril maupun spiritual.
4. Bapak Yosef Agung Cahyanta, S.T., M.T selaku Dekan Fakultas Sains dan
Teknologi Universitas Sanata Dharma Yogyakarta.
5. Bapak Puspaningtyas Sanjoyo Adi, S.T., M..T. selaku Ketua Jurusan Teknik
Informatika Fakultas Sains dan Teknologi Universitas Sanata Dharma
Yogyakarta.
6. Ibu Agnes Maria Polina, S.Kom., M.Sc., selaku Dosen Pembimbing
Akademik Angkatan 2004 Jurusan Teknik Informatika Fakultas Sains dan
Teknologi Universitas Sanata Dharma Yogyakarta.
x
7. Bapak DS. Bambang Soelistijanto, S.T.,Msc selaku pembimbing I dan
Agung Hernawan, ST selaku pembimbing II, yang telah memberikan waktu,
bantuan dan bimbingan serta ide-ide dalam menyelesaikan skripsi ini.
8. Andri Krisharyadi, Kuntarto Kunto Aji, Tri Prasetyo Adi, Yanuarius Budi,
Mahendra Yudha dan Brigita Moris Meta Cynara yang telah membantu
dalam pengerjaan tugas akhir, baik moril maupun spiritual.
9. Teman-teman TI’2004 yang lain yang telah menjadi teman seperjuangan
dalam melalui kuliah selama ini.
Akhirnya skripsi ini terselesaikan, disadari bahwa skripsi ini jauh dari
sempurna. Untuk itu penulis dengan rendah hati mengharapkan kritik dan saran
yang dapat memberikan kesempurnaan pada penulisan skripsi ini. Akhir kata,
semoga skripsi ini dapat bermanfaat bagi penulis, juga pihak yang membutuhkan.
Penulis
Yosef Benny Kurniawan
xi
DAFTAR ISI
Halaman
HALAMAN JUDUL ……………………………………………………..… i
HALAMAN JUDUL ……………………………………………………….. ii
HALAMAN PERSETUJUAN PEMBIMBING ………………………….. iii
HALAMAN PENGESAHAN …………………………………..…………. iv
HALAMAN KEASLIAN KARYA …………..…………………………… v
INTISARI ………………………………………………………………….. vi
ABSTRACT ……………………………………………………………...... vii
LEMBAR PERNYATAAN PUBLIKASI ……………………………....... viii
KATA PENGANTAR …………………....................…………………….. ix
DAFTAR ISI ………………………………………………………………... xi
DAFTAR TABEL ………………………………………………………..… xvi
DAFTAR GAMBAR ………………………………………………………. xvii
BAB I PENDAHULUAN ……………….…………………...................... 1
1.1 Latar Belakang Masalah ...……………………………….………….. 1
1.2 Rumusan Masalah …...……………………………….…………….. 2
1.3 Batasan Masalah ………………………………………...………….. 2
1.4 Tujuan ………………………………………………...……………. 3
1.5 Metodologi …………………………………………...…………….. 3
1.6 Sistematika Penulisan ………………………………...……………. 4
xii
BAB II LANDASAN TEORI …………………………………………… 6
2.1 Sistem Informasi ……………………………………………………. 6
2.2 Simulasi …………………………………….………………………. 8
2.2.1 Simulasi dan Pemodelan ………………..……….…………….. 8
2.2.2 Kelebihan dan Kekurangan Simulasi ………………….............. 9
2.3 Metode Prototyping …………………………………………………… 10
2.3.1 Tahapan-tahapan Prototyping ………………………………… 11
2.3.2 Keunggulan dan Kelemahan Prototyping ……………………. 12
2.4 Macromedia Flash 8 …………………………………………….…….. 13
2.5 Sistem Operasi ……………………………………………………….. 15
2.5.1 Pengertian Umum Sistem Operasi …………………………… 15
2.5.2 Konsep Dasar Sistem Operasi ……………………………….. 16
2.6 Central Processing Unit (CPU) ………………………………........... 19
2.7 Penjadwalan CPU ………………………………………………........ 19
2.7.1 Sasaran Utama Penjadwalan CPU …………………………… 20
2.7.2 Tipe-tipe Penjadwalan CPU …………………………………. 21
2.7.3 Strategi Penjadwalan CPU …………………………………… 23
2.7.4 Penjadwalan CPU …………………………………….……… 24
2.7.4.1 First Come First Serve (FCFS) ……………............. 25
2.7.4.2 Shortest Job First (SJF) ……………………............ 26
2.7.4.3 Round Robin (RR) ………………………..….……… 27
2.7.4.4 Priority ……………………………………………… 29
xiii
BAB III ANALISIS DAN PERANCANGAN SISTEM .......................... 31
3.1 Analisis Sistem …………………………………………………….…. 31
3.1.1 Analisis Masalah ……………………………………….…….. 31
3.2 Perancangan Sistem ………………………..…………………….…… 33
3.2.1 Desain Model Secara Umum ………………..…………….…. 33
3.2.1.1 Diagram Use Case ……………………………….…. 33
3.2.1.2 Tabel Penjelasan Use Case …………………….…… 34
3.2.1.3 Struktur Menu ………………………………….…… 36
3.2.1.4 Desain Modul (Flowchart) ………………….……… 36
3.3 Perangkat Keras dan Perangkat Lunak ……...………………….…… 37
3.4 Perancangan Menu Antar Muka ..………………………………….… 37
BAB IV IMPLEMENTASI DAN PEMBAHASAN ……………….……. 42
4.1 Implementasi Program ………………………….……………………. 42
4.1.1 Halaman Utama ………………………………….…………… 42
4.1.2 Halaman Menu Utama ……………………………….………. 44
4.1.2.1 Menu Materi …………………….…………………. 45
4.1.2.2 Menu Simulasi ……………………….…………….. 52
4.1.2.3 Menu Bantuan ……………………….……………… 60
4.2 Kuisioner ……………………………………………………….…….. 62
4.2.1 Kuisioner dan Cara Pengumpulan Datanya ………….………. 62
4.2.2 Sasaran Kuisioner …………………….………………………. 63
4.2.3 Form Kuisioner …………………………….………………… 63
4.2.4 Hasil dan Pembahasan ………………………………………... 64
xiv
4.3 Pembahasan ………………………………………………………….. 68
4.4 Testing Program …………………………………………………….. 69
4.4.1 Sampel Data I ………………………………………………… 70
4.4.1.1 Data I pada algoritma FCFS ……………………….. 70
4.4.1.2 Data I pada algoritma SJF Nonpreemtive …………… 73
4.4.1.3 Data I pada algoritma SJF Preemtive ………………. 75
4.4.1.4 Data I pada algoritma RR …………………………… 77
4.4.1.5 Data I pada algoritma Priority Nonpreemtive ………. 79
4.4.1.6 Data I pada algoritma Priority Preemtive …………… 81
4.4.2 Sampel Data II ………………………………………………..... 83
4.4.2.1 Data II pada algoritma FCFS …………………………. 83
4.4.2.2 Data II pada algoritma SJF Nonpreemtive ……………. 86
4.4.2.3 Data II pada algoritma SJF Preemtive ………………... 88
4.4.2.4 Data II pada algoritma RR ……………………………. 90
4.4.2.5 Data II pada algoritma Priority Nonpreemtive ……….. 92
4.4.2.6 Data II pada algoritma Priority Preemtive …………… 94
4.4.3 Sampel Data III ………………………………………………… 96
4.4.3.1 Data III pada algoritma FCFS ……………………….. 96
4.4.3.2 Data III pada algoritma SJF Nonpreemtive …………. 99
4.4.3.3 Data III pada algoritma SJF Preemtive ……………… 101
4.4.3.4 Data III pada algoritma RR ………………………….. 103
4.4.3.5 Data III pada algoritma Priority Nonpreemtive ……... 105
4.4.3.6 Data III pada algoritma Priority Preemtive …………. 107
xv
4.4.4 Sampel Data IV ……………………………………………….. 109
4.4.4.1 Data IV pada algoritma FCFS ………………………. 109
4.4.4.2 Data IV pada algoritma SJF Nonpreemtive …………. 112
4.4.4.3 Data IV pada algoritma SJF Preemtive ……………… 114
4.4.4.4 Data IV pada algoritma RR …………………………. 116
4.4.4.5 Data IV pada algoritma Priority Nonpreemtive …….. 118
4.4.4.6 Data IV pada algoritma Priority Preemtive …………. 120
4.4.5 Sampel Data V ………………………………………………… 122
4.4.5.1 Data V pada algoritma FCFS ……………………….. 122
4.4.5.2 Data V pada algoritma SJF Nonpreemtive ………….. 125
4.4.5.3 Data V pada algoritma SJF Preemtive ………………. 127
4.4.5.4 Data V pada algoritma RR ………………………...… 129
4.4.5.5 Data V pada algoritma Priority Nonpreemtive ……… 131
4.4.5.6 Data V pada algoritma Priority Preemtive ………….. 133
BAB V PENUTUP ………………………………………………………… 138
5.1 Kesimpulan …………………………………………………………… 138
5.2 Saran ………………………………………………………………….. 138
DAFTAR PUSTAKA ……………………………………………………… 140
LAMPIRAN ………………………………………………………………... 141
xvi
DAFTAR TABEL
Tabel Keterangan Halaman
2.1 Tabel Status Dasar Proses 16
3.1 Tabel Penjelasan Use Case 35
4.1 Data I 71
4.2 Data II 84
4.3 Data III 97
4.4 Data IV 110
4.5 Data V 123
4.6 Perbandingan Nilai Average Waiting Time (AWT) 136
4.7 Perbandingan nilai waktu rata-rata selesai semua proses 137
xvii
DAFTAR GAMBAR
Gambar Keterangan Halaman
2.1 Hubungan Pemodelan dan Simulasi 8
2.2 Diagram Status Dasar Proses 17
3.1 Diagram Use Case 34
3.2 Struktur Menu 37
3.3 Diagram Flowchart 37
3.4 Tampilan Halaman Utama 38
3.5 Tampilan Antar Muka bila pengguna menekan tombol
masuk 39
3.6 Tampilan dari sub-menu Materi bila ditekan 40
3.7 Tampilan materi dari salah satu sub-materi bila ditekan 40
3.8 Tampilan simulasi bila pengguna menekan tombol menu
Simulasi 41
3.9 Tampilan dari menu Bantuan 42
4.1 Tampilan Halaman Utama 44
4.2 Tombol MENU UTAMA yang diberi action script 44
4.3 Tombol KELUAR yang diberi action script 45
4.4 Tampilan halaman MENU UTAMA 45
4.5 Tombol back yang diberi action script 46
4.6 Tampilan tombol Materi 46
xviii
4.7 Salah satu tampilan Materi Algoritma Penjadwalan 48
4.8 Salah satu tampilan dari Materi First Come First Serve 49
4.9 Salah satu tampilan dari Materi Shortest Job First 49
4.10 Salah satu tampilan dari Materi Round Robin 50
4.11 Salah satu tampilan dari Materi Priority 51
4.12 Tombol next back dalam setiap menu materi 52
4.13 Tombol Home 52
4.14 Halaman Simulasi 53
4.15 Pesan Error 54
4.16 Diagram Status Proses 59
4.17 Diagram Waktu Kedatangan 60
4.18 Gant Chart 60
4.19 Tampilan Halaman Bantuan 61
4.20 Tombol next dan tombol back 62
4.21 Tombol close menu bantuan 62
4.22 Form Kuisioner 64
4.23 Perhitungan hasil kuisioner pertanyaan 1 65
4.24 Perhitungan hasil kuisioner pertanyaan 2 65
4.25 Perhitungan hasil kuisioner pertanyaan 3 66
4.26 Perhitungan hasil kuisioner pertanyaan 4 66
4.27 Perhitungan hasil kuisioner pertanyaan 5 67
4.28 Perhitungan hasil kuisioner pertanyaan 6 67
xix
4.29 Perhitungan hasil kuisioner pertanyaan 7 68
4.30 Perhitungan hasil kuisioner pertanyaan 8 68
4.31 Perhitungan hasil kuisioner pertanyaan 9 69
4.32 Visualisasi data I Algoritma FCFS 72
4.33 Visualisasi data I Algoritma SJF Nonpreemtive 74
4.34 Visualisasi data I Algoritma SJF Preemtive 76
4.35 Visualisasi data I Algoritma RR 78
4.36 Visualisasi data I Algoritma Priority Nonpreemtive 80
4.37 Visualisasi data I Algoritma Priority Preemtive 82
4.38 Visualisasi data II Algoritma FCFS 85
4.39 Visualisasi data II Algoritma SJF Nonpreemtive 87
4.40 Visualisasi data II Algoritma SJF Preemtive 89
4.41 Visualisasi data II Algoritma RR 91
4.42 Visualisasi data II Algoritma Priority Nonpreemtive 93
4.43 Visualisasi data II Algoritma Priority Preemtive 95
4.44 Visualisasi data III Algoritma FCFS 98
4.45 Visualisasi data III Algoritma SJF Nonpreemtive 100
4.46 Visualisasi data III Algoritma SJF Preemtive 102
4.47 Visualisasi data III Algoritma RR 104
4.48 Visualisasi data III Algoritma Priority Nonpreemtive 106
4.49 Visualisasi data III Algoritma Priority Preemtive 108
4.50 Visualisasi data IV Algoritma FCFS 111
xx
4.51 Visualisasi data IV Algoritma SJF Nonpreemtive 113
4.52 Visualisasi data IV Algoritma SJF Preemtive 115
4.53 Visualisasi data IV Algoritma RR 117
4.54 Visualisasi data IV Algoritma Priority Nonpreemtive 119
4.55 Visualisasi data IV Algoritma Priority Preemtive 121
4.56 Visualisasi data V Algoritma FCFS 124
4.57 Visualisasi data V Algoritma SJF Nonpreemtive 126
4.58 Visualisasi data V Algoritma SJF Preemtive 128
4.59 Visualisasi data V Algoritma RR 130
4.60 Visualisasi data V Algoritma Priority Nonpreemtive 132
4.61 Visualisasi data V Algoritma Priority Preemtive 134
1
BAB I
PENDAHULUAN
1.1 Latar Belakang Masalah
Perkembangan teknologi sekarang ini sudah mengalami kemajuan yang
sangat pesat, terlebih lagi teknologi sekarang pasti tidak akan lepas dari
sistem komputer, dan perkembangan teknologi komputer saat ini juga sudah
banyak dipengaruhi oleh Sistem Operasi. Sistem Operasi menyediakan suatu
lingkungan yang memungkinkan user dapat menjalankan program, membuat
sistem komputer dapat digunakan secara mudah, tepat dan juga membuat
sistem komputer dapat menggunakan hardware secara efisien (Iwan Binanto,
2005).
Operasi-operasi kerja yang dilakukan oleh CPU tersebut memerlukan
suatu sistem pengaturan ukuran beban kerja bagi suatu sistem komputer dapat
diselesaikan secara cepat dan tepat. Ketika banyak proses berjalan bersamaan,
sistem operasi harus memutuskan proses mana yang harus berjalan pertama
kali. Bagian dari sistem operasi yang menangani hal ini disebut dengan
Scheduler (Penjadwal). Algoritma yang digunakan disebut dengan Algoritma
Penjadwalan (Iwan Binanto, 2005).
Dalam algoritma penjadwalan sering dalam pengerjaannya
menggunakan data-data dan disertai gambar seperti diagram status proses dan
gant chart yang menunjukkan datangnya suatu proses. Dengan adanya
visualisasi algoritma penjadwalan membuat penulis merasa perlu untuk
2
membahas masalah ini dengan membuat simulasi cara kerja dari algoritma
penjadwalan dalam berbagai keadaan masukan yang diberikan sehingga dapat
membantu pengguna dalam memahami proses dari suatu algoritma
penjadwalan.
Dengan demikian, penulis berharap tugas akhir ini dapat memberikan
gambaran tentang cara kerja algoritma FCFS, SJF Nonpreemtive, SJF
Preemtive, RR, Priority Nonpreemtive dan Priority Preemtive.
1.2 Rumusan Masalah
Bagaimana membantu pengguna dalam memahami tentang algoritma
penjadwalan dengan bantuan visualisasi.
1.3 Batasan Masalah
Program ini dibuat dengan batasan sebagai berikut:
1. Program mensimulasikan algoritma penjadwalan satu tingkat, algoritma
yang disimulasikan adalah algoritma FCFS, SJF Nonpreemtive, SJF
Preemtive, RR, Priority Nonpreemtive dan Priority Preemtive.
2. Program mensimulasikan tidak mensimulasikan algoritma penjadwalan
dua tingkat, seperti Multilevel Queue dan Multilevel Feedback Queue.
Karena penjadwalan satu tingkat sudah dapat mewakili penjadwalan dua
tingkat yang juga terdapat preemtive dan priority.
3
3. Jumlah proses yang digunakan untuk masing-masing simulasi algoritma
maksimal sampai dengan 5 proses. Karena 5 proses dirasa sudah dapat
menunjukkan simulasi cara kerja dari algoritma penjadwalan.
4. Program memvisualisasikan Diagram Status Proses, Diagram Waktu
Kedatangan, Gant Chart, Mulai Tunggu, Selesai Tunggu, Mulai Proses,
Selesai Proses, Lama Tunggu dan AWT (Average Waiting Time).
1.4 Tujuan
Tujuan dari penulisan ini adalah untuk membantu pengguna dalam
memahami algoritma penjadwalan dengan bantuan visualisasi.
1.5 Metodologi Penelitian
Metode yang digunakan untuk menyelesaikan penulisan ini adalah
metodologi prototyping (Roger Pressman, 1997) yang meliputi beberapa
proses diantaranya:
1. Pengumpulan kebutuhan
Pengembang dan user menemukan bersama tujuan perangkat lunak beserta
seluruh kebutuhannya.
2. Desain cepat
Desain memfokuskan pada representasi dari semua aspek perangkat lunak,
seperti pendekatan untuk memasukkan data, format keluaran. Perancang
mengarah pada pembangunan prototype.
4
3. Pembangunan prototype
Pembangunan prototype didasarkan pada proses desain cepat.
4. Evaluasi pelanggan terhadap prototype
Prototype diberikan pelanggan untuk dievaluasi apakah sesuai denga
permintaan pengguna. Pengguna dan pengembang mendiskusikan
perubahan yang diinginkan.
5. Perbaikan prototype
Perbaikan prototype dilakukan berdasarkan hasil evaluasi. Proses iterasi
terjadi menyertai proses ini, kecuali jika kebutuhan pengguna sudah
terpenuhi.
6. Produk rekayasa
Berupa perangkat lunak yang mendekati kebutuhan pengguna.
1.6 Sistematika Penulisan
BAB I PENDAHULUAN
Bab ini akan berisi Latar Belakang Masalah, Rumusan Masalah
Batasan Masalah, Tujuan, Metodologi, dan Sistematika Penulisan.
BAB II LANDASAN TEORI
Bab ini akan berisi tentang teori-teori dari metodologi yang
digunakan, sistem operasi, algoritma penjadwalan, macromedia
flash dan bahasa pemrograman action script.
5
BAB III ANALISA DAN PERANCANGAN SISTEM
Bab ini akan membahas rancangan konsep dari sistem,
perancangan antarmuka sistem dan pengumpulan bahan.
BAB IV IMPLEMENTASI DAN PEMBAHASAN
Bab ini akan menjelaskan secara rinci tentang program pada setiap
bagian dan hasil dari kuisioner yang disebarkan kepada pengguna
secara acak.
BAB V KESIMPULAN DAN SARAN
Bab ini berisi Kesimpulan dan Saran untuk sistem yang telah
dibuat agar ada pengembangan yang lebih baik untuk masa yang
akan datang.
DAFTAR PUSTAKA
LAMPIRAN
6
BAB II
LANDASAN TEORI
2.1 Sistem Informasi
Sistem informasi adalah sekumpulan komponen yang mempunyai fungsi
berbeda-beda, saling berinteraksi dan bekerja sama untuk menghasilkan satu
tujuan yang sama (Jogianto, 1999). Tujuan dari sistem informasi adalah untuk
menyediakan dan menyusun informasi yang merefleksikan seluruh kejadian
yang diperlukan untuk mengendalikan beberapa operasi. Operasi tersebut
diantaranya mengambil, mengolah, menyimpan, dan menyampaikan
informasi yang diperlukan.
Kriteria sistem informasi yang baik mengacu pada 3 hal, yaitu akurat, tepat
pada waktunya, dan relevan (Jogianto, 1999). Akurat berarti kualitas dari
sistem informasi harus bebas dari kesalahan-kesalahan, tidak menyesatkan,
serta harus jelas mencerminkan maksudnya. Tepat pada waktunya berarti
informasi yang datang pada penerima tidak boleh terlambat karena informasi
merupakan landasan dalam pengambilan keputusan. Mahalnya nilai informasi
disebabkan cepatnya informasi tersebut didapat, sehingga diperlukan
teknologi yang mutakhir untuk mendapatkan, mengolah dan mengumumkan.
Sedangkan relevan berarti informasi harus mempunyai manfaat dan dapat
semakin mempermudah kinerja dari pemakainya. Relevansi informasi untuk
setiap orang satu sama lain berbeda, tergantung dari maksud dan tujuan
masing-masing orang tersebut.
7
Tahap-tahap pembuatan Sistem Informasi mencakup beberapa hal,
diantaranya :
1. Perencanaan
Sebelum suatu sistem informasi dikembangkan umumnya terlebih
dahulu dimulai dengan adanya suatu kebijakan dan perencanaan untuk
mengembangkan sistem itu. Tanpa adanya perencaan sistem yang baik,
pengembangan system tidak akan dapat berjalan sesuai dengan yang
diharapkan.
2. Analisa Sistem
Didalam tahap analisia sistem tedapat langkah-langkah dasar yang
harus dilakukan, yaitu :
1) Identify, yaitu mengidentifikasi masalah.
2) Understand, yaitu memahami kerja sistem yang ada.
3) Analyze, yaitu menganalisa sistem.
3. Desain Sistem
Tahap desain sistem mempunyai beberapa tujuan yaitu :
1) Untuk memenuhi kebutuhan kepada pemakai sistem.
2) Untuk memberikan gambaran yang jelas dan rancang bangun yang
lengkap kepada progamer yang terlibat.
8
4. Implementasi sistem dan testing
Merupakan proses pembuatan program dari sistem baru yang
diusulkan dan sebelum program diterapkan maka program harus terlebih
dulu bebas dari 9 kesalahan. Oleh karena itu program harus diuji untuk
menemukan kemungkinan yang terjadi. (Jogianto, 1999)
2.2 Simulasi
2.2.1 Simulasi dan Pemodelan
Simulasi adalah proses pembuatan desain model dari suatu sistem
nyata secara matematika dan logika, kemudian model tersebut
diimplementasikan dengan percobaan berbasis komputer untuk
menjelaskan, menggambarkan, dan memprediksi kelakuan atau perilaku
dari sistem nyata tersebut (Hoover dan Perry, 1989).
Menurut Suryadi dan Ramdhani (1998), simulasi sebagai alat
deskriptif diartikan sebagai alat untuk menerangkan atau
memperkirakan karakter sistem pada keadaan yang berbeda, karena itu
tidak ada simulasi yang secara otomatis akan mendapatkan solusi yang
optimal .
Gambar 2.1 Hubungan Pemodelan dan Simulasi
9
Sistem nyata merupakan sistem yang mewakili dunia nyata dengan
kepentingan tertentu. Model menyatakan sekumpulan instruksi yang
menggambarkan sistem nyata. Komputer merupakan sarana yang
digunakan untuk melakukan proses perhitungan dari data dan informasi
yang tersedia. Pemodelan menjelaskan hubungan antara sistem nyata
dengan model. Sedangkan simulasi menjelaskan antara model dan
komputer. Untuk melakukan validasi terhadap model, kita perlu
melakukan konsultasi dengan ahli yang terkait dalam sistem yang
dimodelkan. Sedangkan untuk meneliti kelayakan hasil simulasi, kita
melakukan verifikasi yaitu bagaimana kemampuan model untuk
mewakili dunia nyata dengan melihat tingkat kesamaan antar data
sistem nyata dengan data yang dibandingkan model (Suryadi dan
Ramdhani, 1998).
2.2.2 Kelebihan dan Kekurangan Simulasi
1. Kelebihan Simulasi
Menurut Suryadi dan Ramdhani (1998), kelebihan dari simulasi
antara lain:
1) Model yang sudah dibuat dapat dipergunakan berulang untuk
menganalisis tujuan.
2) Analisis dengan metode simulasi dapat dilakukan dengan
masukan data yang bervariasi.
3) Simulasi memungkinkan untuk melakukan studi suatu system
jangka panjang dalam waktu yang relatif singkat.
10
4) Sistem memungkinkan untuk melakukan percobaan terhadap
sistem tanpa adanya resiko pada sistem nyata.
2. Kekurangan Simulasi
Menurut Suryadi dan Ramdhani (1998), kekurangan dari
simulasi antara lain:
1) Model simulasi memerlukan waktu yang cukup banyak untuk
pengembangannya.
2) Kualitas dan analisis model tergantung pada kualitas keahlian si
pembuat model.
2.3 Metodologi Prototyping
Prototyping merupakan salah satu metode pengembangan perangkat
lunak yang banyak digunakan. Dengan metode prototyping ini pengembang
dan pelanggan dapat saling berinteraksi selama proses pembuatan sistem
(Hery Setiawan, 2009).
Sering terjadi seorang pelanggan hanya mendefinisikan secara umum
apa yang dikehendakinya tanpa menyebutkan secara detal output apa saja
yang dibutuhkan, pemrosesan dan data-data apa saja yang dibutuhkan.
Sebaliknya disisi pengembang kurang memperhatikan efesiensi algoritma,
kemampuan sistem operasi dan interface yang menghubungkan manusia dan
komputer (Roger Pressman, 1997).
Untuk mengatasi ketidakserasian antara pelanggan dan pengembang,
maka harus dibutuhkan kerjasama yang baik diantara keduanya sehingga
11
pengembang akan mengetahui dengan benar apa yang diinginkan pelanggan
dengan tidak mengesampingkan segi-segi teknis dan pelanggan akan
mengetahui proses-proses dalam menyelesaikan sistem yang diinginkan.
Dengan demikian akan menghasilkan sistem sesuai dengan jadwal waktu
penyelesaian yang telah ditentukan (Roger Pressman, 1997).
Kunci agar model prototype ini berhasil dengan baik adalah dengan
mendefinisikan aturan-aturan main pada saat awal, yaitu pelanggan dan
pengembang harus setuju bahwa prototype dibangun untuk mendefinisikan
kebutuhan. Prototype akan dihilangkan sebagian atau seluruhnya dan
perangkat lunak aktual direkayasa dengan kualitas dan implementasi yang
sudah ditentukan (Hery Setiawan, 2009).
2.3.1 Tahapan-tahapan Prototyping
Menurut Hery Setiawan (2009). Tahapan-tahapan dalam
Prototyping adalah sebagai berikut:
1. Pengumpulan kebutuhan
Pelanggan dan pengembang bersama-sama mendefinisikan format
seluruh perangkat lunak, mengidentifikasikan semua kebutuhan, dan
garis besar sistem yang akan dibuat.
2. Membangun prototyping
Membangun prototyping dengan membuat perancangan sementara
yang berfokus pada penyajian kepada pelanggan (misalnya dengan
membuat input dan format output).
12
3. Evaluasi prototyping
Evaluasi ini dilakukan oleh pelanggan apakah prototyping yang
sudah dibangun sudah sesuai dengan keinginan pelanggan. Jika sudah
sesuai maka langkah 4 akan diambil. Jika tidak prototyping direvisi
dengan mengulangu langkah 1, 2 , dan 3.
4. Mengkodekan sistem
Dalam tahap ini prototyping yang sudah di sepakati diterjemahkan
ke dalam bahasa pemrograman yang sesuai.
5. Menguji sistem
Setelah sistem sudah menjadi suatu perangkat lunak yang siap pakai,
harus dites dahulu sebelum digunakan. Pengujian ini dilakukan dengan
White Box, Black Box, Basis Path, pengujian arsitektur dan lain-lain.
6. Evaluasi Sistem
Pelanggan mengevaluasi apakah sistem yang sudah jadi sudah sesuai
dengan yang diharapkan . Juka ya, langkah 7 dilakukan; jika tidak,
ulangi langkah 4 dan 5.
7. Menggunakan sistem
Perangkat lunak yang telah diuji dan diterima pelanggan siap untuk
digunakan.
2.3.2 Keunggulan dan Kelemahan Prototyping
Menurut Hery Setiawan (2009). Keunggulan prototyping adalah:
1. Adanya komunikasi yang baik antara pengembang dan pelanggan.
13
2. Pengembang dapat bekerja lebih baik dalam menentukan kebutuhan
pelanggan.
3. Pelanggan berperan aktif dalam pengembangan sistem.
4. Lebih menghemat waktu dalam pengembangan sistem.
5. Penerapan menjadi lebih mudah karena pemakai mengetahui apa
yang diharapkannya.
Menurut Hery Setiawan (2009). Kelemahan prototyping adalah :
1. Pelanggan kadang tidak melihat atau menyadari bahwa perangkat
lunak yang ada belum mencantumkan kualitas perangkat lunak
secara keseluruhan dan juga belum memikirkan kemampuan
pemeliharaan untuk jangja waktu lama.
2. Pengembang biasanya ingin cepat menyelesaikan proyek. Sehingga
menggunakan algoritma dan bahasa pemrograman yang sederhana
untuk membuat prototyping lebih cepat selesai tanpa memikirkan
lebih lanjut bahwa program tersebut hanya merupakan cetak biru
sistem.
3. Hubungan pelanggan dengan komputer yang disediakan mungkin
tidak mencerminkan teknik perancangan yang baik.
2.4 Macromedia Flash 8
Macromedia flash adalah sebuah salah satu program animasi yang
paling fleksibel dalam membuat suatu hasil karya animasi. Macromedia flash
14
sangat bermanfaat untuk membuat animasi interaktif maupun non-interaktif
yang dilengkapi dengan bahasa pemrograman ActionScript. Sintaks dan tata
bahasa dalam ActionScript mirip dengan bahasa pemrograman berorientasi
object. Macromedia flash biasanya digunakan untuk membuat animasi web,
iklan, maupun pembuatan film-film animasi dua dimensi.
Keunggulan dari macromedia flash ini dari program-program yang
lain adalah :
1. Dapat membuat tombol interaktif dengan sebuah movie atau object yang
lain.
2. Dapat membuat perubahan transparansi warna dalam movie.
Pemrograman dengan ActionScript pada Macromedia flash dapat
digunakan untuk pembuatan visualisasi di segala bidang terutama aplikasi
interaktif berbasis web. ActionScript adalah pemrograman visual berorientasi
object. Seperti JavaScipt, ActionScript mempunyai sintaks, tata bahasa, dan
struktur yang mirip dengan bahasa pemrograman C++. Salah satu fungsi dari
ActionScript dalam macromedia Flash adalah untuk memberikan suatu
tampilan tools yang sangat interaktif dengan penggunanya.
Beberapa fungsi-fungsi dasar dari ActionScript diantaranya :
1. Go To – melompat ke frame atau scene.
2. Play dan Stop – untuk menjalankan dan menghentikan movie.
3. Toggle High Quality – untuk mengatur kualitas tampilan movie.
4. Stop All Sounds – menghentikan suara pada movie
5. Get URL – berpindah ke URL lain.
15
6. FSCommand – mengontrol action yang berjalan pada Flash player
7. Load Movie, Unload Movie – menambah dan menghilangkan movie.
8. Tell Target – mengontrol movie lain dari movie clip.
9. Onmovie Event – action bila mouse event.
2.5 Sistem Operasi
2.5.1 Pengertian Umum Sistem Operasi
Sistem operasi adalah software sistem komputer yang membantu
hardware dalam menjalankan fungsi-fungsi manajemen proses atau
kontrol proses. Sistem operasi merupakan resource manager yang akan
menentukan proses mana yang harus terlebih dahulu dikerjakan, apabila
terdapat dua atau lebih proses yang akan dikerjakan secara bersamaan.
Sistem operasi bertanggung jawab mengatur agar semua resource
(CPU, I/O device, memory) dapat berjalan secara efisien (Iwan Binanto,
2005).
Sebuah Sistem operasi adalah bagian terpenting dari sebagian besar
dari setiap sistem komputer. Sebuah sistem komputer secara umum
dapat dibagi menjadi empat komponen (Iwan Binanto, 2005), yaitu:
1. Hardware (CPU, I/O devices)
2. Sistem Operasi
3. Program-program aplikasi (misalnya: compilers, system database,
video games, program bisnis)
4. User (manusia, mesin atau komputer lain)
16
2.5.2 Konsep Dasar Sistem Operasi
1. Proses
Proses merupakan konsep paling mendasar pada sistem operasi,
karena semua pengelolahan sistem operasi dikaitkan dengan proses.
Proses adalah program yang sedang dieksekusi atau sesuatu yang
dinamis. PCB (Process Control Block) merupakan tempat untuk
menyimpan satu proses dan merupakan record yang sangat besar dan
tempat menyimpan semua informasi. Tiap PCB mengandung semua
informasi tentang proses yang diperlukan oleh sistem operasi.
2. Status Proses
Status proses merupakan serangkaian status yang harus dilewati
proses. Dalam tabel 2.1 akan ditunjukan beberapa status dasar yang
dialami proses. Proses dapat berada di salah satu status yang ada dari
status dasar tersebut.
Tabel 2.1 Tabel Status Dasar Proses
Status Deskripsi
New Proses yang baru mulai dibangun
Ready Proses siap (ready) dieksekusi oleh CPU, tapi CPU tidak
bersedia mengeksekusi proses.
Running Status proses yang sedang dieksekusi oleh CPU.
Waiting Proses menunggu kejadian untuk melengkapi tugasnya.
Stopped Program yang sedang di-running dapat berhenti.
Terminated Proses selesai
17
Gambar 2.2 Diagram Status Dasar Proses
Gambar 2.2 menunjukkan hubungan atau transisi dari status-
status proses yang digambarkan dalam diagram status dasar proses.
Transisi pada status-status proses yang dilakukan dapat terjadi dalam
berbagai macam kondisi, sehingga transisi ditentukan dari gambar
2.2.
PCB dalam diagram status yang dihubungkan antara satu status
dengan status yang lainnya akan menghasilkan sebuah daftar yang
sering disebut ready list (daftar/antrian siap) yang merupakan
kumpulan proses-proses yang berada di awal antrian dan siap
mengakses CPU.
18
Dispatcher atau low level scheduler (penjadwal/scheduler
proses) adalah alokasi CPU ke proses dengan pengaturan terhadap
register hardware yang penting, dan mencari proses yang ready dan
siap untuk dijalankan (running). Jika tidak ada proses yang ready
untuk dijalankan, maka proses menunggu interrupt dan proses harus
menunggu. Dispatcher diperlukan dalam menjalankan sistem operasi
multiprogramming, dispatcher sering kali membutuhkan akses dari
CPU pada saat CPU tersebut sedang diakses oleh proses lain dalam
running proses. Untuk mendapatkan akses yang sedang dipakai oleh
proses lain tersebut, dibutuhkan adanya:
a. Interrupt
Merupakan sinyal dari luar ke CPU untuk memberitahu
bahwa ada sesuatu yang terjadi atau ada kejadian/event. Jika
terdapat interrupt, proses CPU dapat berhenti dan kemudian
interrupt memanggil interrupt service routine (dipakai untuk
melayani interrupt) untuk memanggil dispatcher, sehingga
dispatcher dapat mengakses CPU untuk melakukan context
switching (satu proses yang ada di CPU diganti dengan proses
yang lain atau memilih proses yang akan dijalankan berikutnya),
sehingga status proses dapat diubah menjadi ready.
19
b. Timer
Menunjukkan lama waktu yang telah digunakan proses dan
merupakan dukungan hardware yang dapat diatur (diatur seperti
jam).
2.6 Central Processing Unit (CPU)
CPU atau processor merupakan sumber dari sistem komputer yang
utama, dapat memanipulasi dan melakukan operasi aritmatika pada data dari
memori. CPU juga mengeksekusi instruksi yang dikontrol oleh processor
lain.
CPU dapat dieksekusi oleh banyak proses dan program. Dalam istilah
penjadwalan berarti terdapat lebih dari satu proses yang akan dijalankan,
maka dari itu peran CPU sangat berguna dalam memutuskan proses mana
yang dapat menggunakan CPU lebih dahulu, kapan CPU tersebut dapat
digunakan dan berapa lama CPU dijalankan. Penjadwalan CPU dapat
memutuskan bahwa sebuah proses dalam antrian yang siap (ready queue)
akan dialokasikan ke CPU.
2.7 Penjadwalan CPU
Penjadwalan adalah fungsi dasar dari suatu sistem opersai. Hampir
semua sumber komputer dijadwalkan sebelum digunakan. CPU salah satu
sumber dari komputer yang penting yang menjadi sentral dari sentral
penjadwalan di sistem operasi.
20
Penjadwalan CPU adalah basis dari multiprogramming sistem operasi.
Dengan men-switch CPU diantara proses. Akibatnya sistem operasi bisa
membuat komputer produktif.
2.7.1 Sasaran Utama Penjadwalan CPU
Sasaran utama penjadwalan CPU adalah optimalisasi kerja menurut
kriteria tertentu. Kriteria untuk mengukur serta optimasi kerja
penjadwalan yang juga merupakan sasaran utama penjadwalan adalah
(Iwan Binanto, 2005):
a. Pemanfaatan CPU (Efisiensi)
Menjaga agar CPU tetap dalam keadaan sibuk, artinya CPU
tidak pernah menganggur, termasuk waktu yang dihabiskan untuk
mengeksekusi program pemakai dan sistem operasi.
b. Adil (Fairness)
Menjaga dan menjamin tiap proses mendapat layanan dari CPU
secara adil (diperlakukan sama), yaitu mendapatkan jatah waktu
CPU yang sama dan tidak ada proses yang tidak mendapat layanan
dari CPU yang dapat mengakibatkan starvation.
c. Throughput
Merupakan jumlah proses yang dapat diselesaikan dalam satuan
unit waktu. Sasarannya adalah memaksimalkan jumlah proses per
satuan unit waktu. Semakin tinggi angka throughput, semakin
banyak kerja yang dilakukan oleh sistem.
21
d. Turn Around Time
Merupakan waktu yang dihabiskan dari saat proses masuk ke
sistem sampai proses diselesaikan oleh sistem. Turn Around Time
merupakan jumlahan dari waktu tunggu di memori, waktu tunggu di
antrian ready, waktu eksekusi di CPU, dan waktu mengerjakan I/O.
e. Response Time
Merupakan jumlah waktu dari proses untuk mulai merespons
atau waktu yang dibutuhkan dari masuk ke sistem sampai respons
pertama muncul.
Kriteria-kriteria tersebut saling bergantung dan dapat pula saling
bertentangan sehingga tidak dimungkinkan optimalisasi semua kriteria
secara simultan.
2.7.2 Tipe-tipe Penjadwalan CPU
Terdapat 3 tipe penjadwalan secara bersama-sama pada Sistem
Operasi yang kompleks (William Stallings, 2001), yaitu:
1. Penjadwalan jangka panjang (long-term scheduler)
2. Penjadwalan jangka menengah (medium-term scheduler)
3. Penjadwalan jangka pendek (short-term scheduler)
1. Penjadwalan jangka panjang (long-term scheduler)
Penjadwalan ini bekerja terhadap antrian batch dan memilih
batch berikutnya yang harus dieksekusi. Biasanya batch adalah
22
proses dengan penggunaan sumber daya yang intensif (seperti waktu
pemroses, memori, perangkat I/O).
2. Penjadwalan jangka menengah (medium-term scheduler)
Penjadwal ini bertugas menangani proses-proses swapping,
mengendalikan transisi dari suspended-to-ready. Swapping adalah
aktivitas pemindahan proses yang tertunda (suspended) dari memori
utama ke memori sekunder hingga proses tertunda selesai dan proses
siap (ready) untuk mengeksekusi CPU.
3. Penjadwalan jangka pendek (short-term scheduler)
Penjadwalan jangka pendek atau CPU Schedulling bertugas
memilih salah satu atau menjadwalkan proses dari ready list agar
memperoleh giliran untuk dieksekusi pada alokasi CPU di memori
utama menurut kebijakan tertentu. Sasaran utama penjadwalan ini
memaksimumkan kinerja untuk memenuhi sekumpulan criteria yang
diharapkan dalam penjadwalan CPU. Penjadwal ini dijalankan setiap
terjadi pengalihan proses untuk memilih proses berikutnya yang
harus dijalankan.
Penjadwalan jangka pendek diaktifkan bila muncul suatu I/O
atau kejadian yang memungkinkan proses yang sedang berjalan
untuk dihentikan oleh proses lain, karena dengan adanya suatu I/O
berarti terjadi interrupt. Penjadwalan jangka pendek memiliki
frekuensi pemakaian yang paling tinggi diantara semua jenis
penjadwal.
23
2.7.3 Strategi Penjadwalan CPU
Strategi penjadwalan mempunyai dua metode, yaitu:
1. Penjadwalan Preemtive
Proses yang sedang berjalan dapat diinterupsi dan dipindah ke
status ready oleh sistem operasi sehingga CPU dapat diambil alih
proses yang lain. Pada penjadwalan preemptive, penjadwal bukan
dihentikan oleh proses lain tapi terutama oleh lama waktu
berjalannya proses, disebut preempt by time (dihentikan oleh waktu).
Sebuah proses tidak dapat mengakses CPU sepanjang waktu yang
telah dijatah tertentu, tetapi sebelumnya semua proses diberi
sejumlah waktu oleh CPU yang disebut kwanta (quantum time) atau
time slice. Suatu proses tidak boleh menggunakan pengolah selama
lebih dari satu kwanta jika ada proses lain dalam daftar siap.
2. Penjadwalan Nonpreemtive
Merupakan proses yang dapat mengakses CPU sepanjang batas
waktu yang diberikan CPU tanpa diganggu oleh proses lain atau
CPU tidak dapat diambil alih oleh proses lain sampai proses itu
selesai mengakses CPU, tanpa dihentikan oleh timer atau sampai ada
I/O. pada penjadwalan nonpreemtive member keuntungan pada
proses yang memiliki waktu eksekusi yang panjang, karena tidak
memiliki context switch.
24
2.7.4 Penjadwalan CPU
Secara umum, teknik penjadwalan CPU dibagi menjadi
penjadwalan CPU satu tingkat dan penjadwalan CPU multitingkat
(multilevel), penggolongan ini selain berdasarkan pada teknik
penjadwalan prosesor adalah penggolongan berdasarkan adanya
prioritas di masing-masing proses, yaitu:
1. Metode penjadwalan tanpa prioritas
2. Metode penjadwalan berprioritas, terdiri dari:
1) Prioritas statis (static priorities), yaitu prioritas tidak berubah.
2) Prioritas dinamis (dynamic priorities), merupakan mekanisme
menanggapi perubahan lingkungan secar beroperasi.
Metode yang menerapkan penjadwalan CPU satu tingkat adalah:
1. First Come First Serve (FCFS)
2. Shortest Job First (SJF)
3. Round Robin (RR)
4. Priority
Metode yang menerapkan penjadwalan CPU multitingkat adalah:
1. Multilevel Queue
2. Feedback Multilevel Queue
2.7.4.1 First Come First Serve (FCFS)
Proses yang pertama kali meminta jatah waktu untuk
menggunakan CPU akan dilayani terlebih dahulu. Pada skema
25
ini, proses yang meminta CPU pertama kali akan dialokasikan
ke CPU pertama kali (Iwan Binanto, 2005).
Misalnya terdapat tiga proses yang dapat dengan urutan
P1, P2, dan P3 dengan waktu CPU-burst dalam milidetik yang
diberikan sebagai berikut :
Process Burst Time
P1 24
P2 3
P3 3
Gant Chart dengan penjadwalan FCFS adalah sebagai berikut
(Iwan Binanto, 2005) :
Waktu tunggu untuk P1 adalah 0, P2 adalah 24 dan P3
adalah 27 sehingga rata-rata waktu tunggu adalah (0 + 24 +
27)/3 = 17 milidetik. Sedangkan apabila proses dating dengan
urutan P2, P3, dan P1, hasil penjadwalan CPU dapat dilihat
pada gant chart berikut (Iwan Binanto, 2005) :
Waktu tunggu sekarang untuk P1 adalah 6, P2 adalah 0
dan P3 adalah 3 sehingga rata-rata waktu tunggu adalah (6 + 0
+ 3)/3 = 3 milidetik. Rata-rata waktu tunggu kasus ini jauh
26
lebih baik dibandingkan dengan kasus sebelumnya. Pada
penjadwalan CPU dimungkinkan terjadi Convoy effect apabila
proses yang pendek berada pada proses yang panjang.
Algoritma FCFS termasuk non-preemptive. karena,
sekali CPU dialokasikan pada suatu proses, maka proses
tersebut tetap akan memakai CPU sampai proses tersebut
melepaskannya, yaitu jika proses tersebut berhenti atau
meminta I/O.
2.7.4.2 Shortest Job First (SJF)
Pada penjadwalan SJF, proses yang memiliki CPU
burst paling kecil dilayani terlebih dahulu (Iwan Binanto,
2005). Terdapat dua skema :
1. Nonpreemptive, bila CPU diberikan pada proses, maka tidak
bisa ditunda sampai CPU burst selesai.
2. Preemptive, jika proses baru datang dengan panjang CPU
burst lebih pendek dari sisa waktu proses yang saat itu
sedang dieksekusi, proses ini ditunda dan diganti dengan
proses baru. Skema ini disebut dengan Shortest Remaining
Time First (SRTF).
SJF adalah algoritma penjadwalan yang optimal dengan
rata-rata waktu tunggu yang minimal. Misalnya terdapat empat
proses dengan panjang CPU burst dalam milidetik.
27
Process Arrival Time Burst Time
P1 0.0 7
P2 2.0 4
P3 4.0 1
P4 5.0 4
Penjadwalan proses dengan algoritma SJF
(nonpreemptive) dapat dilihat pada gant chart berikut (Iwan
Binanto, 2005) :
Waktu tunggu untuk P1 adalah 0, P2 adalah 26, P3
adalah 3 dan P4 adalah 7 sehingga rata-rata waktu tunggu
adalah (0 + 6 + 3 + 7)/4 = 4 milidetik. Sedangkan Penjadwalan
proses dengan algoritma SRTF (preemptive) dapat dilihat pada
gant chart berikut (Iwan Binanto, 2005) :
Waktu tunggu untuk P1 adalah 9, P2 adalah 1, P3
adalah 0 dan P4 adalah 4 sehingga rata-rata waktu tunggu
adalah (9 + 1 + 0 + 4)/4 = 3 milidetik.
2.7.4.3 Round Robin (RR)
Konsep dasar dari algoritma ini adalah dengan
menggunakan time-sharing. Pada dasarnya algoritma ini sama
28
dengan FCFS, hanya saja bersifat preemptive. Setiap proses
mendapatkan waktu CPU yang disebut dengan waktu kuantum
(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 kuantum, 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 kuantum, maka proses tersebut
akan dihentikan sementara jika sudah mencapai waktu
kuantum, dan selanjutnya mengantri kembali pada posisi ekor
dari ready queue, CPU kemudian menjalankan proses
berikutnya.
Jika terdapat n proses pada ready queue dan waktu
kuantum q, maka setiap proses mendapatkan 1/n dari waktu
CPU paling banyak q unit waktu pada sekali penjadwalan
CPU. Tidak ada proses yang menunggu lebih dari (n-1)q unit
waktu. Performansi algoritma round robin dapat dijelaskan
sebagai berikut, jika q besar, maka yang digunakan adalah
algoritma FIFO, tetapi jika q kecil maka sering terjadi context
switch.
29
Misalkan ada 3 proses: P1, P2, dan P3 yang meminta
pelayanan CPU dengan quantum-time sebesar 4 milidetik.
Process Burst Time
P1 24
P2 3
P3 3
Penjadwalan proses dengan algoritma round robin
dapat dilihat pada gant chart berikut (Iwan Binanto, 2005) :
Waktu tunggu untuk P1 adalah 6, P2 adalah 4, dan P3
adalah 7 sehingga rata-rata waktu tunggu adalah (6 + 4 + 7)/3
= 5.66 milidetik.
2.7.4.4 Priority
Algoritma SJF adalah suatu kasus khusus dari
penjadwalan berprioritas. Tiap-tiap proses dilengkapi dengan
nomor prioritas (integer). CPU dialokasikan untuk proses yang
memiliki prioritas paling tinggi (nilai integer terkecil biasanya
merupakan prioritas terbesar). Jika beberapa proses memiliki
prioritas yang sama, maka akan digunakan algoritma FCFS.
Penjadwalan berprioritas terdiri dari dua skema yaitu non
preemptive dan preemptive. Jika ada proses P1 yang datang
pada saat P0 sedang berjalan, maka akan dilihat prioritas P1.
Seandainya prioritas P1 lebih besar dibanding dengan prioritas
30
P0, maka pada non-preemptive, algoritma tetap akan
menyelesaikan P0 sampai habis CPU burst-nya, dan
meletakkan P1 pada posisi head queue. Sedangkan pada
preemptive, P0 akan dihentikan dulu, dan CPU ganti
dialokasikan untuk P1.
Misalnya terdapat lima proses P1, P2, P3, P4 dan P5
yang datang secara berurutan dengan CPU burst dalam
milidetik.
Process Burst Time Priority
P1 10 3
P2 1 1
P3 2 3
P4 1 4
P5 5 2
Penjadwalan proses dengan algoritma priority dapat
dilihat pada gant chart berikut (Iwan Binanto, 2005) :
Waktu tunggu untuk P1 adalah 6, P2 adalah 0, P3
adalah 16, P4 adalah 18 dan P5 adalah 1, sehingga rata-rata
waktu tunggu adalah (6 + 0 +16 + 18 + 1)/5 = 8.2 ms.
31
BAB III
ANALISIS DAN PERANCANGAN SISTEM
3.1 Analisis Sistem
Seperti yang telah disampaikan di awal, tugas akhir ini akan membahas
mengenai simulasi algoritma penjadwalan pada sistem operasi yang memiliki
fasilitas berupa materi yang disertai animasi untuk memperkenalkan tentang
cara kerja dari algoritma penjadwalan. Analisis sistem sendiri meliputi
beberapa langkah, yaitu:
3.1.1 Analisis Masalah
Algoritma penjadwalan adalah salah satu materi yang dibahas dalam
perkuliahan sistem operasi di Universitas Sanata Dharma (USD). Algoritma
penjadwalan sendiri terdiri dari 5 macam algoritma yang berbeda, First Come
First Serve (FCFS), Shortest Job First (SJF) Preemtive, Shortest Job First
(SJF) Nonpreemtive, Round Robin, Priority Preemtive dan Priority
Nonpreemtive.
First Come First Serve (FCFS) merupakan algoritma dengan
penjadwalan yang paling sederhana, dimana proses yang waktu tibanya lebih
dulu akan dieksekusi pertama kali. Shortest Job First (SJF) Preemtive
merupakan algoritma dengan penjadwalan dimana proses yang terpendek
yang akan dieksekusi pertama kali, tetapi jika proses baru datang dengan
panjang proses lebih pendek dari sisa waktu proses yang saat itu sedang
dieksekusi, proses ini ditunda dan diganti dengan proses baru. Shortest Job
32
First (SJF) Nonpreemtive merupakan algoritma dengan penjadwalan dimana
proses yang terpendek yang akan dieksekusi pertama kali, tidak bisa ditunda
sampai proses tersebut selesai. 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 kuantum (quantum time) untuk
membatasi waktu proses. Priority Preemtive merupakan algoritma yang
penjadwalannya menggunakan nomor prioritas (integer), prioritas dengan
nomor terkecil akan dieksekusi terlebih dahulu, tetapi jika ada proses baru
yang memiliki prioritas lebih kecil dari proses yang sedang berjalan, maka
proses tersebut akan ditunda dan kemudian digantikan dengan proses yang
baru. Priority Nonpreemtive merupakan algoritma yang penjadwalannya
menggunakan nomor prioritas (integer), prioritas dengan nomor terkecil akan
dieksekusi terlebih dahulu tanpa bisa ditunda dan akan dieksekusi sampai
selesai.
Setelah melakukan penelitian, dalam prakteknya, pembelajaran tentang
algoritma banyak mengalami masalah. Yaitu bagaimana alur berjalannya
suatu algoritma. Maka ditemukan secara umum adalah bagaimana cara
memperkenalkan cara kerja dari setiap algoritma penjadwalan tersebut secara
lebih menarik dan interaktif, diantaranya dengan memberikan menu simulasi
pada setiap algoritma penjadwalan.
33
3.2 Perancangan Sistem
Tahap-tahap yang terdapat dalam perancangan sistem ini adalah sebagai
berikut:
3.2.1 Desain Model Secara Umum
3.2.1.1 Diagram Use Case
USER
<< include >>
<< include >>
<< include >>
<< include >>
<< include >>
<< include >>
<< include >>
<< include >>
<< include >>
<< include >>
<< include >>
<< include >>
Pilih Menu Bantuan
Pilih Menu Simulasi
Pilih Menu Materi
Lihat Cara Penggunaan Simulasi
Lihat Simulasi Priority Preemtive
Lihat Simulasi Priority Nonpreemtive
Lihat Simulasi Round Robin
Lihat Simulasi SJF Preemtive
Lihat Simulasi SJF Nonpreemtive
Lihat Simulasi FCFS
Lihat Materi Algoritma Penjadwalan
Lihat Materi FCFS
Lihat Materi SJF
Lihat Materi Round Robin
Lihat Materi Priority
Gambar 3.1 Diagram Use Case
34
3.2.1.2 Tabel Penjelasan Use Case
Tabel 3.1 Tabel Penjelasan Use Case
USE CASE KETERANGAN
Pilih Menu Bantuan Di dalam fasilitas ini terdapat satu halaman berupa
satu jendela baru yang berfungsi untuk menjelaskan
cara penggunaan sistem ini.
Pilih Menu Simulasi Di dalam fasilitas ini akan terdapat beberapa jendela
yang akan digunakan pengguna untuk memasukkan
data kemudian menampilkan simulasi dari setiap
algoritma yang dipilh oleh pengguna.
Lihat Simulasi FCFS Pengguna dapat melihat cara kerja dari algoritma
FCFS dari menu simulasi ini.
Lihat Simulasi SJF
Nonpreemtive
Pengguna dapat melihat cara kerja dari algoritma
Simulasi SJF Nonpreemtive dari menu simulasi ini.
Lihat Simulasi SJF
Preemtive
Pengguna dapat melihat cara kerja dari algoritma
Simulasi SJF Preemtive dari menu simulasi ini.
Lihat Simulasi RR Pengguna dapat melihat cara kerja dari algoritma
Simulasi RR dari menu simulasi ini.
Lihat Simulasi Priority
Nonpreemtive
Pengguna dapat melihat cara kerja dari algoritma
Simulasi Priority Nonpreemtive dari menu simulasi
ini.
Lihat Simulasi Priority
Preemtive
Pengguna dapat melihat cara kerja dari algoritma
Simulasi Priority Preemtive dari menu simulasi ini.
35
Pilih Menu Materi Di dalam fasilitas akan berisi materi dari setiap
algoritma berupa penjelasan singkat serta contoh
kasus, yang berfungsi untuk membantu pengguna
secara teori sebelum menggunakan simulasi.
Lihat Materi Algoritma
Penjadwalan
Pengguna dapat melihat dan mempelajari apa itu
algoritma penjadwalan secara teori.
Lihat Materi FCFS Pengguna dapat melihat dan mempelajari algoritma
FCFS secara teori beserta contoh soalnya secara
singkat.
Lihat Materi SJF Pengguna dapat melihat dan mempelajari algoritma
SJF secara teori beserta contoh soalnya secara singkat.
Lihat Materi RR Pengguna dapat melihat dan mempelajari algoritma
RR secara teori beserta contoh soalnya secara singkat.
Lihat Materi Priority Pengguna dapat melihat dan mempelajari algoritma
Priority secara teori beserta contoh soalnya secara
singkat.
36
3.2.1.3 Struktur Menu
Menu Utama
Program
Menu Bantuan
Algoritma Penjadwalan
Menu Materi Menu Simulasi
First Come First Serve
Shortest job First Round Robin Priority
Simulasi FCFS
Simulasi SJF Preemtive
Simulasi Round Robin
Simulasi Priority
Preemtive
Simulasi SJF Nonpreemtive
Simulasi Priority
Nonpreemtive
Cara Penggunaan
Simulasi
Gambar 3.2 Struktur Menu
3.2.1.4 Desain Modul (Flowchart)
Flowchart program merupakan bagan yang
menjelaskan secara rinci langkah-langkah dari proses program
secara logika. Berikut ini flowchart dari program aplikasi yang
dikembangkan adalah sebagai berikut:
Start
Halaman Utama
Pilih Menu Materi
TIDAK
Tampilkan Materi-materi dari Algoritma Penjadwalan
YA
Keluar
A
YA
TIDAK
Halaman Utama
Pilih Menu Simulasi
TIDAK
Tampilkan Simulasi dari beberapa Algoritma
Penjadwalan
YA
Keluar
A
YA
TIDAK
A
Halaman Utama
Pilih Menu Bantuan
TIDAK
Tampilkan Penjelasan penggunaan dari program simulasi
Algoritma Penjadwalan
YA
Keluar
YA
TIDAK
A
Halaman Utama
Finish
Gambar 3.3 Diagram Flowchart
37
3.3 Perangkat Keras dan Perangkat Lunak
Perangkat Keras dan Perangkat Lunak yang digunakan agar sistem ini
dapat berjalan adalah :
1. Perangkat Keras (spesifikasi minimum)
1) Processor : Pentium III, 800 Mhz
2) Memori : 128 Mb
3) Hard Disk
2. Perangkat Lunak
Perangkat lunak yang harus tersedia dalam sebuah komputer untuk
mendukung kerja sistem ini adalah Macromedia Flash 8 atau diatasnya.
Atau minimal sebuah komputer dapat menjalankan sistem ini bila
didalamnya memiliki aplikasi flash player minimal versi 8 atau diatasnya.
3.4 Perancangan Menu Antar Muka
Program Bantu Untuk PembelajaranAlgoritma PenjadwalanDi Bidang Studi Sistem Operasi
MASUK
MASUK
Gambar 3.4 Tampilan Halaman Utama
38
Ini adalah halaman utama dari program, terdiri dari 2 tombol utama.
Jika pengguna menekan tombol masuk, maka pengguna akan menuju ke
menu seperti gambar 3.5. Bila pengguna menekan tombol keluar, maka
program akan tertutup dan pengguna keluar dari sistem.
MENU UTAMA
MATERI SIMULASI BANTUAN
Program Bantu Untuk PembelajaranAlgoritma PenjadwalanDi Bidang Studi Sistem Operasi
Gambar 3.5 Tampilan Antar Muka bila pengguna menekan tombol
masuk
Ini adalah tampilan antar muka bila pengguna menekan tombol masuk
pada gambar 3.4. Menu utama ini terdiri dari 3 tombol utama, yaitu Materi,
Simulasi dan Bantuan. Menu Materi masih terdiri dari 5 sub-menu, yaitu
Algoritma Penjadwalan, First Come First Serve, Shortest Job First, Round
Robin dan Priority, seperti gambar 3.6.
39
MENU UTAMA
MATERI SIMULASI BANTUAN
Program Bantu Untuk PembelajaranAlgoritma PenjadwalanDi Bidang Studi Sistem Operasi
Algoritma Penjadwalan
FCFS
SJF
RR
Priority
Gambar 3.6 Tampilan dari sub-menu Materi bila ditekan
Ini adalah tampilan dari sub-menu Materi bila pengguna menekan
tombol Materi, sub-menu tersebut berisi materi-materi dari sub-menu diatas.
Bila pengguna menekan salah satu dari sub-menu tersebut, maka pengguna
dapat melihat dan membaca materi atau teori dari algoritma penjadwalan
(gambar 3.7). Bila pengguna menekan tombol kembali, maka pengguna akan
kembali menuju menu utama atau seperti gambar 3.5.
BERISI MATERI-MATERIDARI ALGORITMA PENJADWALAN
MATERI
SelanjutnyaSebelumnya
Kembali
Gambar 3.7 Tampilan materi dari salah satu sub-materi bila ditekan
40
SIMULASI ALGORITMA PENJADWALAN
Algoritma Penjadwalan
First Come First Serve
SJF Premtive
SJF Nonpremtive
Round RobinKuantum Waktu = ms
Priority Preemtive
Priority Nonpreemtive
Jumlah Proses = Proses
Data Awal
Nama Proses Saat Tiba Lama Proses Prioritas
P1
P2
P3
P4
P5
Random
Simulasi
Hapus
Pause
New
Ready
Waiting
Running
Terminated
Gant Chart
P1
P2
P3
P4
P5
Jalannya Proses
Nama Proses Mulai tunggu Selesai Tunggu Mulai Proses
P1
P2
P3
P4
P5
AWT atau Average Waiting Time = ms
Selesai Proses
Gambar 3.8 Tampilan simulasi bila pengguna menekan tombol menu
Simulasi
Ini adalah tampilan antar muka untuk menu Simulasi, terdiri dari
beberapa kolom proses untuk memudahkan pengguna dalam memahami
sistem. Pertama pengguna akan memilih algoritma yang akan disimulasikan
yang terdiri dari 6 macam algortima penjadwalan yang tersedia, kemudian
pengguna dapat menentukan jumlah proses yang ingin disimulasikan, dengan
jumlah proses maksimal adalah 5 proses.
Pada kolom Data Awal, pengguna akan memasukkan data-data yang
telah disediakan tempatnya, serta terdapat tombol Random yang berguna
41
untuk memasukkan data secara acak, juga terdapat beberapa tombol
operasional yang berguna untuk menjalankan simulasi.
Untuk melihat jalannya simulasi, setelah pengguna selesai memasukkan
data-data yang dibutuhkan, maka pengguna dapat menekan tombol Simulasi,
tombol ini berfungsi untuk mensimulasikan dari data awal berdasarkan jenis
algoritma penjadwalan yang dipilih. Terdapat beberapa kolom simulasi, yaitu
Diagram Status Proses, Diagram Waktu Kedatangan dan Gant Chart yang
berfungsi untuk membantu pengguna dalam pemahaman simulasi.
BANTUAN
CARA PENGGUNAAN SISTEM
X
Gambar 3.9 Tampilan dari menu Bantuan
Ini adalah tampilan dari menu Bantuan bila pengguna menekan menu
Bantuan, menu ini berfungsi untuk membantu pengguna dalam penjelesan
cara penggunaan dari sistem, terdapat 3 tombol utama, yaitu next, back dan
close.
42
BAB IV
IMPLEMENTASI DAN PEMBAHASAN
Implementasi merupakan tahap pengkodean dari hasil perancangan. Pada
bab sebelumnya telah dijelaskan mengenai perancangan sistem. Pada bab ini akan
dijelaskan hasil implementasi dan pembahasan serta hasil dari kuisioner yang
disebarkan kepada pengguna secara acak.
4.1 Implementasi Program
Program simulasi algoritma ini dapat digunakan oleh siapapun yang
ingin mempelajari proses berjalannya sebuah algoritma dan juga dasar-dasar
teori dari algoritma tersebut, dalam hal ini algoritma penjadwalan.
Susunan dari program simulasi algoritma ini terdiri dari sekumpulan
modul-modul flash movie yang terintegrasi antara satu dengan yang lainnya,
sehingga membentuk sebuah aplikasi pembelajaran yang utuh.
4.1.1 Halaman Utama
Pada tahap implementasi ini, penulis terlebih dahulu akan
menjelaskan apa saja komponen dalam sistem baik. Setelah itu akan
dijelaskan cara kerja fasilitas yang ada pada sistem. Berikut ini adalah
tampilan antarmuka halaman utama dari sistem.
43
Gambar 4.1 Tampilan Halaman Utama
Ditampilan halaman utama terdiri dari dua tombol, yaitu tombol
MENU UTAMA dan tombol KELUAR. Tombol MENU UTAMA
digunakan pengguna untuk menggunakan aplikasi ini lebih lanjut,
berikut action script yang digunakan:
on (press) { gotoAndStop(2); }
Perintah tersebut digunakan untuk menuju jendela frame lain,
dalam hal ini tombol tersebut menginstruksikan sistem agar menuju
frame ‘2’.
Gambar 4.2 Tombol MENU UTAMA yang diberi action script
Sedangkan, tombol KELUAR digunakan pengguna untuk keluar
dari aplikasi ini, berikut action script yang digunakan:
44
on (press) { fscommand('quit', ""); }
Gambar 4.3 Tombol KELUAR yang diberi action script
4.1.2 Halaman Menu Utama
Bila pengguna menekan tombol MENU UTAMA, maka aplikasi
ini akan menuju halaman berikut:
Gambar 4.4 Tampilan halaman MENU UTAMA
Dihalaman ini pengguna akan menemukan tiga tombol utama
yang digunakan untuk membantu pengguna, yaitu tombol Materi,
tombol Simulasi dan tombol Bantuan. Setiap tombol diberi action script
yang berfungsi untuk pindah menuju jendela baru kemudian melihat
isinya, juga terdapat tombol back yang berfungsi untuk kembali menuju
45
halaman utama seperti gambar 4.1. Berikut action script yang
digunakan:
on (press) { gotoAndStop(1); //kembali ke frame 1 }
Gambar 4.5 Tombol back yang diberi action script
4.1.2.1 Menu Materi
Menu Materi adalah menu yang digunakan pengguna
untuk mempelajari materi-materi dari algoritma penjadwalan
ini sebelum pengguna menggunakan simulasi dari
algoritmanya. Menu Materi ini berupa tombol yang terdiri dari
beberapa sub-menu, sub-menu tersebut berupa kumpulan
tombol yang disatukan (Group) untuk kemudian diubah
menjadi movie clip yang diberi nama menu_bar_materi, jika
tombol menu Materi ditekan maka akan muncul sub-menu
seperti yang terlihat pada gambar 4.6 berikut:
Gambar 4.6 Tampilan tombol Materi
Sub-menu tersebut terdapat pada frame 1, awalnya
dalam keadaan menu_bar_materi._visible=false; jadi
46
pengguna tidak dapat melihat sub-menu yang sebenarnya
disembunyikan, kemudian jika tombol Materi ditekan oleh
pengguna maka menu_bar_materi._visible=true; yang
akan dijalankan, berikut action script yang digunakan dalam
tombol Materi:
on (release) { menu_bar_materi._visible=true; }
Berikut action script yang digunakan untuk membuat
sub-menu tersebut, action script tersebut terdapat pada frame
1:
menu_bar_materi._visible = false; menu_bar_materi.algo_btn.onRollOver = function() { menu_bar_materi._visible = true; }; menu_bar_materi.algo_btn.onRollOut = function() { menu_bar_materi._visible = false; }; menu_bar_materi.fcfs_btn.onRollOver = function() { menu_bar_materi._visible = true; }; menu_bar_materi.fcfs_btn.onRollOut = function() { menu_bar_materi._visible = false; }; menu_bar_materi.sjf_btn.onRollOver = function() { menu_bar_materi._visible = true; }; menu_bar_materi.sjf_btn.onRollOut = function() { menu_bar_materi._visible = false; }; menu_bar_materi.rr_btn.onRollOver = function() { menu_bar_materi._visible = true; }; menu_bar_materi.rr_btn.onRollOut = function() { menu_bar_materi._visible = false; }; menu_bar_materi.prio_btn.onRollOver = function() { menu_bar_materi._visible = true; }; menu_bar_materi.prio_btn.onRollOut = function() { menu_bar_materi._visible = false; };
47
Dalam menu Materi tersebut terdapat lima sub-menu
yang berfungsi untuk membantu pengguna dalam pemahaman
materi dari algoritma penjadwalan, yaitu Algoritma
Penjadwalan, First Come First Serve, Shortest Job First,
Round Robin dan Priority.
Gambar 4.7 Salah satu tampilan Materi Algoritma
Penjadwalan
Dalam materi Algoritma Penjadwalan, disini pengguna
akan mempelajari arti dari algoritma penjadwalan dari konsep
dasar sampai kriteria penjadwalannya, terdapat beberapa
tombol yang berfungsi untuk membantu pengguna, yaitu
tombol Selanjutnya yang digunakan untuk melihat dan
membaca materi selanjutnya, tombol Sebelumnya yang
digunakan untuk melihat dan membaca materi sebelumnya,
dan tombol berupa gambar rumah yang digunakan pengguna
untuk kembali menuju halaman Menu Utama.
48
Gambar 4.8 Salah satu tampilan dari Materi First Come
First Serve
Didalam materi ini pengguna akan menemukan materi
tentang algoritma FCFS, algoritma FCFS merupakan algoritma
yang paling sederhana, dimana antrian yang lebih dahulu
datang akan dilayani terlebih dahulu, serta terdapat sedikit
contoh masalah yang diharapkan dapat membantu pengguna
dalam pemahaman.
Gambar 4.9 Salah satu tampilan dari Materi Shortest Job First
49
Didalam materi ini pengguna akan menemukan materi
tentang algoritma SJF, algoritma SJF merupakan algoritma
yang pelayanannya didasarkan pada lama proses yang terkecil
dari setiap proses yang ada, dimana antrian yang memiliki
lama proses terkecil maka akan lebih dahulu akan dilayani,
serta terdapat sedikit contoh masalah yang diharapkan dapat
membantu pengguna dalam pemahaman.
Gambar 4.10 Salah satu tampilan dari Materi Round Robin
Didalam materi ini pengguna akan menemukan materi
tentang algoritma RR, algoritma RR merupakan algoritma
yang cukup adil karena algoritma ini akan menggilir setiap
prosesnya berdasarkan kuantum waktu, dimana setiap proses
akan dijatah sebesar kuantum waktu, serta terdapat sedikit
contoh masalah yang diharapkan dapat membantu pengguna
dalam pemahaman.
50
Gambar 4.11 Salah satu tampilan dari Materi Priority
Didalam materi ini pengguna akan menemukan materi
tentang algoritma Priority, algoritma Priority merupakan
algoritma yang setiap prosesnya diberi status prioritas dan
proses yang memiliki prioritas tertinggi (dalam kasus ini
berupa nilai integer terkecil) akan dilayani terlebih dahulu,
serta terdapat sedikit contoh masalah yang diharapkan dapat
membantu pengguna dalam pemahaman.
Dalam setiap halaman materi, terdapat tombol yang
berfungsi untuk membantu pengguna, terdapat tiga tombol,
yaitu next (selanjutnya), back (sebelumnya) dan home (gambar
rumah). Tombol selanjutnya digunakan pengguna untuk
pindah menuju halaman berikutnya, sedangkan tombol
sebelumnya digunakan untuk menuju halaman sebelumnya.
Berikut salah satu contoh action script yang digunakan:
on (release) { gotoAndStop(3); }
51
Script ini diletakkan pada tombol selanjutnya yang
akan berfungsi untuk pindah frame selanjutnya, dalam kasus
ini adalah akan berpindah menuju frame ‘3’.
on (release) { gotoAndStop(1); }
Script ini diletakkan pada tombol sebelumnya yang
akan berfungsi untuk pindah frame sebelumnya, dalam kasus
ini adalah akan berpindah menuju frame ‘1’.
Gambar 4.12 Tombol next back dalam setiap menu materi
Juga terdapat tombol home (gambar rumah) yang
berfungsi untuk pindah halaman menuju halaman menu utama
(gambar 4.4). Berikut contoh action script yang digunakan:
on (release) { _root.gotoAndStop(2);
removeMovieClip(this); }
Script ini diletakkan pada tombol home, perintah ini
akan memindahkan pengguna menuju halaman depan, yaitu
halaman menu utama (gambar 4.4), dalam scene halaman
utama terletak pada root frame ‘2’, removeMovieClip(this);
berfungsi saat pengguna kembali menuju halaman menu
utama, materi yang movie clip tidak terlihat oleh pengguna.
Gambar 4.13 Tombol Home
52
4.1.2.2 Menu Simulasi
Bagian utama dari program ini adalah simulasi
algoritma penjadwalan disamping materi-materi yang berisi
teori singkat tentang algoritma yang akan disimulasikan
sebagai penunjang. Tampilan awal dari menu simulasi ini
adalah sebagai berikut terlihat pada gambar 4.14.
Gambar 4.14 Halaman Simulasi
Program ini dirancang untuk dinamis, sehingga
memungkinkan pengguna untuk berinteraksi langsung dengan
program ini. Pengguna dapat memasukkan data-data yang akan
disimulasikan. Pertama pengguna diminta untuk memilih jenis
algoritma yang ingin disimulasikan, yang berupa Radio Button.
Jika pengguna memilih algoritma Round Robin maka
pengguna juga diminta untuk menentukan nilai dari kuantum
waktunya. Kemudian pengguna akan menentukan jumlah
proses yang akan disimulasikan, berupa Drop Down Menu,
53
dengan jumlah proses maksimal adalah 5 proses seperti yang
telah ditentukan. Dan untuk nilai-nilai dari setiap proses
sendiri terdapat waktu saat tiba dan waktu lama proses serta
nilai prioritas untuk algoritma Priority (Nonpreemtive maupun
Preemtive). Jika tidak sesuai dengan batasan aplikasi ini, maka
akan muncul pesan error. Seperti yang terlihat pada gambar
4.15.
Gambar 4.15 Pesan Error
Pesam error tersebut berupa movie clip yang
didalamnya terdapat sebuah dynamic text yang berfungsi untuk
menampilkan pesan error. Terdapat juga tombol X (silang)
yang berfungsi untuk menutup pesan error tersebut.
Pengecekan data masukkan oleh pengguna dilakukan didalam
tombol Simulasi. Berikut potongan action script untuk
keadaan error:
else { _root.error._x = 0; _root.error._y = 0; this.error.error_msg.text="DATA BELUM LENGKAP!!!!!";
54
} ///* if(cek_data()=='lebih tiba'){ _root.error._x = 0; _root.error._y = 0; this.error.error_msg.text="SAAT TIBA MAKS=10!!!!!"; } //*/ if(cek_data()=='lebih proses'){ _root.error._x = 0; _root.error._y = 0; this.error.error_msg.text="LAMA PROSES MAKS=15!!!!!"; } /// if(cek_data()=='lebih prio'){ _root.error._x = 0; _root.error._y = 0; this.error.error_msg.text="PRIORITAS MAKS=5!!!!!"; } }
Pada saat program dijalankan posisi awal dari movie
clip error berada jauh diluar layar program, tepatnya
dikoordinat (-950, 0). Sehingga pengguna tidak dapat melihat.
Setelah dilakukan pengecekan dan memenuhi untuk terjadinya
kondisi error, maka movie clip pesan error akan diubah
koordinatnya ke posisi tengah, yaitu pada koordinat (0, 0).
Sedangkan action script untuk tombol X (silang) pada pesan
error adalah untuk mengeset kembali koordinat pada posisi
awal, sehingga pesan tersebut tidak terlihat lagi oleh pengguna.
Data-data yang dimasukkan oleh pengguna dapat
dilakukan dengan dua cara. Dengan cara random atau dengan
cara manual. Pada kondisi default maka data yang ditampilkan
adalah sebanyak lima proses. Setiap proses memiliki data-data
berupa waktu saat tiba, lama proses dan prioritas, yang
55
masing-masing data tersebut merupakan textfield. saattiba_p1
untuk textfield waktu saat tiba proses 1, lamaproses_p1 untuk
textfield waktu lama proses proses 1, prioritas_p1 untuk
textfield prioritas proses 1, saattiba_p2 untuk textfield waktu
saat tiba proses 2, lamaproses_p2 untuk textfield waktu lama
proses proses 2, prioritas_p2 untuk textfield prioritas proses 2
dan seterusnya hingga proses lima. Sehingga memudahkan
untuk menampilkan textfield sebanyak data yang dimasukkan
oleh pengguna.
Untuk masukan data secara manual, pengguna dapat
memasukkan data dengan menggunakan keyboard pada
komputer pengguna untuk menentukan nilainya, untuk
masukan data secara random, data secara otomatis akan
tertampil. Untuk membangkitkan bilangan random digunakan
action script yang berada dibawah ini. Data manual ataupun
random tersebut adalah data numeric yang tentunya nilai ini
dibatasi, untuk waktu saat tiba dengan range antara 0-10,
untuk waktu lama proses dengan range antara 1-15 dan untuk
prioritas dengan range antara 1-5.
on (release) { function randRange(min:Number, max:Number):Number { var randomNum:Number = Math.floor(Math.random() * (max - min + 1)) + min; return randomNum; } ///random p1 var n1:Number = randRange(1, 10) var n2:Number = randRange(1, 15)
56
var n3:Number = randRange(1, 5) p1_mc.saattiba_p1.text=n1; p1_mc.lamaproses_p1.text=n2; p1_mc.prioritas_p1.text=n3; ///random p2 var m1:Number = randRange(1, 10) var m2:Number = randRange(1, 15) var m3:Number = randRange(1, 5) p2_mc.saattiba_p2.text=m1; p2_mc.lamaproses_p2.text=m2; p2_mc.prioritas_p2.text=m3; ///random p3 var o1:Number = randRange(1, 10) var o2:Number = randRange(1, 15) var o3:Number = randRange(1, 5) p3_mc.saattiba_p3.text=o1; p3_mc.lamaproses_p3.text=o2; p3_mc.prioritas_p3.text=o3; ///random p4 var y1:Number = randRange(1, 10) var y2:Number = randRange(1, 15) var y3:Number = randRange(1, 5) p4_mc.saattiba_p4.text=y1; p4_mc.lamaproses_p4.text=y2; p4_mc.prioritas_p4.text=y3; ///random p5 var z1:Number = randRange(1, 10) var z2:Number = randRange(1, 15) var z3:Number = randRange(1, 5) p5_mc.saattiba_p5.text=z1; p5_mc.lamaproses_p5.text=z2; p5_mc.prioritas_p5.text=z3; }
Setelah data selesai dimasukkan, simulasi sudah dapat
dilakukan. Data yang telah dimasukkan oleh pengguna bisa
digunakan untuk simulasi dengan semua algoritma yang ada.
Untuk memulai simulasi tekan tombol Simulasi. Saat
pengguna menekan tombol Simulasi, maka pengguna akan
melihat proses berjalannya suatu algoritma penjadwalan yang
dipilih oleh pengguna, disini penulis menampilkan beberapa
proses animasi yang diharapkan dapat membantu pengguna
57
untuk mempelajari proses algoritma, diantaranya terdapat
Diagram Status Proses (gambar 4.16), Diagram Waktu
Kedatangan (gambar 4.17) dan Gant Chart (gambar 4.18).
Diagram Status Proses merupakan serangkaian status
yang harus dilewati oleh proses, seperti yang telah dijelaskan
pada BAB II. Dalam scene, animasi untuk diagram status
proses ini terletak pada bagian Library dengan nama ball_ani,
ball_ani berupa kumpulan dari movie clip masing-masing
proses yang diwakili dengan warna untuk membedakannya,
p1_ball berupa movie clip untuk proses ke-1, p2_ball berupa
movie clip untuk proses ke-2, seterusnya sampai p5_ball
berupa movie clip untuk proses ke-5. Berikut salah satu contoh
action script yang digunakan untuk membuat animasi gerak
pada Diagram Status Proses (p1_ball):
onClipEvent (load) { var id1:Number = 0; var id2:Number = 1; var count:Number = 0; var x1:Number; var x2:Number; var y1:Number; var y2:Number; var dy:Number; var dx:Number; var dy1:Number; var dx1:Number; if (_root.speed == 1) { var speed = 9; } else if (_root.speed == 10) { var speed = 29; } var dist:Number = speed+1;} onClipEvent (enterFrame) { if (id1<_root.jalur.length-1 && id2<_root.jalur.length && _root.jalur.length != 0) {
58
if (dist>speed) { x1 = (_root[_root.jalur[id1]]._x-20); y1 = (_root[_root.jalur[id1]]._y); x2 = (_root[_root.jalur[id2]]._x-20); y2 = (_root[_root.jalur[id2]]._y); dy = y2-y1; dx = x2-x1; dy1 = Math.abs(y2-this._y); dx1 = Math.abs(x2-this._x); var sudut = Math.atan2(dy, dx); var speedx = speed*Math.cos(sudut); var speedy = speed*Math.sin(sudut); if (x1 == x2 && y1 == y2) { this._x = x1; this._y = y1; } else { this._x = x1+speedx*count; this._y = y1+speedy*count; } dist = Math.sqrt(dy1*dy1+dx1*dx1); count++; } else { count = 1; if (_root.speed == 1) { dist = 10; } else if (_root.speed == 10) { this._x = (_root[_root.jalur[_root.jalur.length-1]]._x-20); this._y = (_root[_root.jalur[_root.jalur.length-1]]._y); dist = 30;} id1++; id2++; } } }
Gambar 4.16 Diagram Status Proses
Diagram Waktu Kedatangan merupakan animasi yang
dibuat untuk membantu pengguna melihat proses yang siap
59
untuk dieksekusi berdasarkan waktu kedatangan dari setiap
proses. Diagram ini berupa movie clip yang dideklarasikan
pada layer Deklarasi Variabel pada frame 1 yang diberi nama
p1_diagram, untuk proses 1, p2_diagram untuk proses 2 dan
seterusnya sampai p5_diagram untuk proses 5. Action script
untuk melakukan animasi ini:
function diagram_waktu_kedatangan() { for (var i = 0; i<_root.input_proses.text; i++) { _root['name'+(i+1)+'_diagram'].text = "P"+(i+1); _root['p'+(i+1)+'_diagram']._x=(_root.proses[i].saattiba*10)+31; _root['p'+(i+1)+'_diagram']._width= _root.proses[i].lamaproses*10; } }
Gambar 4.17 Diagram Waktu Kedatangan
Pada bagian ini pengguna dapat melihat Gant Chart
merupakan diagram yang berfungsi untuk melihat hasil
eksekusi yang dilakukan oleh setiap algoritma berdasarkan
sistem pengurutan yang digunakan pada algoritma tersebut.
Gambar 4.18 Gant Chart
60
4.1.2.3 Menu Bantuan
Bila pengguna memilih menu Bantuan, maka aplikasi
akan menuju halaman berikut ini:
Gambar 4.19 Tampilan Halaman Bantuan
Halaman ini berupa movie clip yang diberi nama
‘bantuan’ yang menjelaskan bagaimana cara menggunakan
aplikasi ini, dengan menekan tombol next (untuk pindah
menuju halaman berikutnya) dan back (untuk pindah menuju
halaman sebelumnya). Berikut action script yang terdapat pada
tombol next dan back:
// Tombol next on (release) { _parent.nextFrame(); } // Tombol back on (release) { _parent.prevFrame(); }
61
Gambar 4.20 Tombol next dan tombol back
Juga terdapat tombol close yang berfungsi pengguna
untuk menutup dari menu bantuan ini, berikut action script
yang digunakan:
on (press) { _parent.removeMovieClip(this); }
Script ini akan memindahkan movie clip parent yang
bernama ‘bantuan’ untuk kemudian kembali pada posisi
semula, yaitu tepatnya pada koordinat (-642.1, 128.8)
Gambar 4.21 Tombol close menu bantuan
Menu bantuan dibuat menjadi sistem Drag and Drop,
berarti menu ini berupa movie clip dan dapat dilihat tanpa
harus pindah jendela, berikut action script untuk membuat
Drag and Drop:
on (press) { dept = _root.getNextHighestDepth(); _parent.swapDepths(_root.getInstanceAtDepth(dept-1)); startDrag(_parent); } on (release) { stopDrag(); } on (releaseOutside) { stopDrag(); }
62
4.2 Kuisioner
Dari hasil pembuatan aplikasi kemudian penulis melakukan berbagai
evaluasi secara berulang-ulang, salah satunya adalah dengan cara menyebar
kuisioner kepada calon pengguna. Hal ini dilakukan agar penulis dapat melihat
kelayakan berbagai aspek dari aplikasi yang telah dibuatnya dimata calon
penggunanya. Selain itu penyebaran kuisioner ini ditujukan agar penulis dapat
menerima masukan berupa saran dan kritik untuk kemajuan dari aplikasi yang
telah atau akan dibuatnya dikemudian hari.
4.2.1 Kuisioner dan cara pengumpulan datanya
Alat pengumpulan data disebut angket, dan sumber datanya
berupa orang atau disebut dengan istilah responden. Pada metode ini,
pertanyaan diajukan secara tertulis dan disebarkan kepada responden
untuk dijawab. Setelah pertanyaan dijawab, dikembalikan kepada
peneliti. Pertanyaan yang diajukan berupa pertanyaan tertutup. Disebut
pertanyaan tertutup karena pilihan jawabannya telah disediakan dan
responden tinggal memilih jawaban yang sesuai.
Berikut ini adalah beberapa tahap yang dapat dilakukan untuk
mengumpulkan data :
1. Pembuatan kuisioner
Pembuatan kuisioner ini dilakukan secara satu hari. Beberapa topik
yang dapat dibahas dari masing-masing kuisioner adalah topik yang
kiranya lebih mengarah ke evaluasi suatu hasil kerja.
2. Penyebaran kuisioner ke masing-masing responden
63
Penyebaran kuisioner ini dilakukan kurang lebih selama 4 hari.
3. Penarikan kuisioner
Penarikan kuisioner dilakukan setelah pengguna mencoba aplikasi
yang dibuat. Dan tidak lupa setelah menggunakan aplikasi tersebut
pengguna diharapkan dapat memberikan evaluasinya pada lembar
kuisioner tersebut.
4.2.2 Sasaran Kuisioner
Sasaran kuisioner untuk pengembangan aplikasi ini adalah
diutamakan mahasiswa Universitas Sanata Dharma yang telah atau
belum memahami cara kerja dari algoritma penjadwalan sistem
operasi.
4.2.3 Form Kuisioner
Gambar 4.22 Form Kuisioner
64
4.2.4 Hasil dan Pembahasan
Dari kuisioner yang berisi sembilan pertanyaan dan disebarkan
pada 20 orang responden, maka diperoleh hasil sebagai berikut:
1. Hasil prosentase pertanyaan 1:
Pertanyaan: “Apakah anda pernah mengikuti mata kuliah Sistem
Operasi?”
Gambar 4.23 Perhitungan hasil kuisioner pertanyaan 1
Kesimpulan: 20 responden menjawab pernah mengikuti mata kuliah
sistem operasi.
2. Hasil prosentase pertanyaan 2
Pertanyaan: “Apakah anda pernah memperlajari Algoritma
Penjadwalan dalam mata kuliah Sistem Operasi?”
Gambar 4.24 Perhitungan hasil kuisioner pertanyaan 2
YA
TIDAK
YA
TIDAK
65
Kesimpulan: 20 responden menjawab pernah mempelajari
Algoritma Penjadwalan dalam mata kuliah sistem operasi.
3. Hasil prosentase pertanyaan 3
Pertanyaan: “Apakah anda mengerti dasar-dasar dari Algoritma
Penjadwalan?”
Gambar 4.25 Perhitungan hasil kuisioner pertanyaan 3
Kesimpulan: 10 responden menjawab mengerti teori dasar dari
Algoritma Penjadwalan dan 10 responden menjawab tidak.
4. Hasil prosentase pertanyaan 4
Pertanyaan: “Apakah anda mengetahui macam-macam dari
Algoritma Penjadwalan?”
Gambar 4.26 Perhitungan hasil kuisioner pertanyaan 4
Kesimpulan: 7 responden menjawab mengetahui macam-macam
YA
TIDAK
YA
TIDAK
66
dari algoritma penjadwalan dan 10 responden menjawab tidak.
5. Hasil prosentase pertanyaan 5
Pertanyaan: “Dalam simulasi ini diberikan materi-materi tentang
Algoritma Penjadwalan, apakah materi tersebut membantu anda
dalam pemahaman?”
Gambar 4.27 Perhitungan hasil kuisioner pertanyaan 5
Kesimpulan: 18 responden menjawab materi yang diberikan
membantu pengguna dalam pemahaman dan 2 responden menjawab
tidak.
6. Hasil prosentase pertanyaan 6
Pertanyaan: “Apakah program simulasi Algoritma Penjadwalan ini
menarik bagi anda?”
Gambar 4.28 Perhitungan hasil kuisioner pertanyaan 6
YA
TIDAK
YA
TIDAK
67
Kesimpulan: 20 responden menjawab simulasi Algoritma
Penjadwalan ini menarik.
7. Hasil prosentase pertanyaan 7
Pertanyaan: “Apakah program simulasi Algoritma Penjadwalan ini
interaktif bagi anda?”
Gambar 4.29 Perhitungan hasil kuisioner pertanyaan 7
Kesimpulan: 18 responden simulasi ini menarik bagi pengguna dan
2 responden menjawab tidak.
8. Hasil prosentase pertanyaan 8
Pertanyaan: “Apakah fungsi help yang diberikan dalam program
simulasi ini sangat membantu anda dalam memahami jalannya
program?”
Gambar 4.30 Perhitungan hasil kuisioner pertanyaan 8
YA
TIDAK
YA
TIDAK
68
Kesimpulan: 10 responden menjawab fungsi help membantu
pengguna dan 10 responden menjawab tidak.
9. Hasil prosentase pertanyaan 9
Pertanyaan: “Apakah program simulasi Algoritma Penjadwalan ini
bermanfaat?”
Gambar 4.31 Perhitungan hasil kuisioner pertanyaan 9
Kesimpulan: 20 responden menjawab simulasi Algoritma
Penjadwalan ini bermanfaat.
4.3 Pembahasan
Manfaat dari penghitungan Average Waiting Time (AWT) ini adalah
sebagai sarana untuk membantu mahasiswa dalam memahami materi
penjadawalan CPU yang ada dalam mata kuliah Sistem Operasi. Penggunaan
enam algoritma penjadwalan dalam tugas akhir ini diharapkan bisa membantu
mahasiswa untuk memahami masing-masing algoritma penjadwalan tersebut
dengan memperhatikan visualisasi yang ditampilkan pada masing-masing
algoritma.
Pada algoritma FCFS, urutan eksekusi proses diurutkan berdasarkan
YA
TIDAK
69
urutan kedatangannya. Hal ini tidak adil karena proses yang memiliki lama
proses dengan waktu yang pendek menunggu terlalu lama sehingga akan
mengakibatkan terjadinya confoy effect. Jika dilihat dari efesiensi, maka
algoritma FCFS ini efisien karena algoritma ini membuat CPU selalu dalam
keadaan sibuk. Sedangkan pada algoritma SJF, proses dieksekusi berdasarkan
lama proses yang paling kecil.
Pada algoritma RR semua proses diberi jatah waktu tertentu yang
disebut dengan kuantum waktu. Algoritma RR sangat adil jika dipandang dari
jatah waktu pelayanan yang diberikan oleh CPU karena adanya kuantum
waktu. Namun terkadang muncul masalah dalam menentukan nilai kuantum
waktu. Jika kuantum waktu terlalu kecil akan menyebabkan terlalu banyak
switch antar proses dan efisiensi CPU akan rendah. Sebaliknya, jika kuantum
waktu terlalu besar akan menyebabkan respon CPU akan lambat sehingga
proses yang pendek akan menunggu lama. Sedangkan pada algoritma Priority,
tiap proses akan diberi nilai prioritas dan proses berprioritas rendah akan
dieksekusi terlebih dahulu.
4.4 Testing Program
Setelah melakukan perancangan dan mengimplementasikannya ke
dalam program maka penulis melakukan pengujian hasil penghitungan untuk
keenam algoritma penjadwalan secara manual dan hasil perhitungan oleh
sistem. Pengujian ini dilakukan untuk menjukkan bahwa hasil perhitungan
yang dilakukan oleh sistem sama dengan hasil penghitungan secara manual.
70
Sampel data yang digunakan 5 macam agar memperjelas cara kerja dari
masing-masing algoritma, dimana data yang digunakan sama untuk algortima
FCFS, SJF Preemtive, SJF Nonpreemtive, RR, Priority Preemtive dan Priority
Nonpreemtive.
4.4.1 Sampel Data I
Tabel 4.1 Data I
Nama
Proses
Saat
Tiba
Lama
Proses
Prioritas
(Hanya untuk Priority)
P1 0 1 1
P2 0 2 2
P3 0 3 3
P4 0 4 4
P5 0 5 5
4.4.1.1 Sampel data I pada algoritma FCFS
Dengan data yang diinputkan seperti tabel 4.1 di atas maka
diperoleh tampilan simulasi untuk algoritma FCFS, sebagai
berikut:
71
Gambar 4.32 Visualisasi data I Algoritma FCFS
Dengan melihat gambar 4.32 kita dapat menghitung waktu
tunggu masing-masing proses, sebagai berikut:
Waktu (slot time) tunggu P1 = 0
Waktu (slot time) tunggu P2 = 1
Waktu (slot time) tunggu P3 = 3
Waktu (slot time) tunggu P4 = 6
Waktu (slot time) tunggu P5 = 10
Dengan menggunakan rumus AWT = ∑ A𝑖𝑛𝑖=1𝑛
dapat dihitung
AWT dari algoritma FCFS untuk data I, dimana Ai adalah
waktu tunggu untuk P ke-I dan n adalah jumlah proses.
AWT = (0 + 1 + 3 + 6 + 10) / 5 = 4 (slot time)
Jadi dari perhitungan diatas diperoleh nilai AWT FCFS untuk
data I adalah 4.
72
Dari gambar 4.32 juga dapat diketahui waktu selesai per
proses, sebagai berikut:
Waktu (slot time) selesai P1 = 1
Waktu (slot time) selesai P2 = 3
Waktu (slot time) selesai P3 = 6
Waktu (slot time) selesai P4 = 10
Waktu (slot time) selesai P5 = 15
Dengan menggunakan rumus waktu rata-rata selesai semua
proses = ∑ X𝑖𝑛𝑖=1𝑛
dapat dihitung waktu rata-rata selesai
semua proses algoritma FCFS untuk data I, dimana Xi adalah
waktu tunggu untuk P ke-I dan n adalah jumlah proses.
waktu rata-rata selesai semua proses = (1 + 3 + 5 + 10 + 15) / 5
= 7 (slot time)
Jadi dari perhitungan diatas diperoleh nilai waktu rata-rata
selesai semua proses akgoritma FCFS untuk data I adalah 7.
73
4.4.1.2 Sampel data I pada algoritma SJF Nonpreemtive
Dengan data yang diinputkan seperti tabel 4.1 di atas maka
diperoleh tampilan simulasi untuk algoritma SJF
Nonpreemtive, sebagai berikut:
Gambar 4.33 Visualisasi data I Algoritma SJF Nonpreemtive
Dengan melihat gambar 4.33 kita dapat menghitung waktu
tunggu masing-masing proses, sebagai berikut:
Waktu (slot time) tunggu P1 = 0
Waktu (slot time) tunggu P2 = 1
Waktu (slot time) tunggu P3 = 3
Waktu (slot time) tunggu P4 = 6
Waktu (slot time) tunggu P5 = 10
Dengan menggunakan rumus AWT = ∑ A𝑖𝑛𝑖=1𝑛
dapat dihitung
AWT dari algoritma SJF Nonpreemtive untuk data I, dimana
74
Ai adalah waktu tunggu untuk P ke-I dan n adalah jumlah
proses.
AWT = (0 + 1 + 3 + 6 + 10) / 5 = 4 (slot time)
Jadi dari perhitungan diatas diperoleh nilai AWT SJF
Nonpreemtive untuk data I adalah 4.
Dari gambar 4.33 juga dapat diketahui waktu selesai per
proses, sebagai berikut:
Waktu (slot time) selesai P1 = 1
Waktu (slot time) selesai P2 = 3
Waktu (slot time) selesai P3 = 6
Waktu (slot time) selesai P4 = 10
Waktu (slot time) selesai P5 = 15
Dengan menggunakan rumus waktu rata-rata selesai semua
proses = ∑ X𝑖𝑛𝑖=1𝑛
dapat dihitung waktu rata-rata selesai
semua proses algoritma SJF Nonpreemtive untuk data I,
dimana Xi adalah waktu tunggu untuk P ke-I dan n adalah
jumlah proses.
waktu rata-rata selesai semua proses = (1 + 3 + 5 + 10 + 15) / 5
= 7 (slot time)
Jadi dari perhitungan diatas diperoleh nilai waktu rata-rata
selesai semua proses akgoritma SJF Nonpreemtive untuk data
I adalah 7.
75
4.4.1.3 Sampel data I pada algoritma SJF Preemtive
Dengan data yang diinputkan seperti tabel 4.1 di atas maka
diperoleh tampilan simulasi untuk algoritma SJF Preemtive,
sebagai berikut:
Gambar 4.34 Visualisasi data I Algoritma SJF Preemtive
Dengan melihat gambar 4.33 kita dapat menghitung waktu
tunggu masing-masing proses, sebagai berikut:
Waktu (slot time) tunggu P1 = 0
Waktu (slot time) tunggu P2 = 1
Waktu (slot time) tunggu P3 = 3
Waktu (slot time) tunggu P4 = 6
Waktu (slot time) tunggu P5 = 10
Dengan menggunakan rumus AWT = ∑ A𝑖𝑛𝑖=1𝑛
dapat dihitung
AWT dari algoritma SJF Preemtive untuk data I, dimana Ai
76
adalah waktu tunggu untuk P ke-I dan n adalah jumlah proses.
AWT = (0 + 1 + 3 + 6 + 10) / 5 = 4 (slot time)
Jadi dari perhitungan diatas diperoleh nilai AWT SJF
Preemtive untuk data I adalah 4.
Dari gambar 4.33 juga dapat diketahui waktu selesai per
proses, sebagai berikut:
Waktu (slot time) selesai P1 = 1
Waktu (slot time) selesai P2 = 3
Waktu (slot time) selesai P3 = 6
Waktu (slot time) selesai P4 = 10
Waktu (slot time) selesai P5 = 15
Dengan menggunakan rumus waktu rata-rata selesai semua
proses = ∑ X𝑖𝑛𝑖=1𝑛
dapat dihitung waktu rata-rata selesai
semua proses algoritma SJF Preemtive untuk data I, dimana Xi
adalah waktu tunggu untuk P ke-I dan n adalah jumlah proses.
waktu rata-rata selesai semua proses = (1 + 3 + 5 + 10 + 15) / 5
= 7 (slot time)
Jadi dari perhitungan diatas diperoleh nilai waktu rata-rata
selesai semua proses akgoritma SJF Preemtive untuk data I
adalah 7.
77
4.4.1.4 Sampel data I pada algoritma RR
Dengan data yang diinputkan seperti tabel 4.1 di atas maka
diperoleh tampilan simulasi untuk algoritma RR, sebagai
berikut:
Gambar 4.35 Visualisasi data I Algoritma RR
Dengan melihat gambar 4.35 kita dapat menghitung waktu
tunggu masing-masing proses, sebagai berikut:
Waktu (slot time) selesai P1 = 0
Waktu (slot time) selesai P2 = 4
Waktu (slot time) selesai P3 = 7
Waktu (slot time) selesai P4 = 9
Waktu (slot time) selesai P5 = 10
Dengan menggunakan rumus AWT = ∑ A𝑖𝑛𝑖=1𝑛
dapat dihitung
AWT dari algoritma RR untuk data I, dimana Ai adalah waktu
78
tunggu untuk P ke-I dan n adalah jumlah proses.
AWT = (0 + 4 + 7 + 9 + 10) / 5 = 6 (slot time)
Jadi dari perhitungan diatas diperoleh nilai AWT RR untuk
data I adalah 6.
Dari gambar 4.35 juga dapat diketahui waktu selesai per
proses, sebagai berikut:
Waktu (slot time) selesai P1 = 1
Waktu (slot time) selesai P2 = 6
Waktu (slot time) selesai P3 = 10
Waktu (slot time) selesai P4 = 13
Waktu (slot time) selesai P5 = 15
Dengan menggunakan rumus waktu rata-rata selesai semua
proses = ∑ X𝑖𝑛𝑖=1𝑛
dapat dihitung waktu rata-rata selesai
semua proses algoritma RR untuk data I, dimana Xi adalah
waktu tunggu untuk P ke-I dan n adalah jumlah proses.
waktu rata-rata selesai semua proses = (1 + 6 + 10 + 13 + 15) /
5 = 9 (slot time)
Jadi dari perhitungan diatas diperoleh nilai waktu rata-rata
selesai semua proses akgoritma RR untuk data I adalah 9.
79
4.4.1.5 Sampel data I pada algoritma Priority Nonpreemtive
Dengan data yang diinputkan seperti tabel 4.1 di atas maka
diperoleh tampilan simulasi untuk algoritma Priority
Nonpreemtive, sebagai berikut:
Gambar 4.36 Visualisasi data I Algoritma Priority
Nonpreemtive
Dengan melihat gambar 4.36 kita dapat menghitung waktu
tunggu masing-masing proses, sebagai berikut:
Waktu (slot time) tunggu P1 = 0
Waktu (slot time) tunggu P2 = 1
Waktu (slot time) tunggu P3 = 3
Waktu (slot time) tunggu P4 = 6
Waktu (slot time) tunggu P5 = 10
Dengan menggunakan rumus AWT = ∑ A𝑖𝑛𝑖=1𝑛
dapat dihitung
80
AWT dari algoritma Priority Nonpreemtive untuk data I,
dimana Ai adalah waktu tunggu untuk P ke-I dan n adalah
jumlah proses.
AWT = (0 + 1 + 3 + 6 + 10) / 5 = 4 (slot time)
Jadi dari perhitungan diatas diperoleh nilai AWT Priority
Nonpreemtive untuk data I adalah 4.
Dari gambar 4.36 juga dapat diketahui waktu selesai per
proses, sebagai berikut:
Waktu (slot time) selesai P1 = 1
Waktu (slot time) selesai P2 = 3
Waktu (slot time) selesai P3 = 6
Waktu (slot time) selesai P4 = 10
Waktu (slot time) selesai P5 = 15
Dengan menggunakan rumus waktu rata-rata selesai semua
proses = ∑ X𝑖𝑛𝑖=1𝑛
dapat dihitung waktu rata-rata selesai
semua proses algoritma Priority Nonpreemtive untuk data I,
dimana Xi adalah waktu tunggu untuk P ke-I dan n adalah
jumlah proses.
waktu rata-rata selesai semua proses = (1 + 3 + 5 + 10 + 15) / 5
= 7 (slot time)
Jadi dari perhitungan diatas diperoleh nilai waktu rata-rata
selesai semua proses akgoritma Priority Nonpreemtive untuk
data I adalah 9.
81
4.4.1.6 Sampel data I pada algoritma Priority Preemtive
Dengan data yang diinputkan seperti tabel 4.1 di atas maka
diperoleh tampilan simulasi untuk algoritma Priority
Preemtive, sebagai berikut:
Gambar 4.37 Visualisasi data I Algoritma Priority
Preemtive
Dengan melihat gambar 4.37 kita dapat menghitung waktu
tunggu masing-masing proses, sebagai berikut:
Waktu (slot time) tunggu P1 = 0
Waktu (slot time) tunggu P2 = 1
Waktu (slot time) tunggu P3 = 3
Waktu (slot time) tunggu P4 = 6
Waktu (slot time) tunggu P5 = 10
Dengan menggunakan rumus AWT = ∑ A𝑖𝑛𝑖=1𝑛
dapat dihitung
82
AWT dari algoritma Priority Preemtive untuk data I, dimana
Ai adalah waktu tunggu untuk P ke-I dan n adalah jumlah
proses.
AWT = (0 + 1 + 3 + 6 + 10) / 5 = 4 (slot time)
Jadi dari perhitungan diatas diperoleh nilai AWT Priority
Preemtiv, untuk data I adalah 4.
Dari gambar 4.37 juga dapat diketahui waktu selesai per
proses, sebagai berikut:
Waktu (slot time) selesai P1 = 1
Waktu (slot time) selesai P2 = 3
Waktu (slot time) selesai P3 = 6
Waktu (slot time) selesai P4 = 10
Waktu (slot time) selesai P5 = 15
Dengan menggunakan rumus waktu rata-rata selesai semua
proses = ∑ X𝑖𝑛𝑖=1𝑛
dapat dihitung waktu rata-rata selesai
semua proses algoritma Priority Preemtive untuk data I,
dimana Xi adalah waktu tunggu untuk P ke-I dan n adalah
jumlah proses.
waktu rata-rata selesai semua proses = (1 + 3 + 6 + 10 + 15) / 5
= 7 (slot time)
Jadi dari perhitungan diatas diperoleh nilai waktu rata-rata
selesai semua proses akgoritma Priority Preemtive untuk data
I adalah 7.
83
4.4.2 Sampel Data II
Tabel 4.2 Data II
Nama
Proses
Saat
Tiba
Lama
Proses
Prioritas
(Hanya untuk Priority)
P1 0 5 1
P2 0 4 2
P3 0 3 3
P4 0 2 4
P5 0 1 5
4.4.2.1 Sampel data II pada algoritma FCFS
Dengan data yang diinputkan seperti tabel 4.2 di atas maka
diperoleh tampilan simulasi untuk algoritma FCFS, sebagai
berikut:
84
Gambar 4.38 Visualisasi data II Algoritma FCFS
Dengan melihat gambar 4.38 kita dapat menghitung waktu
tunggu masing-masing proses, sebagai berikut:
Waktu (slot time) tunggu P1 = 0
Waktu (slot time) tunggu P2 = 5
Waktu (slot time) tunggu P3 = 9
Waktu (slot time) tunggu P4 = 12
Waktu (slot time) tunggu P5 = 14
Dengan menggunakan rumus AWT = ∑ A𝑖𝑛𝑖=1𝑛
dapat dihitung
AWT dari algoritma FCFS untuk data I, dimana Ai adalah
waktu tunggu untuk P ke-I dan n adalah jumlah proses.
AWT = (0 + 5 + 9 + 12 + 14) / 5 = 8 (slot time)
Jadi dari perhitungan diatas diperoleh nilai AWT FCFS, untuk
data II adalah 8.
85
Dari gambar 4.38 juga dapat diketahui waktu selesai per
proses, sebagai berikut:
Waktu (slot time) selesai P1 = 5
Waktu (slot time) selesai P2 = 9
Waktu (slot time) selesai P3 = 12
Waktu (slot time) selesai P4 = 14
Waktu (slot time) selesai P5 = 15
Dengan menggunakan rumus waktu rata-rata selesai semua
proses = ∑ X𝑖𝑛𝑖=1𝑛
dapat dihitung waktu rata-rata selesai
semua proses algoritma FCFS untuk data II, dimana Xi adalah
waktu tunggu untuk P ke-I dan n adalah jumlah proses.
waktu rata-rata selesai semua proses = (5 + 9 + 12 + 14 + 15) /
5 = 11 (slot time)
Jadi dari perhitungan diatas diperoleh nilai waktu rata-rata
selesai semua proses akgoritma FCFS untuk data II adalah 11.
86
4.4.2.2 Sampel data II pada algoritma SJF Nonpreemtive
Dengan data yang diinputkan seperti tabel 4.2 di atas maka
diperoleh tampilan simulasi untuk algoritma SJF
Nonpreemtive, sebagai berikut:
Gambar 4.39 Visualisasi data II Algoritma SJF Nonpreemtive
Dengan melihat gambar 4.39 kita dapat menghitung waktu
tunggu masing-masing proses, sebagai berikut:
Waktu (slot time) tunggu P1 = 10
Waktu (slot time) tunggu P2 = 6
Waktu (slot time) tunggu P3 = 3
Waktu (slot time) tunggu P4 = 1
Waktu (slot time) tunggu P5 = 0
Dengan menggunakan rumus AWT = ∑ A𝑖𝑛𝑖=1𝑛
dapat dihitung
AWT dari algoritma SJF Nonpreemtive untuk data I dimana
87
Ai adalah waktu tunggu untuk P ke-I dan n adalah jumlah
proses.
AWT = (10 + 6 + 3 + 1 + 0) / 5 = 4 (slot time)
Jadi dari perhitungan diatas diperoleh nilai AWT SJF
Nonpreemtive untuk data II adalah 4.
Dari gambar 4.39 juga dapat diketahui waktu selesai per
proses, sebagai berikut:
Waktu (slot time) selesai P1 = 15
Waktu (slot time) selesai P2 = 10
Waktu (slot time) selesai P3 = 6
Waktu (slot time) selesai P4 = 3
Waktu (slot time) selesai P5 = 1
Dengan menggunakan rumus waktu rata-rata selesai semua
proses = ∑ X𝑖𝑛𝑖=1𝑛
dapat dihitung waktu rata-rata selesai
semua proses algoritma SJF Nonpreemtive untuk data II,
dimana Xi adalah waktu tunggu untuk P ke-I dan n adalah
jumlah proses.
waktu rata-rata selesai semua proses = (15 + 10 + 6 + 3 + 1) / 5
= 7 (slot time)
Jadi dari perhitungan diatas diperoleh nilai waktu rata-rata
selesai semua proses akgoritma SJF Nonpreemtive untuk data
II adalah 7.
88
4.4.2.3 Sampel data II pada algoritma SJF Preemtive
Dengan data yang diinputkan seperti tabel 4.2 di atas maka
diperoleh tampilan simulasi untuk algoritma SJF Preemtive,
sebagai berikut:
Gambar 4.40 Visualisasi data II Algoritma SJF Preemtive
Dengan melihat gambar 4.40 kita dapat menghitung waktu
tunggu masing-masing proses, sebagai berikut:
Waktu (slot time) tunggu P1 = 10
Waktu (slot time) tunggu P2 = 6
Waktu (slot time) tunggu P3 = 3
Waktu (slot time) tunggu P4 = 1
Waktu (slot time) tunggu P5 = 0
Dengan menggunakan rumus AWT = ∑ A𝑖𝑛𝑖=1𝑛
dapat dihitung
89
AWT dari algoritma SJF Preemtive untuk data I dimana Ai
adalah waktu tunggu untuk P ke-I dan n adalah jumlah proses.
AWT = (10 + 6 + 3 + 1 + 0) / 5 = 4 (slot time)
Jadi dari perhitungan diatas diperoleh nilai AWT SJF
Preemtive untuk data II adalah 4.
Dari gambar 4.40 juga dapat diketahui waktu selesai per
proses, sebagai berikut:
Waktu (slot time) selesai P1 = 15
Waktu (slot time) selesai P2 = 10
Waktu (slot time) selesai P3 = 6
Waktu (slot time) selesai P4 = 3
Waktu (slot time) selesai P5 = 1
Dengan menggunakan rumus waktu rata-rata selesai semua
proses = ∑ X𝑖𝑛𝑖=1𝑛
dapat dihitung waktu rata-rata selesai
semua proses algoritma SJF Preemtive untuk data II, dimana
Xi adalah waktu tunggu untuk P ke-I dan n adalah jumlah
proses.
waktu rata-rata selesai semua proses = (15 + 10 + 6 + 3 + 1) / 5
= 7 (slot time)
Jadi dari perhitungan diatas diperoleh nilai waktu rata-rata
selesai semua proses akgoritma SJF Preemtive untuk data II
adalah 7.
90
4.4.2.4 Sampel data II pada algoritma RR
Dengan data yang diinputkan seperti tabel 4.2 di atas maka
diperoleh tampilan simulasi untuk algoritma RR sebagai
berikut:
Gambar 4.41 Visualisasi data II Algoritma RR
Dengan melihat gambar 4.41 kita dapat menghitung waktu
tunggu masing-masing proses, sebagai berikut:
Waktu (slot time) tunggu P1 = 10
Waktu (slot time) tunggu P2 = 10
Waktu (slot time) tunggu P3 = 9
Waktu (slot time) tunggu P4 = 7
Waktu (slot time) tunggu P5 = 4
91
Dengan menggunakan rumus AWT = ∑ A𝑖𝑛𝑖=1𝑛
dapat dihitung
AWT dari algoritma RR untuk data II dimana Ai adalah waktu
tunggu untuk P ke-I dan n adalah jumlah proses.
AWT = (10 + 10 + 9 + 7 + 4) / 5 = 8 (slot time)
Jadi dari perhitungan diatas diperoleh nilai AWT RR untuk
data II adalah 8.
Dari gambar 4.41 juga dapat diketahui waktu selesai per
proses, sebagai berikut:
Waktu (slot time) selesai P1 = 15
Waktu (slot time) selesai P2 = 14
Waktu (slot time) selesai P3 = 12
Waktu (slot time) selesai P4 = 9
Waktu (slot time) selesai P5 = 5
Dengan menggunakan rumus waktu rata-rata selesai semua
proses = ∑ X𝑖𝑛𝑖=1𝑛
dapat dihitung waktu rata-rata selesai
semua proses algoritma RR untuk data II, dimana Xi adalah
waktu tunggu untuk P ke-I dan n adalah jumlah proses.
waktu rata-rata selesai semua proses = (15 + 14 + 12 + 9 + 5) /
5 = 11 (slot time)
Jadi dari perhitungan diatas diperoleh nilai waktu rata-rata
selesai semua proses akgoritma RR untuk data II adalah 11.
92
4.4.2.5 Sampel data II pada algoritma Priority Nonpreemtive
Dengan data yang diinputkan seperti tabel 4.2 di atas maka
diperoleh tampilan simulasi untuk algoritma Priority
Nonpreemtive sebagai berikut:
Gambar 4.42 Visualisasi data II Algoritma Priority
Nonpreemtive
Dengan melihat gambar 4.42 kita dapat menghitung waktu
tunggu masing-masing proses, sebagai berikut:
Waktu (slot time) tunggu P1 = 0
Waktu (slot time) tunggu P2 = 5
Waktu (slot time) tunggu P3 = 9
93
Waktu (slot time) tunggu P4 = 12
Waktu (slot time) tunggu P5 = 14
Dengan menggunakan rumus AWT = ∑ A𝑖𝑛𝑖=1𝑛
dapat dihitung
AWT dari algoritma Priority Nonpreemtive untuk data II
dimana Ai adalah waktu tunggu untuk P ke-I dan n adalah
jumlah proses.
AWT = (0 + 5 + 9 + 12 + 14) / 5 = 8 (slot time)
Jadi dari perhitungan diatas diperoleh nilai AWT Priority
Nonpreemtive untuk data I adalah 8.
Dari gambar 4.42 juga dapat diketahui waktu selesai per
proses, sebagai berikut:
Waktu (slot time) selesai P1 = 5
Waktu (slot time) selesai P2 = 9
Waktu (slot time) selesai P3 = 12
Waktu (slot time) selesai P4 = 14
Waktu (slot time) selesai P5 = 15
Dengan menggunakan rumus waktu rata-rata selesai semua
proses = ∑ X𝑖𝑛𝑖=1𝑛
dapat dihitung waktu rata-rata selesai
semua proses algoritma Priority Nonpreemtive untuk data II,
dimana Xi adalah waktu tunggu untuk P ke-I dan n adalah
jumlah proses.
waktu rata-rata selesai semua proses = (5 + 9 + 12 + 14 + 15) /
94
5 = 11 (slot time)
Jadi dari perhitungan diatas diperoleh nilai waktu rata-rata
selesai semua proses akgoritma Priority Nonpreemtive untuk
data II adalah 11.
4.4.2.6 Sampel data II pada algoritma Priority Preemtive
Dengan data yang diinputkan seperti tabel 4.2 di atas maka
diperoleh tampilan simulasi untuk algoritma Priority
Preemtive sebagai berikut:
Gambar 4.43 Visualisasi data II Algoritma Priority Preemtive
Dengan melihat gambar 4.43 kita dapat menghitung waktu
tunggu masing-masing proses, sebagai berikut:
Waktu (slot time) tunggu P1 = 0
Waktu (slot time) tunggu P2 = 5
Waktu (slot time) tunggu P3 = 9
95
Waktu (slot time) tunggu P4 = 12
Waktu (slot time) tunggu P5 = 14
Dengan menggunakan rumus AWT = ∑ A𝑖𝑛𝑖=1𝑛
dapat dihitung
AWT dari algoritma Priority Preemtive untuk data II dimana
Ai adalah waktu tunggu untuk P ke-I dan n adalah jumlah
proses.
AWT = (0 + 5 + 9 + 12 + 14) / 5 = 8 (slot time)
Jadi dari perhitungan diatas diperoleh nilai AWT Priority
Preemtive untuk data II adalah 8.
Dari gambar 4.43 juga dapat diketahui waktu selesai per
proses, sebagai berikut:
Waktu (slot time) selesai P1 = 5
Waktu (slot time) selesai P2 = 9
Waktu (slot time) selesai P3 = 12
Waktu (slot time) selesai P4 = 14
Waktu (slot time) selesai P5 = 15
Dengan menggunakan rumus waktu rata-rata selesai semua
proses = ∑ X𝑖𝑛𝑖=1𝑛
dapat dihitung waktu rata-rata selesai
semua proses algoritma Priority Preemtive untuk data II,
dimana Xi adalah waktu tunggu untuk P ke-I dan n adalah
jumlah proses.
waktu rata-rata selesai semua proses = (5 + 9 + 12 + 14 + 15) /
96
5 = 11 (slot time)
Jadi dari perhitungan diatas diperoleh nilai waktu rata-rata
selesai semua proses akgoritma Priority Preemtive untuk data
II adalah 11.
4.4.3 Sampel Data III
Tabel 4.3 Data III
Nama
Proses
Saat
Tiba
Lama
Proses
Prioritas
(Hanya untuk Priority)
P1 0 15 4
P2 0 10 3
P3 0 5 2
P4 0 8 1
P5 0 15 5
4.4.3.1 Sampel data III pada algoritma FCFS
Dengan data yang diinputkan seperti tabel 4.3 di atas maka
diperoleh tampilan simulasi untuk algoritma FCFS, sebagai
berikut:
97
Gambar 4.44 Visualisasi data III Algoritma FCFS
Dengan melihat gambar 4.44 kita dapat menghitung waktu
tunggu masing-masing proses, sebagai berikut:
Waktu (slot time) tunggu P1 = 0
Waktu (slot time) tunggu P2 = 15
Waktu (slot time) tunggu P3 = 25
Waktu (slot time) tunggu P4 = 30
Waktu (slot time) tunggu P5 = 38
Dengan menggunakan rumus AWT = ∑ A𝑖𝑛𝑖=1𝑛
dapat
dihitung AWT dari algoritma FCFS untuk data III dimana Ai
adalah waktu tunggu untuk P ke-I dan n adalah jumlah
proses.
AWT = (0 + 15 + 25 + 30 + 38) / 5 = 21.6 (slot time)
98
Jadi dari perhitungan diatas diperoleh nilai AWT FCFS
untuk data III adalah 21.6.
Dari gambar 4.44 juga dapat diketahui waktu selesai per
proses, sebagai berikut:
Waktu (slot time) selesai P1 = 15
Waktu (slot time) selesai P2 = 25
Waktu (slot time) selesai P3 = 30
Waktu (slot time) selesai P4 = 38
Waktu (slot time) selesai P5 = 53
Dengan menggunakan rumus waktu rata-rata selesai semua
proses = ∑ X𝑖𝑛𝑖=1𝑛
dapat dihitung waktu rata-rata selesai
semua proses algoritma FCFS untuk data III, dimana Xi
adalah waktu tunggu untuk P ke-I dan n adalah jumlah
proses.
waktu rata-rata selesai semua proses = (15 + 25 + 30 + 38 +
53) / 5 = 32.2 (slot time)
Jadi dari perhitungan diatas diperoleh nilai waktu rata-rata
selesai semua proses akgoritma FCFS untuk data III adalah
32.2.
99
4.4.3.2 Sampel data III pada algoritma SJF Nonpreemtive
Dengan data yang diinputkan seperti tabel 4.3 di atas maka
diperoleh tampilan simulasi untuk algoritma SJF
Nonpreemtive, sebagai berikut:
Gambar 4.45 Visualisasi data III Algoritma SJF
Nonpreemtive
Dengan melihat gambar 4.45 kita dapat menghitung waktu
tunggu masing-masing proses, sebagai berikut:
Waktu (slot time) tunggu P1 = 0
Waktu (slot time) tunggu P2 = 5
Waktu (slot time) tunggu P3 = 13
Waktu (slot time) tunggu P4 = 23
Waktu (slot time) tunggu P5 = 38
Dengan menggunakan rumus AWT = ∑ A𝑖𝑛𝑖=1𝑛
dapat dihitung
100
AWT dari algoritma SJF Nonpreemtive untuk data III dimana
Ai adalah waktu tunggu untuk P ke-I dan n adalah jumlah
proses.
AWT = (0 + 5 + 13 + 23 + 38) / 5 = 15.8 (slot time)
Jadi dari perhitungan diatas diperoleh nilai AWT SJF
Nonpreemtive untuk data III adalah 15.8.
Dari gambar 4.45 juga dapat diketahui waktu selesai per
proses, sebagai berikut:
Waktu (slot time) selesai P1 = 5
Waktu (slot time) selesai P2 = 13
Waktu (slot time) selesai P3 = 23
Waktu (slot time) selesai P4 = 38
Waktu (slot time) selesai P5 = 53
Dengan menggunakan rumus waktu rata-rata selesai semua
proses = ∑ X𝑖𝑛𝑖=1𝑛
dapat dihitung waktu rata-rata selesai
semua proses algoritma SJF Nonpreemtive untuk data III,
dimana Xi adalah waktu tunggu untuk P ke-I dan n adalah
jumlah proses.
waktu rata-rata selesai semua proses = (5 + 13 + 30 + 38 + 53)
/ 5 = 27.8 (slot time)
Jadi dari perhitungan diatas diperoleh nilai waktu rata-rata
selesai semua proses akgoritma SJF Nonpreemtive untuk data
III adalah 27.8.
101
4.4.3.3 Sampel data III pada algoritma SJF Preemtive
Dengan data yang diinputkan seperti tabel 4.3 di atas maka
diperoleh tampilan simulasi untuk algoritma SJF Preemtive,
sebagai berikut:
Gambar 4.46 Visualisasi data III Algoritma SJF Preemtive
Dengan melihat gambar 4.46 kita dapat menghitung waktu
tunggu masing-masing proses, sebagai berikut:
Waktu (slot time) tunggu P1 = 0
Waktu (slot time) tunggu P2 = 5
Waktu (slot time) tunggu P3 = 13
Waktu (slot time) tunggu P4 = 23
Waktu (slot time) tunggu P5 = 38
Dengan menggunakan rumus AWT = ∑ A𝑖𝑛𝑖=1𝑛
dapat dihitung
102
AWT dari algoritma SJF Preemtive untuk data III dimana Ai
adalah waktu tunggu untuk P ke-I dan n adalah jumlah proses.
AWT = (0 + 5 + 13 + 23 + 38) / 5 = 15.8 (slot time)
Jadi dari perhitungan diatas diperoleh nilai AWT SJF
Preemtive untuk data III adalah 15.8.
Dari gambar 4.46 juga dapat diketahui waktu selesai per
proses, sebagai berikut:
Waktu (slot time) selesai P1 = 5
Waktu (slot time) selesai P2 = 13
Waktu (slot time) selesai P3 = 23
Waktu (slot time) selesai P4 = 38
Waktu (slot time) selesai P5 = 53
Dengan menggunakan rumus waktu rata-rata selesai semua
proses = ∑ X𝑖𝑛𝑖=1𝑛
dapat dihitung waktu rata-rata selesai
semua proses algoritma SJF Preemtive untuk data III, dimana
Xi adalah waktu tunggu untuk P ke-I dan n adalah jumlah
proses.
waktu rata-rata selesai semua proses = (5 + 13 + 30 + 38 + 53)
/ 5 = 27.8 (slot time)
Jadi dari perhitungan diatas diperoleh nilai waktu rata-rata
selesai semua proses akgoritma SJF Preemtive untuk data III
adalah 27.8.
103
4.4.3.4 Sampel data III pada algoritma RR
Dengan data yang diinputkan seperti tabel 4.3 di atas maka
diperoleh tampilan simulasi untuk algoritma SJF RR, sebagai
berikut:
Gambar 4.47 Visualisasi data III Algoritma RR
Dengan melihat gambar 4.47 kita dapat menghitung waktu
tunggu masing-masing proses, sebagai berikut:
Waktu (slot time) tunggu P1 = 37
Waktu (slot time) tunggu P2 = 31
Waktu (slot time) tunggu P3 = 20
Waktu (slot time) tunggu P4 = 27
Waktu (slot time) tunggu P5 = 38
Dengan menggunakan rumus AWT = ∑ A𝑖𝑛𝑖=1𝑛
dapat dihitung
104
AWT dari algoritma RR untuk data III dimana Ai adalah
waktu tunggu untuk P ke-I dan n adalah jumlah proses.
AWT = (37 + 31 + 20 + 27 + 38) / 5 = 30.6 (slot time)
Jadi dari perhitungan diatas diperoleh nilai AWT RR untuk
data III adalah 30.6.
Dari gambar 4.47 juga dapat diketahui waktu selesai per
proses, sebagai berikut:
Waktu (slot time) selesai P1 = 52
Waktu (slot time) selesai P2 = 41
Waktu (slot time) selesai P3 = 25
Waktu (slot time) selesai P4 = 35
Waktu (slot time) selesai P5 = 53
Dengan menggunakan rumus waktu rata-rata selesai semua
proses = ∑ X𝑖𝑛𝑖=1𝑛
dapat dihitung waktu rata-rata selesai
semua proses algoritma RR untuk data III, dimana Xi adalah
waktu tunggu untuk P ke-I dan n adalah jumlah proses.
waktu rata-rata selesai semua proses = (52 + 41 + 25 + 35 +
53) / 5 = 41.2 (slot time)
Jadi dari perhitungan diatas diperoleh nilai waktu rata-rata
selesai semua proses akgoritma RR untuk data III adalah 41.2.
105
4.4.3.5 Sampel data III pada algoritma Priority Nonpreemtive
Dengan data yang diinputkan seperti tabel 4.3 di atas maka
diperoleh tampilan simulasi untuk algoritma SJF Priority
Nonpreemtive, sebagai berikut:
Gambar 4.48 Visualisasi data III Algoritma Priority
Nonpreemtive
Dengan melihat gambar 4.48 kita dapat menghitung waktu
tunggu masing-masing proses, sebagai berikut:
Waktu (slot time) tunggu P1 = 0
Waktu (slot time) tunggu P2 = 8
Waktu (slot time) tunggu P3 = 13
Waktu (slot time) tunggu P4 = 23
Waktu (slot time) tunggu P5 = 38
Dengan menggunakan rumus AWT = ∑ A𝑖𝑛𝑖=1𝑛
dapat dihitung
106
AWT dari algoritma Priority Nonpreemtive,untuk data III
dimana Ai adalah waktu tunggu untuk P ke-I dan n adalah
jumlah proses.
AWT = (0 + 8 + 13 + 23 + 38) / 5 = 16.4 (slot time)
Jadi dari perhitungan diatas diperoleh nilai AWT Priority
Nonpreemtive,untuk data III adalah 16.4.
Dari gambar 4.48 juga dapat diketahui waktu selesai per
proses, sebagai berikut:
Waktu (slot time) selesai P1 = 8
Waktu (slot time) selesai P2 = 13
Waktu (slot time) selesai P3 = 23
Waktu (slot time) selesai P4 = 38
Waktu (slot time) selesai P5 = 53
Dengan menggunakan rumus waktu rata-rata selesai semua
proses = ∑ X𝑖𝑛𝑖=1𝑛
dapat dihitung waktu rata-rata selesai
semua proses algoritma Priority Nonpreemtive,untuk data III,
dimana Xi adalah waktu tunggu untuk P ke-I dan n adalah
jumlah proses.
waktu rata-rata selesai semua proses = (8 + 13 + 23 + 38 + 53)
/ 5 = 27 (slot time)
Jadi dari perhitungan diatas diperoleh nilai waktu rata-rata
selesai semua proses akgoritma Priority Nonpreemtive,untuk
data III adalah 27.
107
4.4.3.6 Sampel data III pada algoritma Priority Preemtive
Dengan data yang diinputkan seperti tabel 4.3 di atas maka
diperoleh tampilan simulasi untuk algoritma SJF Priority
Preemtive, sebagai berikut:
Gambar 4.49 Visualisasi data III Algoritma Priority
Preemtive
Dengan melihat gambar 4.49 kita dapat menghitung waktu
tunggu masing-masing proses, sebagai berikut:
Waktu (slot time) tunggu P1 = 0
Waktu (slot time) tunggu P2 = 8
Waktu (slot time) tunggu P3 = 13
Waktu (slot time) tunggu P4 = 23
Waktu (slot time) tunggu P5 = 38
Dengan menggunakan rumus AWT = ∑ A𝑖𝑛𝑖=1𝑛
dapat dihitung
108
AWT dari algoritma Priority Preemtive,untuk data III dimana
Ai adalah waktu tunggu untuk P ke-I dan n adalah jumlah
proses.
AWT = (0 + 8 + 13 + 23 + 38) / 5 = 16.4 (slot time)
Jadi dari perhitungan diatas diperoleh nilai AWT Priority
Preemtive,untuk data III adalah 16.4.
Dari gambar 4.48 juga dapat diketahui waktu selesai per
proses, sebagai berikut:
Waktu (slot time) selesai P1 = 8
Waktu (slot time) selesai P2 = 13
Waktu (slot time) selesai P3 = 23
Waktu (slot time) selesai P4 = 38
Waktu (slot time) selesai P5 = 53
Dengan menggunakan rumus waktu rata-rata selesai semua
proses = ∑ X𝑖𝑛𝑖=1𝑛
dapat dihitung waktu rata-rata selesai
semua proses algoritma Priority Preemtive,untuk data III,
dimana Xi adalah waktu tunggu untuk P ke-I dan n adalah
jumlah proses.
waktu rata-rata selesai semua proses = (8 + 13 + 23 + 38 + 53)
/ 5 = 27 (slot time)
Jadi dari perhitungan diatas diperoleh nilai waktu rata-rata
selesai semua proses akgoritma Priority Preemtive,untuk data
III adalah 27.
109
4.4.4 Sampel Data IV
Tabel 4.4 Data IV
Nama
Proses
Saat
Tiba
Lama
Proses
Prioritas
(Hanya untuk Priority)
P1 1 15 5
P2 2 10 4
P3 3 5 3
P4 4 8 2
P5 5 15 1
4.4.4.1 Sampel data IV pada algoritma FCFS
Dengan data yang diinputkan seperti tabel 4.4 di atas maka
diperoleh tampilan simulasi untuk algoritma FCFS, sebagai
berikut:
110
Gambar 4.50 Visualisasi data IV Algoritma FCFS
Dengan melihat gambar 4.50 kita dapat menghitung waktu
tunggu masing-masing proses, sebagai berikut:
Waktu (slot time) tunggu P1 = 0
Waktu (slot time) tunggu P2 = 14
Waktu (slot time) tunggu P3 = 23
Waktu (slot time) tunggu P4 = 27
Waktu (slot time) tunggu P5 = 34
Dengan menggunakan rumus AWT = ∑ A𝑖𝑛𝑖=1𝑛
dapat
dihitung AWT dari algoritma FCFS untuk data IV dimana Ai
adalah waktu tunggu untuk P ke-I dan n adalah jumlah
proses.
AWT = (0 + 14 + 23 + 27 + 34) / 5 = 19.6 (slot time)
111
Jadi dari perhitungan diatas diperoleh nilai AWT FCFS
untuk data IV adalah 19.6.
Dari gambar 4.50 juga dapat diketahui waktu selesai per
proses, sebagai berikut:
Waktu (slot time) selesai P1 = 16
Waktu (slot time) selesai P2 = 26
Waktu (slot time) selesai P3 = 31
Waktu (slot time) selesai P4 = 39
Waktu (slot time) selesai P5 = 54
Dengan menggunakan rumus waktu rata-rata selesai semua
proses = ∑ X𝑖𝑛𝑖=1𝑛
dapat dihitung waktu rata-rata selesai
semua proses algoritma FCFS untuk data IV, dimana Xi
adalah waktu tunggu untuk P ke-I dan n adalah jumlah
proses.
waktu rata-rata selesai semua proses = (16 + 26 + 31 + 39 +
54) / 5 = 33.2 (slot time)
Jadi dari perhitungan diatas diperoleh nilai waktu rata-rata
selesai semua proses akgoritma FCFS untuk data IV adalah
33.2.
112
4.4.4.2 Sampel data IV pada algoritma SJF Nonpreemtive
Dengan data yang diinputkan seperti tabel 4.4 di atas maka
diperoleh tampilan simulasi untuk algoritma SJF
Nonpreemtive, sebagai berikut:
Gambar 4.51 Visualisasi data IV Algoritma SJF
Nonpreemtive
Dengan melihat gambar 4.51 kita dapat menghitung waktu
tunggu masing-masing proses, sebagai berikut:
Waktu (slot time) tunggu P1 = 0
Waktu (slot time) tunggu P2 = 27
Waktu (slot time) tunggu P3 = 13
Waktu (slot time) tunggu P4 = 17
Waktu (slot time) tunggu P5 = 34
Dengan menggunakan rumus AWT = ∑ A𝑖𝑛𝑖=1𝑛
dapat
113
dihitung AWT dari algoritma SJF Nonpreemtive untuk data
IV dimana Ai adalah waktu tunggu untuk P ke-I dan n adalah
jumlah proses.
AWT = (0 + 27 + 13 + 17 + 34) / 5 = 18.2 (slot time)
Jadi dari perhitungan diatas diperoleh nilai AWT SJF
Nonpreemtive untuk data IV adalah 18.2.
Dari gambar 4.51 juga dapat diketahui waktu selesai per
proses, sebagai berikut:
Waktu (slot time) selesai P1 = 16
Waktu (slot time) selesai P2 = 39
Waktu (slot time) selesai P3 = 21
Waktu (slot time) selesai P4 = 29
Waktu (slot time) selesai P5 = 54
Dengan menggunakan rumus waktu rata-rata selesai semua
proses = ∑ X𝑖𝑛𝑖=1𝑛
dapat dihitung waktu rata-rata selesai
semua proses algoritma SJF Nonpreemtive untuk data IV,
dimana Xi adalah waktu tunggu untuk P ke-I dan n adalah
jumlah proses.
waktu rata-rata selesai semua proses = (16 + 39 + 21 + 29 +
54) / 5 = 33.8 (slot time)
Jadi dari perhitungan diatas diperoleh nilai waktu rata-rata
selesai semua proses akgoritma SJF Nonpreemtive untuk
data IV adalah 33.8.
114
4.4.4.3 Sampel data IV pada algoritma SJF Preemtive
Dengan data yang diinputkan seperti tabel 4.4 di atas maka
diperoleh tampilan simulasi untuk algoritma SJF Preemtive,
sebagai berikut:
Gambar 4.52 Visualisasi data IV Algoritma SJF Preemtive
Dengan melihat gambar 4.52 kita dapat menghitung waktu
tunggu masing-masing proses, sebagai berikut:
Waktu (slot time) tunggu P1 = 23
Waktu (slot time) tunggu P2 = 13
Waktu (slot time) tunggu P3 = 0
Waktu (slot time) tunggu P4 = 4
Waktu (slot time) tunggu P5 = 34
Dengan menggunakan rumus AWT = ∑ A𝑖𝑛𝑖=1𝑛
dapat dihitung
AWT dari algoritma SJF Preemtive untuk data IV dimana Ai
115
adalah waktu tunggu untuk P ke-I dan n adalah jumlah proses.
AWT = (23 + 13 + 0 + 4 + 34) / 5 = 14.8 (slot time)
Jadi dari perhitungan diatas diperoleh nilai AWT SJF
Preemtive untuk data IV adalah 14.8.
Dari gambar 4.52 juga dapat diketahui waktu selesai per
proses, sebagai berikut:
Waktu (slot time) selesai P1 = 39
Waktu (slot time) selesai P2 = 25
Waktu (slot time) selesai P3 = 8
Waktu (slot time) selesai P4 = 16
Waktu (slot time) selesai P5 = 54
Dengan menggunakan rumus waktu rata-rata selesai semua
proses = ∑ X𝑖𝑛𝑖=1𝑛
dapat dihitung waktu rata-rata selesai
semua proses algoritma SJF Preemtive untuk data IV, dimana
Xi adalah waktu tunggu untuk P ke-I dan n adalah jumlah
proses.
waktu rata-rata selesai semua proses = (39 + 25 + 8 + 16 + 54)
/ 5 = 28.4 (slot time)
Jadi dari perhitungan diatas diperoleh nilai waktu rata-rata
selesai semua proses akgoritma SJF Preemtive untuk data IV
adalah 28.4.
116
4.4.4.4 Sampel data IV pada algoritma RR
Dengan data yang diinputkan seperti tabel 4.4 di atas maka
diperoleh tampilan simulasi untuk algoritma RR, sebagai
berikut:
Gambar 4.53 Visualisasi data IV Algoritma RR
Dengan melihat gambar 4.53 kita dapat menghitung waktu
tunggu masing-masing proses, sebagai berikut:
Waktu (slot time) tunggu P1 = 37
Waktu (slot time) tunggu P2 = 30
Waktu (slot time) tunggu P3 = 18
Waktu (slot time) tunggu P4 = 24
Waktu (slot time) tunggu P5 = 34
Dengan menggunakan rumus AWT = ∑ A𝑖𝑛𝑖=1𝑛
dapat dihitung
AWT dari algoritma RR untuk data IV dimana Ai adalah
117
waktu tunggu untuk P ke-I dan n adalah jumlah proses.
AWT = (37 + 30 + 18 + 24 + 34) / 5 = 28.6 (slot time)
Jadi dari perhitungan diatas diperoleh nilai AWT RR untuk
data IV adalah 28.6.
Dari gambar 4.53 juga dapat diketahui waktu selesai per
proses, sebagai berikut:
Waktu (slot time) selesai P1 = 53
Waktu (slot time) selesai P2 = 42
Waktu (slot time) selesai P3 = 26
Waktu (slot time) selesai P4 = 36
Waktu (slot time) selesai P5 = 54
Dengan menggunakan rumus waktu rata-rata selesai semua
proses = ∑ X𝑖𝑛𝑖=1𝑛
dapat dihitung waktu rata-rata selesai
semua proses algoritma RR untuk data IV, dimana Xi adalah
waktu tunggu untuk P ke-I dan n adalah jumlah proses.
waktu rata-rata selesai semua proses = (53 + 42 + 26 + 36 +
54) / 5 = 42.2 (slot time)
Jadi dari perhitungan diatas diperoleh nilai waktu rata-rata
selesai semua proses akgoritma RR untuk data IV adalah 42.2.
118
4.4.4.5 Sampel data IV pada algoritma Priority Nonpreemtive
Dengan data yang diinputkan seperti tabel 4.4 di atas maka
diperoleh tampilan simulasi untuk algoritma Priority
Nonpreemtive, sebagai berikut:
Gambar 4.54 Visualisasi data IV Algoritma Priority
Nonpreemtive
Dengan melihat gambar 4.54 kita dapat menghitung waktu
tunggu masing-masing proses, sebagai berikut:
Waktu (slot time) tunggu P1 = 0
Waktu (slot time) tunggu P2 = 42
Waktu (slot time) tunggu P3 = 36
Waktu (slot time) tunggu P4 = 27
Waktu (slot time) tunggu P5 = 11
Dengan menggunakan rumus AWT = ∑ A𝑖𝑛𝑖=1𝑛
dapat dihitung
119
AWT dari algoritma Priority Nonpreemtive untuk data IV
dimana Ai adalah waktu tunggu untuk P ke-I dan n adalah
jumlah proses.
AWT = (0 + 42 + 36 + 27 + 11) / 5 = 23.2 (slot time)
Jadi dari perhitungan diatas diperoleh nilai AWT Priority
Nonpreemtive untuk data IV adalah 23.2.
Dari gambar 4.54 juga dapat diketahui waktu selesai per
proses, sebagai berikut:
Waktu (slot time) selesai P1 = 16
Waktu (slot time) selesai P2 = 54
Waktu (slot time) selesai P3 = 44
Waktu (slot time) selesai P4 = 39
Waktu (slot time) selesai P5 = 31
Dengan menggunakan rumus waktu rata-rata selesai semua
proses = ∑ X𝑖𝑛𝑖=1𝑛
dapat dihitung waktu rata-rata selesai
semua proses algoritma Priority Nonpreemtive untuk data IV,
dimana Xi adalah waktu tunggu untuk P ke-I dan n adalah
jumlah proses.
waktu rata-rata selesai semua proses = (16 + 54 + 44 + 39 +
31) / 5 = 36.8 (slot time)
Jadi dari perhitungan diatas diperoleh nilai waktu rata-rata
selesai semua proses akgoritma Priority Nonpreemtive untuk
data IV adalah 36.8.
120
4.4.4.6 Sampel data IV pada algoritma Priority Preemtive
Dengan data yang diinputkan seperti tabel 4.4 di atas maka
diperoleh tampilan simulasi untuk algoritma Priority
Preemtive, sebagai berikut:
Gambar 4.55 Visualisasi data IV Algoritma Priority
Preemtive
Dengan melihat gambar 4.55 kita dapat menghitung waktu
tunggu masing-masing proses, sebagai berikut:
Waktu (slot time) tunggu P1 = 38
Waktu (slot time) tunggu P2 = 28
Waktu (slot time) tunggu P3 = 23
Waktu (slot time) tunggu P4 = 15
Waktu (slot time) tunggu P5 = 0
Dengan menggunakan rumus AWT = ∑ A𝑖𝑛𝑖=1𝑛
dapat dihitung
121
AWT dari algoritma Priority Preemtive untuk data IV dimana
Ai adalah waktu tunggu untuk P ke-I dan n adalah jumlah
proses.
AWT = (38 + 28 + 23 + 15 + 0) / 5 = 20.8 (slot time)
Jadi dari perhitungan diatas diperoleh nilai AWT Priority
Preemtive untuk data IV adalah 20.8.
Dari gambar 4.55 juga dapat diketahui waktu selesai per
proses, sebagai berikut:
Waktu (slot time) selesai P1 = 54
Waktu (slot time) selesai P2 = 40
Waktu (slot time) selesai P3 = 31
Waktu (slot time) selesai P4 = 27
Waktu (slot time) selesai P5 = 20
Dengan menggunakan rumus waktu rata-rata selesai semua
proses = ∑ X𝑖𝑛𝑖=1𝑛
dapat dihitung waktu rata-rata selesai
semua proses algoritma Priority Preemtive untuk data IV,
dimana Xi adalah waktu tunggu untuk P ke-I dan n adalah
jumlah proses.
waktu rata-rata selesai semua proses = (54 + 40 + 31 + 27 +
20) / 5 = 34.4 (slot time)
Jadi dari perhitungan diatas diperoleh nilai waktu rata-rata
selesai semua proses akgoritma Priority Preemtive untuk data
IV adalah 34.4.
122
4.4.5 Sampel Data V
Tabel 4.5 Data V
Nama
Proses
Saat
Tiba
Lama
Proses
Prioritas
(Hanya untuk Priority)
P1 5 15 1
P2 4 10 2
P3 3 5 3
P4 2 8 4
P5 1 15 5
4.4.5.1 Sampel data V pada algoritma FCFS
Dengan data yang diinputkan seperti tabel 4.5 di atas maka
diperoleh tampilan simulasi untuk algoritma FCFS, sebagai
berikut:
123
Gambar 4.56 Visualisasi data V Algoritma FCFS
Dengan melihat gambar 4.56 kita dapat menghitung waktu
tunggu masing-masing proses, sebagai berikut:
Waktu (slot time) tunggu P1 = 34
Waktu (slot time) tunggu P2 = 25
Waktu (slot time) tunggu P3 = 21
Waktu (slot time) tunggu P4 = 14
Waktu (slot time) tunggu P5 = 0
Dengan menggunakan rumus AWT = ∑ A𝑖𝑛𝑖=1𝑛
dapat dihitung
AWT dari algoritma FCFS untuk data V dimana Ai adalah
waktu tunggu untuk P ke-I dan n adalah jumlah proses.
AWT = (34 + 25 + 21 + 14 + 0) / 5 = 18.8 (slot time)
124
Jadi dari perhitungan diatas diperoleh nilai AWT FCFS untuk
data V adalah 18.8.
Dari gambar 4.56 juga dapat diketahui waktu selesai per
proses, sebagai berikut:
Waktu (slot time) selesai P1 = 54
Waktu (slot time) selesai P2 = 39
Waktu (slot time) selesai P3 = 29
Waktu (slot time) selesai P4 = 24
Waktu (slot time) selesai P5 = 16
Dengan menggunakan rumus waktu rata-rata selesai semua
proses = ∑ X𝑖𝑛𝑖=1𝑛
dapat dihitung waktu rata-rata selesai
semua proses algoritma FCFS untuk data V, dimana Xi adalah
waktu tunggu untuk P ke-I dan n adalah jumlah proses.
waktu rata-rata selesai semua proses = (54 + 39 + 29 + 24 +
16) / 5 = 32.4 (slot time)
Jadi dari perhitungan diatas diperoleh nilai waktu rata-rata
selesai semua proses akgoritma FCFS untuk data V adalah
32.4.
125
4.4.5.2 Sampel data V pada algoritma SJF Nonpreemtive
Dengan data yang diinputkan seperti tabel 4.5 di atas maka
diperoleh tampilan simulasi untuk algoritma SJF
Nonpreemtive, sebagai berikut:
Gambar 4.57 Visualisasi data V Algoritma SJF
Nonpreemtive
Dengan melihat gambar 4.57 kita dapat menghitung waktu
tunggu masing-masing proses, sebagai berikut:
Waktu (slot time) tunggu P1 = 34
Waktu (slot time) tunggu P2 = 25
Waktu (slot time) tunggu P3 = 13
Waktu (slot time) tunggu P4 = 19
Waktu (slot time) tunggu P5 = 0
Dengan menggunakan rumus AWT = ∑ A𝑖𝑛𝑖=1𝑛
dapat dihitung
126
AWT dari algoritma SJF Nonpreemtive untuk data V dimana
Ai adalah waktu tunggu untuk P ke-I dan n adalah jumlah
proses.
AWT = (34 + 25 + 21 + 14 + 0) / 5 = 18.2 (slot time)
Jadi dari perhitungan diatas diperoleh nilai AWT SJF
Nonpreemtive untuk data V adalah 18.2.
Dari gambar 4.57 juga dapat diketahui waktu selesai per
proses, sebagai berikut:
Waktu (slot time) selesai P1 = 54
Waktu (slot time) selesai P2 = 39
Waktu (slot time) selesai P3 = 21
Waktu (slot time) selesai P4 = 29
Waktu (slot time) selesai P5 = 16
Dengan menggunakan rumus waktu rata-rata selesai semua
proses = ∑ X𝑖𝑛𝑖=1𝑛
dapat dihitung waktu rata-rata selesai
semua proses algoritma SJF Nonpreemtive untuk data V,
dimana Xi adalah waktu tunggu untuk P ke-I dan n adalah
jumlah proses.
waktu rata-rata selesai semua proses = (54 + 39 + 21 + 29 +
16) / 5 = 31.8 (slot time)
Jadi dari perhitungan diatas diperoleh nilai waktu rata-rata
selesai semua proses akgoritma SJF Nonpreemtive untuk data
V adalah 31.8.
127
4.4.5.3 Sampel data V pada algoritma SJF Preemtive
Dengan data yang diinputkan seperti tabel 4.5 di atas maka
diperoleh tampilan simulasi untuk algoritma SJF Preemtive,
sebagai berikut:
Gambar 4.58 Visualisasi data V Algoritma SJF Preemtive
Dengan melihat gambar 4.58 kita dapat menghitung waktu
tunggu masing-masing proses, sebagai berikut:
Waktu (slot time) tunggu P1 = 34
Waktu (slot time) tunggu P2 = 11
Waktu (slot time) tunggu P3 = 0
Waktu (slot time) tunggu P4 = 5
Waktu (slot time) tunggu P5 = 23
Dengan menggunakan rumus AWT = ∑ A𝑖𝑛𝑖=1𝑛
dapat dihitung
AWT dari algoritma SJF Preemtive untuk data V dimana Ai
128
adalah waktu tunggu untuk P ke-I dan n adalah jumlah proses.
AWT = (34 + 11 + 0 + 5 + 23) / 5 = 14.6 (slot time)
Jadi dari perhitungan diatas diperoleh nilai AWT SJF
Preemtive untuk data V adalah 14.6.
Dari gambar 4.58 juga dapat diketahui waktu selesai per
proses, sebagai berikut:
Waktu (slot time) selesai P1 = 54
Waktu (slot time) selesai P2 = 25
Waktu (slot time) selesai P3 = 8
Waktu (slot time) selesai P4 = 15
Waktu (slot time) selesai P5 = 39
Dengan menggunakan rumus waktu rata-rata selesai semua
proses = ∑ X𝑖𝑛𝑖=1𝑛
dapat dihitung waktu rata-rata selesai
semua proses algoritma SJF Preemtive untuk data V, dimana
Xi adalah waktu tunggu untuk P ke-I dan n adalah jumlah
proses.
waktu rata-rata selesai semua proses = (54 + 25 + 8 + 15 + 39)
/ 5 = 28.2 (slot time)
Jadi dari perhitungan diatas diperoleh nilai waktu rata-rata
selesai semua proses akgoritma SJF Preemtive untuk data V
adalah 28.2.
129
4.4.5.4 Sampel data V pada algoritma RR
Dengan data yang diinputkan seperti tabel 4.5 di atas maka
diperoleh tampilan simulasi untuk algoritma RR, sebagai
berikut:
Gambar 4.59 Visualisasi data V Algoritma RR
Dengan melihat gambar 4.59 kita dapat menghitung waktu
tunggu masing-masing proses, sebagai berikut:
Waktu (slot time) tunggu P1 = 34
Waktu (slot time) tunggu P2 = 31
Waktu (slot time) tunggu P3 = 16
Waktu (slot time) tunggu P4 = 31
Waktu (slot time) tunggu P5 = 35
Dengan menggunakan rumus AWT = ∑ A𝑖𝑛𝑖=1𝑛
dapat dihitung
130
AWT dari algoritma RR untuk data V dimana Ai adalah waktu
tunggu untuk P ke-I dan n adalah jumlah proses.
AWT = (34 + 31 + 16 + 31 + 35) / 5 = 28.2 (slot time)
Jadi dari perhitungan diatas diperoleh nilai AWT RR untuk
data V adalah 28.2.
Dari gambar 4.59 juga dapat diketahui waktu selesai per
proses, sebagai berikut:
Waktu (slot time) selesai P1 = 54
Waktu (slot time) selesai P2 = 45
Waktu (slot time) selesai P3 = 24
Waktu (slot time) selesai P4 = 35
Waktu (slot time) selesai P5 = 51
Dengan menggunakan rumus waktu rata-rata selesai semua
proses = ∑ X𝑖𝑛𝑖=1𝑛
dapat dihitung waktu rata-rata selesai
semua proses algoritma RR untuk data V, dimana Xi adalah
waktu tunggu untuk P ke-I dan n adalah jumlah proses.
waktu rata-rata selesai semua proses = (54 + 45 + 24 + 35 +
51) / 5 = 41.8 (slot time)
Jadi dari perhitungan diatas diperoleh nilai waktu rata-rata
selesai semua proses akgoritma RR untuk data V adalah 41.8.
131
4.4.5.5 Sampel data V pada algoritma Priority Nonpreemtive
Dengan data yang diinputkan seperti tabel 4.5 di atas maka
diperoleh tampilan simulasi untuk algoritma Priority
Nonpreemtive, sebagai berikut:
Gambar 4.60 Visualisasi data V Algoritma Priority
Nonpreemtive
Dengan melihat gambar 4.60 kita dapat menghitung waktu
tunggu masing-masing proses, sebagai berikut:
Waktu (slot time) tunggu P1 = 11
Waktu (slot time) tunggu P2 = 27
Waktu (slot time) tunggu P3 = 28
Waktu (slot time) tunggu P4 = 44
Waktu (slot time) tunggu P5 = 0
Dengan menggunakan rumus AWT = ∑ A𝑖𝑛𝑖=1𝑛
dapat dihitung
132
AWT dari algoritma Priority Nonpreemtive untuk data V
dimana Ai adalah waktu tunggu untuk P ke-I dan n adalah
jumlah proses.
AWT = (11 + 27 + 28 + 44 + 0) / 5 = 24 (slot time)
Jadi dari perhitungan diatas diperoleh nilai AWT Priority
Nonpreemtive untuk data V adalah 24.
Dari gambar 4.60 juga dapat diketahui waktu selesai per
proses, sebagai berikut:
Waktu (slot time) selesai P1 = 31
Waktu (slot time) selesai P2 = 41
Waktu (slot time) selesai P3 = 46
Waktu (slot time) selesai P4 = 54
Waktu (slot time) selesai P5 = 16
Dengan menggunakan rumus waktu rata-rata selesai semua
proses = ∑ X𝑖𝑛𝑖=1𝑛
dapat dihitung waktu rata-rata selesai
semua proses algoritma Priority Nonpreemtive untuk data V,
dimana Xi adalah waktu tunggu untuk P ke-I dan n adalah
jumlah proses.
waktu rata-rata selesai semua proses = (31 + 41 + 46 + 54 +
16) / 5 = 37.6 (slot time)
Jadi dari perhitungan diatas diperoleh nilai waktu rata-rata
selesai semua proses akgoritma Priority Nonpreemtive untuk
data V adalah 37.6.
133
4.4.5.6 Sampel data V pada algoritma Priority Preemtive
Dengan data yang diinputkan seperti tabel 4.5 di atas maka
diperoleh tampilan simulasi untuk algoritma Priority
Preemtive, sebagai berikut:
Gambar 4.61 Visualisasi data V Algoritma Priority
Preemtive
Dengan melihat gambar 4.61 kita dapat menghitung waktu
tunggu masing-masing proses, sebagai berikut:
Waktu (slot time) tunggu P1 = 0
Waktu (slot time) tunggu P2 = 15
Waktu (slot time) tunggu P3 = 25
Waktu (slot time) tunggu P4 = 30
Waktu (slot time) tunggu P5 = 38
Dengan menggunakan rumus AWT = ∑ A𝑖𝑛𝑖=1𝑛
dapat dihitung
134
AWT dari algoritma Priority Preemtive untuk data V dimana
Ai adalah waktu tunggu untuk P ke-I dan n adalah jumlah
proses.
AWT = (0 + 15 + 25 + 30 + 38) / 5 = 21.6 (slot time)
Jadi dari perhitungan diatas diperoleh nilai AWT Priority
Preemtive untuk data V adalah 21.6.
Dari gambar 4.61 juga dapat diketahui waktu selesai per
proses, sebagai berikut:
Waktu (slot time) selesai P1 = 20
Waktu (slot time) selesai P2 = 29
Waktu (slot time) selesai P3 = 33
Waktu (slot time) selesai P4 = 40
Waktu (slot time) selesai P5 = 54
Dengan menggunakan rumus waktu rata-rata selesai semua
proses = ∑ X𝑖𝑛𝑖=1𝑛
dapat dihitung waktu rata-rata selesai
semua proses algoritma Priority Preemtive untuk data V,
dimana Xi adalah waktu tunggu untuk P ke-I dan n adalah
jumlah proses.
waktu rata-rata selesai semua proses = (20 + 29 + 33 + 40 +
54) / 5 = 35.2 (slot time)
Jadi dari perhitungan diatas diperoleh nilai waktu rata-rata
selesai semua proses akgoritma Priority Preemtive untuk data
V adalah 35.2.
135
Perhatikan table di bawah ini yang menunjukkan nilai Average Waiting
Time (AWT) yang dihasilkan dari keenam algoritma tersebut jika data yang
digunakna sama.
Tabel 4.6 Perbandingan Nilai Average Waiting Time (AWT)
Sampel Data Data I Data II Data III Data IV Data V
AWT
FCFS 4 8 21.6 19.6 18.8
AWT
SJF Nonpreemtive 4 4 15.8 18.2 18.2
AWT
SJF Preemtive 4 4 15.8 14.8 14.6
AWT
RR 6 8 30.6 28.6 28.2
AWT
Priority Nonpreemtive 4 8 16.4 23.2 24
AWT
Priority Preemtive 4 8 16.4 20.8 21.6
Dengan melihat tabel 4.6 dapat disimpulkan bahwa algoritma SJF
Preemtive menghasilkan solusi yang optimal, yaitu nilai AWT yang minimum
dibandingkan dengan algoritma yang lain. Efisiensi untuk algoritma SJF
Preemtive juga tinggi karena CPU selalu dalam keadan sibuk.
136
Perhatikan table di bawah ini yang menunjukkan nilai waktu rata-rata
selesai semua proses yang dihasilkan dari keenam algoritma tersebut jika data
yang digunakna sama.
Tabel 4.7 Perbandingan nilai waktu rata-rata selesai semua proses
Sampel Data Data I Data II Data III Data IV Data V
AWT
FCFS 7 11 32.2 33.2 32.4
AWT
SJF Nonpreemtive 7 7 27.8 33.8 31.8
AWT
SJF Preemtive 7 7 27.8 28.4 28.2
AWT
RR 9 11 41.2 42.2 41.8
AWT
Priority Nonpreemtive 7 11 27 36.8 37.6
AWT
Priority Preemtive 7 11 27 34.4 35.2
Dengan melihat tabel 4.7 dapat disimpulkan bahwa algoritma SJF
Preemtive menghasilkan solusi yang optimal, yaitu nilai waktu rata-rata selesai
semua proses yang minimum dibandingkan dengan algoritma yang lain.
137
Jadi dapat disimpulkan bahwa untuk mencapai optimalisasi kinerja
CPU dibutuhkan beberapa criteria penjadwalan, antara lain:
1. Efisinesi : yaitu menjaga agar CPU tetap dalam keadaan sibuk sehingga
efisinesi mencapai maksimal. Pada algoritma SJF Preemtive selalu dalam
keadaan sibuk sehingga efisiensinya tinggi.
2. Waktu penyelesaian (turn around time) : yaitu waktu yang dihabiskan dari
saat proses mulai masuk ke sistem sampai proses diselesaikan sistem. Pada
algoritma SJF Preemtive nilai waktu rata-rata selesai semua proses yang
dihasilkan paling minimum dibandingkan dengan algoritma yang lain, jadi
turn around time-nya tinggi.
3. Penyampaian hasil kerja (throughput) : jumlah kerja yang dapat
diselesaikan dalam satu unit waktu. Semakin banyak pekerjaan yang
mampu diselesaikan oleh proses pada suatu unit waktu maka nilainya akan
semakin baik pula. Pada algoritma SJF Preemtive throughput bagus karena
proses dengan lama proses yang kecil akan dieksekusi terlebih dahulu,
sehingga meminimalkan waktu tunggu bagi proses-proses lain.
4. Waktu tunggu (waiting time) : adalah waktu yang dihabiskan oleh suatu
proses untuk dapat menggunakan alokasi CPU agar proses dapat dijalankan
atau dieksekusi. Pada SJF Preemtive nilai AWT yang dihasilkan paling
minim0um.
138
BAB V
PENUTUP
5.1 Kesimpulan
Dari hasil analisa, desain, dan implementasi yang telah dilakukan maka
dapat diambil kesimpulan sebagai berikut ini:
1. Aplikasi simulasi algoritma penjadwalan, yaitu: first come first served,
shortest job first non-preemtive, shortest job first preemtive, round robin,
priority non-preemtive dan priority preemtive ini dapat diimplementasikan
dengan menggunakan macromedia flash 8.
2. Penggunaan metodologi prototype membantu dalam membangun aplikasi
simulasi algoritma penjadwalan ini.
3. Setelah dicoba pada beberapa pengguna, aplikasi ini membantu pengguna
untuk mengetahui proses berjalannya suatu algoritma penjadwalan.
5.2 Saran
Saran yang dapat diberikan agar aplikasi ini dapat dibuat lebih baik lagi
adalah sebagai berikut:
1. Tampilan untuk aplikasi dapat dibuat lebih menarik sehingga meningkatkan
minat mahasiswa untuk terus mendalami algoritma penjadwalan tersebut.
139
2. Aplikasi simulasi ini masih terbatas dengan banyaknya jumlah algoritma
penjadwalan. Jadi dapat ditambahkan lagi dengan algoritma penjadwalan
yang lain, seperti algoritma Highest Ration Next (HRN), Guaranteed
Schedulling (GS), Multiple Queues, dan Multiple Feedback Queues.
140
DAFTAR PUSTAKA
Binanto, Iwan. 2005. Sistem Operasi. Yogyakarta: Andi Offset.
Herlambang, Ferry. 2007. Membuat Efek Khusus dengan Action Script 2.0 Flash
8. Jakarta: PT Elex Media Komputindo.
Hoover,S.V, Perry,R.F. 1989. Simulation A Problem Solving Approach. New
York : Addison-Weslay Publishing Company, Inc.
Jogianto. 1999. Pengenalan Komputer. Yogyakarta: Andi
Kusumadewi, Sri. Sstem Operasi, Edisi I, Yogyakarta : J&J Learning. 2000
Naga, Dali. 1996 . Sistem Operasi Komputer. Jakarta: Gunadarma
Nugroho, Hery Setiawan. 2009. Metode prototype.
(http://herysetiawanugroho.blogspot.com/2009/03/metode-prototipe.html,
diakses tanggal 3 Juli 2010)
Philipus, Erwin. 2007. 20 Teknik Flash Master untuk Macromedia Flash MX dan
Flash Profesional 8. Yogyakarta: Andi Offset.
Pressman, Roger. 1997. Rekayasa Perangkat Lunak pendekatan praktisi (Buku
Satu). Yogyakarta: Andi Offset.
Suryadi, Kadarsih & Ramdhani, Ali. 1998. Sistem Pendukung Keputusan.
Bandung: PT Remaja Rosdakarya.
Tim Divisi Penelitian dan Pengembangan. 2006. Mahir dalam 7 Hari:
Macromedia Flash Pro 8. Yogyakarta: Andi, Madiun: Madcoms.
141
LAMPIRAN
Listing Program
Berikut ini ditampilkan beberapa listing yang digunakan untuk
implementasi aplikasi ini.
Listing Pada File Final Menu Layer fungsi tgl n jam
stop (); var days = new Array("Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jum'at", "Sabtu"); var months = new Array("Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"); watch.onEnterFrame = function () { var _loc2 = new Date(); this.date = days[_loc2.getDay()] + ", " + _loc2.getDate() + " " + months[_loc2.getMonth()] + " " + _loc2.getFullYear(); this.hour = _loc2.getHours(); this.minute = _loc2.getMinutes(); this.second = _loc2.getSeconds(); if (this.second < 10) { this.second = "0" + this.second; } // end if if (this.minute < 10) { this.minute = "0" + this.minute; } // end if if (this.hour < 10) { this.hour = "0" + this.hour; } // end if };
Listing Pada File Final Menu Layer fungsi menu Frame 1 stop(); Listing Pada File Final Menu Layer fungsi menu Frame 2 unloadMovie(1); stop(); menu_bar_materi._visible = false; menu_bar_materi.algo_btn.onRollOver = function() { menu_bar_materi._visible = true; }; menu_bar_materi.algo_btn.onRollOut = function() { menu_bar_materi._visible = false;
142
}; menu_bar_materi.fcfs_btn.onRollOver = function() { menu_bar_materi._visible = true; }; menu_bar_materi.fcfs_btn.onRollOut = function() { menu_bar_materi._visible = false; }; menu_bar_materi.sjf_btn.onRollOver = function() { menu_bar_materi._visible = true; }; menu_bar_materi.sjf_btn.onRollOut = function() { menu_bar_materi._visible = false; }; menu_bar_materi.rr_btn.onRollOver = function() { menu_bar_materi._visible = true; }; menu_bar_materi.rr_btn.onRollOut = function() { menu_bar_materi._visible = false; }; menu_bar_materi.prio_btn.onRollOver = function() { menu_bar_materi._visible = true; }; menu_bar_materi.prio_btn.onRollOut = function() { menu_bar_materi._visible = false; }; menu_bar_materi.duatingkat_btn.onRollOver = function() { menu_bar_materi._visible = true; }; menu_bar_materi.duatingkat_btn.onRollOut = function() { menu_bar_materi._visible = false; }; menu_bar_simulasi._visible = false; menu_bar_simulasi.simulasi_1.onRollOver = function() { menu_bar_simulasi._visible = true; }; menu_bar_simulasi.simulasi_1.onRollOut = function() { menu_bar_simulasi._visible = false; }; menu_bar_simulasi.simulasi_2.onRollOver = function() { menu_bar_simulasi._visible = true; }; menu_bar_simulasi.simulasi_2.onRollOut = function() { menu_bar_simulasi._visible = false; };
Listing Pada File Final Menu Layer fungsi menu Tombol Menu Utama on (press) { gotoAndStop(2); } Listing Pada File Final Menu Layer fungsi menu Tombol Keluar on (press) { fscommand('quit', ""); }
143
Listing Pada File Final Menu Layer fungsi menu Tombol Materi on (release) { menu_bar_materi._visible = true; menu_bar_simulasi._visible = false; } Listing Pada File Final Menu Layer fungsi menu Tombol Simulasi on (release) { gotoAndStop(8); } Listing Pada File Final Menu Layer fungsi menu Tombol Bantuan on (press) { if (_root.about == undefined) { dep = _root.getNextHighestDepth(); duplicateMovieClip(_root.bantuan, 'about', dep+1); _root.about._x = 160; _root.about._y = 120; } else { dep = _root.getNextHighestDepth(); _root.about.swapDepths(_root.getInstanceAtDepth(dep-1)); } } Listing Pada File Final SO Layer deklarasi var speed = 1; var trace_click = false; var AT:Array = new Array(); var ST:Array = new Array(); var FT:Array = new Array(); var WT:Array = new Array(); var TAT:Array = new Array(); var StartWait:Array = new Array(); var FinishWait:Array = new Array(); var StartProc:Array = new Array(); var FinishProc:Array = new Array(); var awt; var gambar_is_open = false; var array_hasil:Array = new Array(); var array:Array = new Array(); var array2:Array = new Array(); var rec_array_hasil:Array = new Array(); var array_id:Array = new Array(); var array_temp:Array = new Array(); function FCFS(tiba:Array, bust:Array, k:Number) { var sum = 0; FT[0] = AT[0]+ST[0]; StartWait[0] = 0; FinishWait[0] = 0; StartProc[0] = AT[0]; FinishProc[0] = AT[0]+ST[0]; for (var i = 0; i<k; i++) { if (i == 0) {
144
WT[i] = 0; } else { if (FT[i-1]<AT[i]) { FT[i] = AT[i]+ST[i]; WT[i] = 0; StartWait[i] = 0; FinishWait[i] = 0; StartProc[i] = AT[i]; FinishProc[i] = AT[i]+ST[i]; } else { FT[i] = FT[i-1]+ST[i]; WT[i] = FT[i-1]-AT[i]; StartWait[i] = AT[i]; FinishWait[i] = FT[i-1]; if (StartWait[i] == StartWait[i]) { } StartProc[i] = FT[i-1]; FinishProc[i] = FT[i-1]+ST[i]; } } sum = sum+WT[i]; } return sum/k; } function diagram_waktu_kedatangan() { for (var i = 0; i<_root.input_proses.text; i++) { _root['name'+(i+1)+'_diagram'].text = "P"+(i+1); _root['p'+(i+1)+'_diagram']._x = (_root.proses[i].saattiba*10)+31; _root['p'+(i+1)+'_diagram']._width = _root.proses[i].lamaproses*10; } } function reset_diagram_waktu_kedatangan() { for (var i = 0; i<5; i++) { _root['name'+(i+1)+'_diagram'].text = ""; _root['p'+(i+1)+'_diagram']._x = 0.9; _root['p'+(i+1)+'_diagram']._width = 0; } } function bubblesort_tiba() { var temp:Number; for (var i = 0; i<rec_array.length; i++) { for (var j = 0; j<rec_array.length-1; j++) { if (Number(rec_array[j].tiba)>Number(rec_array[j+1].tiba)) { temp = rec_array[j]; rec_array[j] = rec_array[j+1]; rec_array[j+1] = temp; } } } } function bubblesort_temp_tiba() { for (var i = 0; i<rec_array_temp.length; i++) { for (var j = 0; j<rec_array_temp.length-1; j++) {
145
if (Number(rec_array_temp[j].tiba)<Number(rec_array_temp[j+1].tiba)) { temp = rec_array_temp[j]; rec_array_temp[j] = rec_array_temp[j+1]; rec_array_temp[j+1] = temp; } } } } function bubblesort_temp_eksekusi() { for (var i = 0; i<rec_array_temp.length; i++) { for (var j = 0; j<rec_array_temp.length-1; j++) { if (Number(rec_array_temp[j].eksekusi)<Number(rec_array_temp[j+1].eksekusi)) { temp = rec_array_temp[j]; rec_array_temp[j] = rec_array_temp[j+1]; rec_array_temp[j+1] = temp; } } } } function bubblesort_temp_sisa_tiba() { var temp:Number; for (var i = 0; i<rec_array_temp_sisa.length; i++) { for (var j = 0; j<rec_array_temp_sisa.length-1; j++) { if (Number(rec_array_temp_sisa[j].tiba)>Number(rec_array_temp_sisa[j+1].tiba)) { temp = rec_array_temp_sisa[j]; rec_array_temp_sisa[j] = rec_array_temp_sisa[j+1]; rec_array_temp_sisa[j+1] = temp; } } } } function bubblesort_temp_sisa_eksekusi() { var temp:Number; for (var i = 0; i<rec_array_temp_sisa.length; i++) { for (var j = 0; j<rec_array_temp_sisa.length-1; j++) { if (Number(rec_array_temp_sisa[j].eksekusi)<Number(rec_array_temp_sisa[j+1].eksekusi)) { temp = rec_array_temp_sisa[j]; rec_array_temp_sisa[j] = rec_array_temp_sisa[j+1]; rec_array_temp_sisa[j+1] = temp; } } } } function cek_tiba_sama() { for (var i = 0; i<rec_array.length; i++) { for (var j = 0; j<rec_array.length; j++) {
146
if (rec_array[i].tiba != rec_array[j].tiba && i != j) { return "Tiba --> ada BEDA"; } } } return "Tiba --> semuanya SAMA"; } function bubblesort_tiba() { var temp:Number; for (var i = 0; i<rec_array.length; i++) { for (var j = 0; j<rec_array.length-1; j++) { if (Number(rec_array[j].tiba)>Number(rec_array[j+1].tiba)) { temp = rec_array[j]; rec_array[j] = rec_array[j+1]; rec_array[j+1] = temp; } } } } function bubblesort_prioritas() { var temp:Number; for (var i = 0; i<rec_array.length; i++) { for (var j = 0; j<rec_array.length-1; j++) { if (Number(rec_array[j].prioritas)>Number(rec_array[j+1].prioritas)) { temp = rec_array[j]; rec_array[j] = rec_array[j+1]; rec_array[j+1] = temp; } } } } function bubblesort_temp_prioritas() { var temp:Number; for (var i = 0; i<rec_array_temp.length; i++) { for (var j = 0; j<rec_array_temp.length-1; j++) { if (Number(rec_array_temp[j].prioritas)<Number(rec_array_temp[j+1].prioritas)) { temp = rec_array_temp[j]; rec_array_temp[j] = rec_array_temp[j+1]; rec_array_temp[j+1] = temp; } } } } function bubblesort_temp_prioritas2() { var temp:Number; for (var i = 0; i<rec_array.length; i++) { for (var j = 0; j<rec_array.length-1; j++) { if (Number(rec_array[j].prioritas)<Number(rec_array[j+1].prioritas)) {
147
temp = rec_array[j]; rec_array[j] = rec_array[j+1]; rec_array[j+1] = temp; } } } } Listing Pada File Final SO Layer FCFS function algo_fcfs() { proses.sortOn("saattiba", Array.NUMERIC); for (var i = 0; i<input_proses.text; i++) { AT[i] = (proses[i].saattiba); ST[i] = (proses[i].lamaproses); } awt = FCFS(AT, ST, input_proses.text); if (cari1(1) == true) { array_proses0.push({nama:rec_array_hasil[0].nama, mulai:StartProc[0], selesai:FinishProc[0]}); duplicateMovieClip(p0, 'p0_'+0, this.getNextHighestDepth()); var my_color1_FCFS:Color = new Color(this['p0_'+0]); my_color1_FCFS.setRGB(proses[0].warna); this['p0_'+0]._x = ((array_proses0[0].mulai)*10)+31; this['p0_'+0]._width = (array_proses0[0].selesai-array_proses0[0].mulai)*10; duplicateMovieClip(wait0, 'wait0_'+0, this.getNextHighestDepth()); this['wait0_'+0]._x = ((array_tunggu0[0].selesai)*10)+31; this['wait0_'+0]._width = (array_tunggu0[0].selesai-array_tunggu0[0].mulai)*10; } if (cari1(2) == true) { array_proses1.push({nama:rec_array_hasil[1].nama, mulai:StartProc[1], selesai:FinishProc[1]}); if (FinishWait[1] != 0) { array_tunggu1.push({mulai:StartWait[1], selesai:FinishWait[1]}); } if (array_proses1[0].mulai<proses[1].saattiba) { array_proses1[0].mulai = proses[1].saattiba; } duplicateMovieClip(p1, 'p1_0', this.getNextHighestDepth()); var my_color2_FCFS:Color = new Color(this['p1_0']); my_color2_FCFS.setRGB(proses[1].warna); this['p1_0']._x = ((array_proses1[0].mulai)*10)+31; this['p1_0']._width = (FinishProc[1]-StartProc[1])*10; duplicateMovieClip(wait1, 'wait1_1', this.getNextHighestDepth()); this['wait1_1']._x = ((array_tunggu1[0].mulai)*10)+31; this['wait1_1']._width = (array_tunggu1[0].selesai-array_tunggu1[0].mulai)*10; }
148
if (cari1(3) == true) { array_proses2.push({nama:rec_array_hasil[2].nama, mulai:StartProc[2], selesai:FinishProc[2]}); if (FinishWait[2] != 0) { array_tunggu2.push({mulai:StartWait[2], selesai:FinishWait[2]}); } if (array_proses2[0].mulai<proses[2].saattiba) { array_proses2[0].mulai = proses[2].saattiba; } duplicateMovieClip(p2, 'p2_'+2, this.getNextHighestDepth()); var my_color3_FCFS:Color = new Color(this['p2_'+2]); my_color3_FCFS.setRGB(proses[2].warna); this['p2_'+2]._x = ((array_proses2[0].mulai)*10)+31; this['p2_'+2]._width = (array_proses2[0].selesai-array_proses2[0].mulai)*10; duplicateMovieClip(wait2, 'wait2_'+2, this.getNextHighestDepth()); this['wait2_'+2]._x = ((array_tunggu2[0].mulai)*10)+31; this['wait2_'+2]._width = (array_tunggu2[0].selesai-array_tunggu2[0].mulai)*10; } if (cari1(4) == true) { array_proses3.push({nama:rec_array_hasil[3].nama, mulai:StartProc[3], selesai:FinishProc[3]}); if (FinishWait[3] != 0) { array_tunggu3.push({mulai:StartWait[3], selesai:FinishWait[3]}); } if (array_proses3[0].mulai<proses[3].saattiba) { array_proses3[0].mulai = proses[3].saattiba; } duplicateMovieClip(p3, 'p3_'+3, this.getNextHighestDepth()); var my_color4_FCFS:Color = new Color(this['p3_'+3]); my_color4_FCFS.setRGB(proses[3].warna); this['p3_'+3]._x = ((array_proses3[0].mulai)*10)+31; this['p3_'+3]._width = (array_proses3[0].selesai-array_proses3[0].mulai)*10; duplicateMovieClip(wait3, 'wait3_'+3, this.getNextHighestDepth()); this['wait3_'+3]._x = ((array_tunggu3[0].mulai)*10)+31; this['wait3_'+3]._width = (array_tunggu3[0].selesai-array_tunggu3[0].mulai)*10; } if (cari1(5) == true) { array_proses4.push({nama:rec_array_hasil[4].nama, mulai:StartProc[4], selesai:FinishProc[4]}); if (FinishWait[4] != 0) { array_tunggu4.push({mulai:StartWait[4], selesai:FinishWait[4]}); } if (array_proses4[0].mulai<proses[4].saattiba) {
149
array_proses4[0].mulai = proses[4].saattiba; } duplicateMovieClip(p4, 'p4_'+4, this.getNextHighestDepth()); var my_color5_FCFS:Color = new Color(this['p4_'+4]); my_color5_FCFS.setRGB(proses[4].warna); this['p4_'+4]._x = ((array_proses4[0].mulai)*10)+31; this['p4_'+4]._width = (array_proses4[0].selesai-array_proses4[0].mulai)*10; duplicateMovieClip(wait4, 'wait4_'+4, this.getNextHighestDepth()); this['wait4_'+4]._x = ((array_tunggu4[0].mulai)*10)+31; this['wait4_'+4]._width = (array_tunggu4[0].selesai-array_tunggu4[0].mulai)*10; } for (var i = 0; i<input_proses.text; i++) { _root['name'+(i+1)].text = proses[i].name; } for (var i = 0; i<input_proses.text; i++) { _root['name_p'+(i+1)].text = proses[i].name; } for (var i = 0; i<array_proses0.length; i++) { if (array_proses0[i].selesai>panjang_proses) { panjang_proses = array_proses0[i].selesai; } } for (var i = 0; i<array_proses1.length; i++) { if (array_proses1[i].selesai>panjang_proses) { panjang_proses = array_proses1[i].selesai; } } for (var i = 0; i<array_proses2.length; i++) { if (array_proses2[i].selesai>panjang_proses) { panjang_proses = array_proses2[i].selesai; } } for (var i = 0; i<array_proses3.length; i++) { if (array_proses3[i].selesai>panjang_proses) { panjang_proses = array_proses3[i].selesai; } } for (var i = 0; i<array_proses4.length; i++) { if (array_proses4[i].selesai>panjang_proses) { panjang_proses = array_proses4[i].selesai; } } start_1 = true; duplicateMovieClip(kotak, 'kotak_i', this.getNextHighestDepth()); this['kotak_i']._y = 374; duplicateMovieClip(garis, 'garis_i', this.getNextHighestDepth()); this['garis_i']._y = 374; _root.createEmptyMovieClip('animasi', this.getNextHighestDepth());
150
_root.animasi.attachMovie('ball_ani', 'animasi', this.getNextHighestDepth()); } Listing Pada File Final SO Layer SJF NP function cek_sama() { for (var i = 0; i<rec_array.length; i++) { for (var j = 0; j<rec_array.length; j++) { if (rec_array[i].tiba != rec_array[j].tiba && i != j) { return "ada beda"; } } } return "sama"; } function SJF_NonP() { bubblesort_tiba(); for (i=0; i<rec_array.length; i++) { trace("KONDISI URUT nama: "+rec_array[i].name+" tiba: "+rec_array[i].tiba+" eksekusi: "+rec_array[i].eksekusi); } var rec_0:Array = new Array(); rec_0.push({name:rec_array[0].name, tiba:rec_array[0].tiba, eksekusi:rec_array[0].eksekusi, mulai:rec_array[0].mulai, selesai:rec_array[0].selesai, selesai:rec_array[0].tunggu}); if (cek_sama() == "sama") { for (i=0; i<rec_array.length; i++) { if (rec_array[i].eksekusi<rec_array[0].selesai) { rec_array_temp.push({name:rec_array[i].name, tiba:rec_array[i].tiba, eksekusi:rec_array[i].eksekusi, mulai:rec_array[i].mulai, selesai:rec_array[i].selesai, selesai:rec_array[i].tunggu}); } else { rec_array_temp_sisa.push({name:rec_array[i].name, tiba:rec_array[i].tiba, eksekusi:rec_array[i].eksekusi, mulai:rec_array[i].mulai, selesai:rec_array[i].selesai, selesai:rec_array[i].tunggu}); } } while (rec_array.length>0) { rec_array.pop(); } bubblesort_temp_sisa_tiba(); bubblesort_temp_tiba(); while (rec_array_temp.length>0) { rec_array.push(rec_array_temp.pop()); } bubblesort_temp_sisa_eksekusi(); while (rec_array_temp_sisa.length>0) { rec_array.push(rec_array_temp_sisa.pop()); }
151
} rec_array[0].mulai = rec_array[0].tiba; rec_array[0].selesai = rec_array[0].mulai+rec_array[0].eksekusi; var reco:Array = new Array(); for (i=0; i<rec_array.length; i++) { reco.push({name:rec_array[i].name, tiba:rec_array[i].tiba, eksekusi:rec_array[i].eksekusi, mulai:rec_array[i].mulai, selesai:rec_array[i].selesai, tunggu:rec_array[i].tunggu}); } for (i=1; i<rec_array.length; i++) { if (rec_array[i].tiba<=rec_array[i-1].selesai) { rec_array_temp.push({name:rec_array[i].name, tiba:rec_array[i].tiba, eksekusi:rec_array[i].eksekusi, mulai:rec_array[i].mulai, selesai:rec_array[i].selesai, tunggu:rec_array[i].tunggu}); } else { rec_array_temp_sisa.push({name:rec_array[i].name, tiba:rec_array[i].tiba, eksekusi:rec_array[i].eksekusi, mulai:rec_array[i].mulai, selesai:rec_array[i].selesai, tunggu:rec_array[i].tunggu}); } } while (rec_array.length>0) { rec_array.pop(); } bubblesort_temp_sisa_tiba(); bubblesort_temp_tiba(); bubblesort_temp_eksekusi(); while (rec_array_temp.length>0) { rec_array.push(rec_array_temp.pop()); } if (rec_array_temp.length=0) { bubblesort_temp_sisa_eksekusi(); } else { bubblesort_temp_sisa_tiba(); } bubblesort_temp_sisa_eksekusi(); while (rec_array_temp_sisa.length>0) { rec_array.push(rec_array_temp_sisa.pop()); } var rec_1:Array = new Array(); for (i=0; i<rec_array.length; i++) { rec_1.push({name:rec_array[i].name, tiba:rec_array[i].tiba, eksekusi:rec_array[i].eksekusi, mulai:rec_array[i].mulai, selesai:rec_array[i].selesai, selesai:rec_array[i].tunggu}); trace("name: "+rec_array[i].name); } rec_array.splice(0, rec_array.length); rec_array.push({name:rec_0[0].name, tiba:rec_0[0].tiba, eksekusi:rec_0[0].eksekusi, mulai:rec_0[0].mulai, selesai:rec_0[0].selesai, tunggu:rec_0[0].tunggu}); for (i=0; i<rec_1.length; i++) {
152
rec_array.push({name:rec_1[i].name, tiba:rec_1[i].tiba, eksekusi:rec_1[i].eksekusi, mulai:rec_1[i].mulai, selesai:rec_1[i].selesai, tunggu:rec_1[i].tunggu}); trace("name: "+rec_array[i].name); } rec_array[0].mulai = rec_array[0].tiba; rec_array[0].selesai = rec_array[0].mulai+rec_array[0].eksekusi; for (i=0; i<rec_array.length; i++) { if (rec_array[i].tiba>rec_array[i-1].selesai) { rec_array[i].mulai = rec_array[i].tiba; rec_array[i].selesai = rec_array[i].mulai+rec_array[i].eksekusi; } else if ((rec_array[i].tiba<rec_array[i-1].selesai || rec_array[i].tiba == rec_array[i-1].selesai)) { rec_array[i].mulai = rec_array[i-1].selesai; rec_array[i].selesai = rec_array[i].mulai+rec_array[i].eksekusi; } } for (var i = 0; i<input_proses.text; i++) { proses[i].name = rec_array[i].name; proses[i].saattiba = rec_array[i].tiba; proses[i].lamaproses = rec_array[i].eksekusi; proses[i].warna = _root['warna'+(rec_array[i].name.substr(1, 1))]; } for (var i = 0; i<input_proses.text; i++) { AT[i] = (proses[i].saattiba); ST[i] = (proses[i].lamaproses); } awt = FCFS(AT, ST, input_proses.text); for (var i = 0; i<input_proses.text; i++) { rec_array_hasil.push({nama:proses[i].name, tiba:proses[i].saattiba, StartWait:StartWait[i], FinishWait:FinishWait[i], StartProc:StartProc[i], FinishProc:FinishProc[i], warna:proses[i].warna}); } rec_array_hasil.sortOn(["tiba"], Array.NUMERIC); if (cari1(1) == true) { array_proses0.push({nama:rec_array_hasil[0].nama, mulai:rec_array_hasil[0].StartProc, selesai:rec_array_hasil[0].FinishProc}); trace('prosess0 mulai '+array_proses0[0].selesai); duplicateMovieClip(p0, 'p0_'+0, this.getNextHighestDepth()); var my_color1_SJFNP:Color = new Color(this['p0_'+0]); my_color1_SJFNP.setRGB(rec_array_hasil[0].warna); this['p0_'+0]._x = ((array_proses0[0].mulai)*10)+31; this['p0_'+0]._width = (array_proses0[0].selesai-array_proses0[0].mulai)*10; duplicateMovieClip(wait0, 'wait0_'+0, this.getNextHighestDepth()); this['wait0_'+0]._x = ((array_tunggu0[0].selesai)*10)+31;
153
this['wait0_'+0]._width = (array_tunggu0[0].selesai-array_tunggu0[0].mulai)*10; } if (cari1(2) == true) { array_proses1.push({nama:rec_array_hasil[1].nama, mulai:rec_array_hasil[1].StartProc, selesai:rec_array_hasil[1].FinishProc}); if (rec_array_hasil[1].FinishWait != 0) { array_tunggu1.push({mulai:rec_array_hasil[1].StartWait, selesai:rec_array_hasil[1].FinishWait}); } if (array_proses1[0].mulai<rec_array_hasil[1].tiba) { array_proses1[0].mulai = rec_array_hasil[1].tiba; } duplicateMovieClip(p1, 'p1_0', this.getNextHighestDepth()); var my_color2_SJFNP:Color = new Color(this['p1_0']); my_color2_SJFNP.setRGB(rec_array_hasil[1].warna); this['p1_0']._x = ((array_proses1[0].mulai)*10)+31; this['p1_0']._width = (array_proses1[0].selesai-array_proses1[0].mulai)*10; duplicateMovieClip(wait1, 'wait1_1', this.getNextHighestDepth()); this['wait1_1']._x = ((array_tunggu1[0].mulai)*10)+31; this['wait1_1']._width = (array_tunggu1[0].selesai-array_tunggu1[0].mulai)*10; } if (cari1(3) == true) { array_proses2.push({nama:rec_array_hasil[2].nama, mulai:rec_array_hasil[2].StartProc, selesai:rec_array_hasil[2].FinishProc}); if (rec_array_hasil[2].FinishWait != 0) { array_tunggu2.push({mulai:rec_array_hasil[2].StartWait, selesai:rec_array_hasil[2].FinishWait}); } if (array_proses2[0].mulai<prec_array_hasil[2].tiba) { array_proses2[0].mulai = rec_array_hasil[2].tiba; } duplicateMovieClip(p2, 'p2_'+2, this.getNextHighestDepth()); var my_color3_SJFNP:Color = new Color(this['p2_'+2]); my_color3_SJFNP.setRGB(rec_array_hasil[2].warna); this['p2_'+2]._x = ((array_proses2[0].mulai)*10)+31; this['p2_'+2]._width = (array_proses2[0].selesai-array_proses2[0].mulai)*10; duplicateMovieClip(wait2, 'wait2_'+2, this.getNextHighestDepth()); this['wait2_'+2]._x = ((array_tunggu2[0].mulai)*10)+31; this['wait2_'+2]._width = (array_tunggu2[0].selesai-array_tunggu2[0].mulai)*10; }
154
if (cari1(4) == true) { array_proses3.push({nama:rec_array_hasil[3].nama, mulai:rec_array_hasil[3].StartProc, selesai:rec_array_hasil[3].FinishProc}); if (rec_array_hasil[3].FinishWait != 0) { array_tunggu3.push({mulai:rec_array_hasil[3].StartWait, selesai:rec_array_hasil[3].FinishWait}); } if (array_proses3[0].mulai<prec_array_hasil[3].tiba) { array_proses3[0].mulai = rec_array_hasil[3].tiba; } duplicateMovieClip(p3, 'p3_'+3, this.getNextHighestDepth()); var my_color4_SJFNP:Color = new Color(this['p3_'+3]); my_color4_SJFNP.setRGB(rec_array_hasil[3].warna); this['p3_'+3]._x = ((array_proses3[0].mulai)*10)+31; this['p3_'+3]._width = (array_proses3[0].selesai-array_proses3[0].mulai)*10; duplicateMovieClip(wait3, 'wait3_'+3, this.getNextHighestDepth()); this['wait3_'+3]._x = ((array_tunggu3[0].mulai)*10)+31; this['wait3_'+3]._width = (array_tunggu3[0].selesai-array_tunggu3[0].mulai)*10; } if (cari1(5) == true) { array_proses4.push({nama:rec_array_hasil[4].nama, mulai:rec_array_hasil[4].StartProc, selesai:rec_array_hasil[4].FinishProc}); if (rec_array_hasil[4].FinishWait != 0) { array_tunggu4.push({mulai:rec_array_hasil[4].StartWait, selesai:rec_array_hasil[4].FinishWait}); } if (array_proses4[0].mulai<rec_array_hasil[4].tiba) { array_proses4[0].mulai = rec_array_hasil[4].tiba; } duplicateMovieClip(p4, 'p4_'+4, this.getNextHighestDepth()); var my_color5_SJFNP:Color = new Color(this['p4_'+4]); my_color5_SJFNP.setRGB(rec_array_hasil[4].warna); this['p4_'+4]._x = ((array_proses4[0].mulai)*10)+31; this['p4_'+4]._width = (array_proses4[0].selesai-array_proses4[0].mulai)*10; duplicateMovieClip(wait4, 'wait4_'+4, this.getNextHighestDepth()); this['wait4_'+4]._x = ((array_tunggu4[0].mulai)*10)+31; this['wait4_'+4]._width = (array_tunggu4[0].selesai-array_tunggu4[0].mulai)*10; } for (var i = 0; i<input_proses.text; i++) { _root['name'+(i+1)].text = rec_array_hasil[i].nama;
155
} for (var i = 0; i<input_proses.text; i++) { _root['name_p'+(i+1)].text = rec_array_hasil[i].nama; } for (var i = 0; i<array_proses0.length; i++) { if (array_proses0[i].selesai>panjang_proses) { panjang_proses = array_proses0[i].selesai; } } for (var i = 0; i<array_proses1.length; i++) { if (array_proses1[i].selesai>panjang_proses) { panjang_proses = array_proses1[i].selesai; } } for (var i = 0; i<array_proses2.length; i++) { if (array_proses2[i].selesai>panjang_proses) { panjang_proses = array_proses2[i].selesai; } } for (var i = 0; i<array_proses3.length; i++) { if (array_proses3[i].selesai>panjang_proses) { panjang_proses = array_proses3[i].selesai; } } for (var i = 0; i<array_proses4.length; i++) { if (array_proses4[i].selesai>panjang_proses) { panjang_proses = array_proses4[i].selesai; } } start_1 = true; duplicateMovieClip(kotak, 'kotak_i', this.getNextHighestDepth()); this['kotak_i']._y = 374; duplicateMovieClip(garis, 'garis_i', this.getNextHighestDepth()); this['garis_i']._y = 374; _root.createEmptyMovieClip('animasi', this.getNextHighestDepth()); _root.animasi.attachMovie('ball_ani', 'animasi', this.getNextHighestDepth()); } Listing Pada File Final SO Layer SJFP function cari_index(inp:String) { for (var i = 0; i<array_temp.length; i++) { if (array_temp[i].id == inp) { return i; } } return -1; } function cari_tiba0() { for (var i = 0; i<array.length; i++) { if (array[i].AT == 0) { trace('ada yng 0000000');
156
return 'ada'; } } return 'tdk'; } function cari_id(inp:String) { for (var i = 0; i<array_id.length; i++) { if (array_id[i].id == inp) { return 'ada'; } } return 'tdk'; } function cari1(k:Number) { for (var i = 1; i<=_root.proses_jumlah; i++) { if (i == k) { return true; } } } function SJFPrem() { for (var i = 0; i<input_proses.text; i++) { array.push({name:rec_array[i].name, id:rec_array[i].id, AT:rec_array[i].tiba, ET:rec_array[i].eksekusi, ST:'', FT:'', WT:'', RT:''}); } rec_array.sortOn(["tiba"], Array.NUMERIC); for (i=0; i<array.length; i++) { //trace("nama: "+array[i].name+" tiba: "+array[i].AT+" eksekusi: "+array[i].ET+" prioritas: "+array[i].Prio); } trace("=================================================================="); array.sortOn(["AT"], Array.NUMERIC); start_time = array[0].AT; max_time = start_time; for (i=0; i<array.length; i++) { array2.push({name:array[i].name, id:array[i].id, AT:array[i].AT, ET:array[i].ET, Prio:array[i].Prio, ST:array[i].ST, FT:array[i].FT, WT:array[i].WT, RT:array[i].ET}); if ((array[i].AT-max_time)<=0) { max_time += array[i].ET; } else { max_time += (array[i].AT-max_time)+array[i].ET; } } for (i=0; i<(max_time-1); i++) { if (i<(start_time-1)) { trace("detik ke: "+(i+1)+" ...."); trace("menunggu di awal............"); continue; } array2.sortOn(["AT", "RT"], Array.NUMERIC); n = 0; for (k=0; k<array2.length; k++) { if (array2[k].RT>0) {
157
n = k; break; } } if (array2[n].AT>(i+1)) { trace("detik ke: "+(i+1)+" ...."); trace("menunggu ditengah ............"); continue; } array2[n].RT -= 1; array2[n].AT += 1; for (j=(n+1); j<array2.length; j++) { if (array2[j].AT<array2[n].AT) { array2[j].AT += 1; } } array_hasil.push({nama:array2[n].name, tempat:(i+1), id:array2[n].id, mulai:(array2[n].AT)-1, selesai:array2[n].AT}); trace("detik ke: "+(i+1)+" ...."); trace("nama proses: "+array2[n].name+", dengan AT: "+array2[n].AT+" dan ET: "+array2[n].ET+", RT: "+array2[n].RT+", ID : "+array2[n].id); } if (cari_tiba0() == 'ada') { trace('ada saattiba yg 0'); array_hasil.push({nama:array2[n].name, tempat:array_hasil[array_hasil.length-1].tempat+1, id:array_hasil[array_hasil.length-1].id, mulai:(array_hasil[array_hasil.length-1].selesai), selesai:(array_hasil[array_hasil.length-1].selesai)+1}); } for (var i = 0; i<array_hasil.length; i++) { trace("rec_array --> nama : "+array_hasil[i].nama+" nilai : "+array_hasil[i].tempat+' ID '+array_hasil[i].id+' mulai '+array_hasil[i].mulai+' selesai '+array_hasil[i].selesai); } for (var i = 0; i<array_hasil.length; i++) { if (array_hasil[i].nama != array_hasil[i+1].nama) { if (cari_tiba0() == 'ada') { trace('ada yang tibanya NOL'); rec_array_hasil.push({nama:array_hasil[i].nama, id:array_hasil[i].id, nilai:array_hasil[i].tempat, mulai:'', selesai:array_hasil[i].tempat}); } else { rec_array_hasil.push({nama:array_hasil[i].nama, id:array_hasil[i].id, nilai:array_hasil[i].tempat, mulai:'', selesai:array_hasil[i].tempat+1}); } } } for (var i = 0; i<rec_array_hasil.length; i++) { trace("rec_array hasil--> proses: "+rec_array_hasil[i].nama+" nilai : "+rec_array_hasil[i].nilai+'
158
mulai '+rec_array_hasil[i].mulai+' selesai '+rec_array_hasil[i].selesai); } trace('==================='); rec_array_hasil[0].mulai = array_hasil[0].mulai; for (var i = 1; i<rec_array_hasil.length; i++) { rec_array_hasil[i].mulai = rec_array_hasil[i-1].selesai; } for (var i = 0; i<rec_array_hasil.length; i++) { trace("hasil disederhanakan - > nama proses: "+rec_array_hasil[i].nama+' id '+rec_array_hasil[i].id+' mulai '+rec_array_hasil[i].mulai+' selesai '+rec_array_hasil[i].selesai); } array_id.push({id:rec_array_hasil[0].id}); for (var i = 1; i<rec_array_hasil.length; i++) { if (cari_id(rec_array_hasil[i].id) == 'tdk') { array_id.push({id:rec_array_hasil[i].id}); } } for (var i = 0; i<array_id.length; i++) { trace('array_id ID : '+array_id[i].id); } for (i=0; i<array.length; i++) { array_temp.push({name:array[i].name, AT:array[i].AT, ET:array[i].ET, id:array[i].id}); trace("array_temp -- nama: "+array_temp[i].name+" tiba: "+array_temp[i].AT+" eksekusi: "+array_temp[i].ET); } trace('panjang array_temp '+array_temp.length); for (var i = 0; i<rec_array_hasil.length; i++) { trace("hasil -- nama proses: "+rec_array_hasil[i].nama+' mulai '+rec_array_hasil[i].mulai+' selesai '+rec_array_hasil[i].selesai); } for (var i = 0; i<rec_array.length; i++) { rec_array[i].name = array_temp[cari_index(array_id[i].id)].name; rec_array[i].tiba = array_temp[cari_index(array_id[i].id)].AT; rec_array[i].eksekusi = array_temp[cari_index(array_id[i].id)].ET; rec_array[i].id = array_temp[cari_index(array_id[i].id)].id; } var jml_proses0 = 0; var jml_proses1 = 0; var jml_proses2 = 0; var jml_proses3 = 0; var jml_proses4 = 0; for (var i = 0; i<rec_array_hasil.length; i++) { if (rec_array_hasil[i].nama == rec_array[0].name) { jml_proses0++; } if (rec_array_hasil[i].nama == rec_array[1].name) {
159
jml_proses1++; } if (rec_array_hasil[i].nama == rec_array[2].name) { jml_proses2++; } if (rec_array_hasil[i].nama == rec_array[3].name) { jml_proses3++; } if (rec_array_hasil[i].nama == rec_array[4].name) { jml_proses4++; } } var jml_tunggu0 = jml_proses0-1; var jml_tunggu1 = jml_proses1-1; var jml_tunggu2 = jml_proses2-1; var jml_tunggu3 = jml_proses3-1; var jml_tunggu4 = jml_proses4-1; for (var i = 0; i<rec_array_hasil.length; i++) { if (rec_array_hasil[i].nama == rec_array[0].name) { array_proses0.push({nama:rec_array_hasil[i].nama, mulai:rec_array_hasil[i].mulai, selesai:rec_array_hasil[i].selesai}); } if (rec_array_hasil[i].nama == rec_array[1].name) { array_proses1.push({nama:rec_array_hasil[i].nama, mulai:rec_array_hasil[i].mulai, selesai:rec_array_hasil[i].selesai}); } if (rec_array_hasil[i].nama == rec_array[2].name) { array_proses2.push({nama:rec_array_hasil[i].nama, mulai:rec_array_hasil[i].mulai, selesai:rec_array_hasil[i].selesai}); } if (rec_array_hasil[i].nama == rec_array[3].name) { array_proses3.push({nama:rec_array_hasil[i].nama, mulai:rec_array_hasil[i].mulai, selesai:rec_array_hasil[i].selesai}); } if (rec_array_hasil[i].nama == rec_array[4].name) { array_proses4.push({nama:rec_array_hasil[i].nama, mulai:rec_array_hasil[i].mulai, selesai:rec_array_hasil[i].selesai}); } } for (var i = 0; i<array_proses0.length; i++) { trace("NAMA: "+array_proses0[i].nama+" MULAI: "+array_proses0[i].mulai+" "+"SELESAI: "+array_proses0[i].selesai); } for (var i = 0; i<jml_tunggu0; i++) {
160
array_tunggu0.push({mulai:array_proses0[i].selesai, selesai:array_proses0[i+1].mulai}); trace("mulai tunggu "+(i+1)+" "+array_proses0[i].selesai+" selesai tunggu "+(i+1)+" "+array_proses0[i+1].mulai); } for (var i = 0; i<array_proses1.length; i++) { trace("NAMA: "+array_proses1[i].nama+" MULAI: "+array_proses1[i].mulai+" "+"SELESAI: "+array_proses1[i].selesai); } if (array_proses1[0].mulai>rec_array[1].tiba) { array_tunggu1.push({mulai:rec_array[1].tiba, selesai:array_proses1[0].mulai}); } for (var i = 0; i<jml_tunggu1; i++) { array_tunggu1.push({mulai:array_proses1[i].selesai, selesai:array_proses1[i+1].mulai}); trace("mulai tunggu ke "+(i+1)+" "+array_proses1[i].selesai+" selesai tunggu "+(i+1)+" "+array_proses1[i+1].mulai); } for (var i = 0; i<array_proses2.length; i++) { trace("NAMA: "+array_proses2[i].nama+" MULAI: "+array_proses2[i].mulai+" "+"SELESAI: "+array_proses2[i].selesai); } if (array_proses2[0].mulai>rec_array[2].tiba) { array_tunggu2.push({mulai:rec_array[2].tiba, selesai:array_proses2[0].mulai}); } for (var i = 0; i<jml_tunggu2; i++) { array_tunggu2.push({mulai:array_proses2[i].selesai, selesai:array_proses2[i+1].mulai}); trace("mulai tunggu ke "+(i+1)+" "+array_proses2[i].selesai+" selesai tunggu "+(i+1)+" "+array_proses2[i+1].mulai); } for (var i = 0; i<array_proses3.length; i++) { trace("NAMA: "+array_proses3[i].nama+" MULAI: "+array_proses3[i].mulai+" "+"SELESAI: "+array_proses3[i].selesai); } if (array_proses3[0].mulai>rec_array[3].tiba) { array_tunggu3.push({mulai:rec_array[3].tiba, selesai:array_proses3[0].mulai}); } for (var i = 0; i<jml_tunggu3; i++) { array_tunggu3.push({mulai:array_proses3[i].selesai, selesai:array_proses3[i+1].mulai}); trace("mulai tunggu ke "+(i+1)+" "+array_proses3[i].selesai+" selesai tunggu "+(i+1)+" "+array_proses3[i+1].mulai); } for (var i = 0; i<array_proses4.length; i++) {
161
trace("NAMA: "+array_proses4[i].nama+" MULAI: "+array_proses4[i].mulai+" "+"SELESAI: "+array_proses4[i].selesai); } if (array_proses4[0].mulai>rec_array[4].tiba) { array_tunggu4.push({mulai:rec_array[4].tiba, selesai:array_proses4[0].mulai}); } for (var i = 0; i<jml_tunggu4; i++) { array_tunggu4.push({mulai:array_proses4[i].selesai, selesai:array_proses4[i+1].mulai}); trace("mulai tunggu ke "+(i+1)+" "+array_proses4[i].selesai+" selesai tunggu "+(i+1)+" "+array_proses4[i+1].mulai); } for (var i = 0; i<array_proses0.length; i++) { if (array_proses0[i].selesai>panjang_proses) { panjang_proses = array_proses0[i].selesai; } } for (var i = 0; i<array_proses1.length; i++) { if (array_proses1[i].selesai>panjang_proses) { panjang_proses = array_proses1[i].selesai; } } for (var i = 0; i<array_proses2.length; i++) { if (array_proses2[i].selesai>panjang_proses) { panjang_proses = array_proses2[i].selesai; } } for (var i = 0; i<array_proses3.length; i++) { if (array_proses3[i].selesai>panjang_proses) { panjang_proses = array_proses3[i].selesai; } } for (var i = 0; i<array_proses4.length; i++) { if (array_proses4[i].selesai>panjang_proses) { panjang_proses = array_proses4[i].selesai; } } for (var i = 0; i<input_proses.text; i++) { proses[i].name = rec_array[i].name; proses[i].saattiba = rec_array[i].tiba; proses[i].lamaproses = rec_array[i].eksekusi; proses[i].warna = _root['warna'+(rec_array[i].name.substr(1, 1))]; } for (var i = 0; i<proses.length; i++) { trace('urutan id '+cari_index(array_id[i].id)); proses[i].name = array_temp[cari_index(array_id[i].id)].name; proses[i].saattiba = array_temp[cari_index(array_id[i].id)].AT; proses[i].lamaproses = array_temp[cari_index(array_id[i].id)].ET;
162
proses[i].id[i].id = array_temp[cari_index(array_id[i].id)].id; } for (i=0; i<input_proses.text; i++) { trace("nama proses: "+proses[i].name+" ID : "+proses[i].id+" tiba: "+proses[i].saattiba+" eksekusi: "+proses[i].lamaproses+"warna : "+proses[i].warna); } if (array_proses1[0].mulai<proses[1].saattiba) { array_proses1[0].mulai = proses[1].saattiba; } if (array_proses2[0].mulai<proses[2].saattiba) { array_proses2[0].mulai = proses[2].saattiba; } if (array_proses3[0].mulai<proses[3].saattiba) { array_proses3[0].mulai = proses[3].saattiba; } if (array_proses4[0].mulai<proses[4].saattiba) { array_proses4[0].mulai = proses[4].saattiba; } var my_color1:Color = new Color(p0); my_color1.setRGB(proses[0].warna); var my_color2:Color = new Color(p1); my_color2.setRGB(proses[1].warna); var my_color3:Color = new Color(p2); my_color3.setRGB(proses[2].warna); var my_color4:Color = new Color(p3); my_color4.setRGB(proses[3].warna); var my_color5:Color = new Color(p4); my_color5.setRGB(proses[4].warna); for (i=0; i<input_proses.text; i++) { //trace("hasil proses nama: "+proses[i].name+" tiba: "+proses[i].saattiba+" lama: "+proses[i].lamaproses+"warna : "+proses[i].warna); } for (var i = 0; i<input_proses.text; i++) { _root['name'+(i+1)].text = proses[i].name; } for (var i = 0; i<input_proses.text; i++) { _root['name_p'+(i+1)].text = proses[i].name; } for (var j = 0; j<array_proses0.length; j++) { duplicateMovieClip(p0, 'p0_'+j, this.getNextHighestDepth()); var my_color1_RR:Color = new Color(this['p0_'+j]); my_color1_RR.setRGB(proses[0].warna); this['p0_'+j]._x = ((array_proses0[j].mulai)*10)+31; this['p0_'+j]._width = (array_proses0[j].selesai-array_proses0[j].mulai)*10; } for (var j = 0; j<jml_tunggu0; j++) { duplicateMovieClip(wait0, 'wait0_'+j, this.getNextHighestDepth()); this['wait0_'+j]._x = ((array_proses0[j].selesai)*10)+31;
163
this['wait0_'+j]._width = (array_proses0[j+1].mulai-array_proses0[j].selesai)*10; } for (var j = 0; j<array_proses1.length; j++) { trace("menggambar prosess "+j); duplicateMovieClip(p1, 'p1_'+j, this.getNextHighestDepth()); var my_color2_RR:Color = new Color(this['p1_'+j]); my_color2_RR.setRGB(proses[1].warna); this['p1_'+j]._x = ((array_proses1[j].mulai)*10)+31; this['p1_'+j]._width = (array_proses1[j].selesai-array_proses1[j].mulai)*10; } if (array_tunggu1.length != 0) { duplicateMovieClip(wait1, 'wait1_pertama', this.getNextHighestDepth()); this['wait1_pertama']._x = ((rec_array[1].tiba)*10)+31; this['wait1_pertama']._width = (array_proses1[0].mulai-rec_array[1].tiba)*10; } for (var j = 0; j<jml_tunggu1; j++) { duplicateMovieClip(wait1, 'wait1_'+j, this.getNextHighestDepth()); this['wait1_'+j]._x = ((array_proses1[j].selesai)*10)+31; this['wait1_'+j]._width = (array_proses1[j+1].mulai-array_proses1[j].selesai)*10; } for (var j = 0; j<array_proses2.length; j++) { duplicateMovieClip(p2, 'p2_'+j, this.getNextHighestDepth()); var my_color3_RR:Color = new Color(this['p2_'+j]); my_color3_RR.setRGB(proses[2].warna); this['p2_'+j]._x = ((array_proses2[j].mulai)*10)+31; this['p2_'+j]._width = (array_proses2[j].selesai-array_proses2[j].mulai)*10; } duplicateMovieClip(wait2, 'wait2_pertama', this.getNextHighestDepth()); this['wait2_pertama']._x = ((rec_array[2].tiba)*10)+31; this['wait2_pertama']._width = (array_proses2[0].mulai-rec_array[2].tiba)*10; for (var j = 0; j<jml_tunggu2; j++) { duplicateMovieClip(wait2, 'wait2_'+j, this.getNextHighestDepth()); this['wait2_'+j]._x = ((array_proses2[j].selesai)*10)+31; this['wait2_'+j]._width = (array_proses2[j+1].mulai-array_proses2[j].selesai)*10; } for (var j = 0; j<array_proses3.length; j++) { duplicateMovieClip(p3, 'p3_'+j, this.getNextHighestDepth()); var my_color4_RR:Color = new Color(this['p3_'+j]); my_color4_RR.setRGB(proses[3].warna);
164
this['p3_'+j]._x = ((array_proses3[j].mulai)*10)+31; this['p3_'+j]._width = (array_proses3[j].selesai-array_proses3[j].mulai)*10; } duplicateMovieClip(wait3, 'wait3_pertama', this.getNextHighestDepth()); this['wait3_pertama']._x = ((rec_array[3].tiba)*10)+31; this['wait3_pertama']._width = (array_proses3[0].mulai-rec_array[3].tiba)*10; for (var j = 0; j<jml_tunggu3; j++) { duplicateMovieClip(wait3, 'wait3_'+j, this.getNextHighestDepth()); this['wait3_'+j]._x = ((array_proses3[j].selesai)*10)+31; this['wait3_'+j]._width = (array_proses3[j+1].mulai-array_proses3[j].selesai)*10; } for (var j = 0; j<array_proses4.length; j++) { duplicateMovieClip(p4, 'p4_'+j, this.getNextHighestDepth()); var my_color5_RR:Color = new Color(this['p4_'+j]); my_color5_RR.setRGB(proses[4].warna); this['p4_'+j]._x = ((array_proses4[j].mulai)*10)+31; this['p4_'+j]._width = (array_proses4[j].selesai-array_proses4[j].mulai)*10; } duplicateMovieClip(wait4, 'wait4_pertama', this.getNextHighestDepth()); this['wait4_pertama']._x = ((rec_array[4].tiba)*10)+31; this['wait4_pertama']._width = (array_proses4[0].mulai-rec_array[4].tiba)*10; for (var j = 0; j<jml_tunggu4; j++) { duplicateMovieClip(wait4, 'wait4_'+j, this.getNextHighestDepth()); this['wait4_'+j]._x = ((array_proses4[j].selesai)*10)+31; this['wait4_'+j]._width = (array_proses4[j+1].mulai-array_proses4[j].selesai)*10; } duplicateMovieClip(kotak, 'kotak_i', this.getNextHighestDepth()); this['kotak_i']._y = 374; duplicateMovieClip(garis, 'garis_i', this.getNextHighestDepth()); this['garis_i']._y = 374; start_1 = true; _root.createEmptyMovieClip('animasi', this.getNextHighestDepth()); _root.animasi.attachMovie('ball_ani', 'animasi', this.getNextHighestDepth()); }
165
Listing Pada File Final SO Layer Round R function roundRobin() { var panjang = 80; var proses_a = 0; rec_array.sortOn(["tiba"]); while (proses_a<80) { for (i=0; i<rec_array.length; i++) { if ((rec_array[i].eksekusi>=quantum) && (rec_array[i].tiba<proses_a)) { rec_array_hasil.push({nama:rec_array[i].name, tempat:i, nilai:quantum, mulai:"", selesai:""}); proses_a = proses_a+quantum; rec_array[i].eksekusi = rec_array[i].eksekusi-quantum; } else if ((rec_array[i].eksekusi>0) && (rec_array[i].eksekusi<quantum) && (rec_array[i].tiba<proses_a)) { rec_array_hasil.push({nama:rec_array[i].name, tempat:i, nilai:rec_array[i].eksekusi, mulai:"", selesai:""}); proses_a = proses_a+rec_array[i].eksekusi; rec_array[i].eksekusi = 0; } } proses_a = proses_a+quantum; } rec_array_hasil[0].mulai = rec_array[0].tiba; rec_array_hasil[0].selesai = rec_array_hasil[0].mulai+rec_array_hasil[0].nilai; for (i=1; i<rec_array_hasil.length; i++) { rec_array_hasil[i].mulai = rec_array_hasil[i-1].mulai+rec_array_hasil[i-1].nilai; rec_array_hasil[i].selesai = rec_array_hasil[i].mulai+rec_array_hasil[i].nilai; } rec_array_hasil.sortOn(["tiba"]); for (var i = 0; i<rec_array_hasil.length; i++) { trace("NAMA: "+rec_array_hasil[i].nama+" "+"PROSES: "+rec_array_hasil[i].tempat+" "+"JALAN: "+rec_array_hasil[i].nilai+" "+"MULAI: "+rec_array_hasil[i].mulai+" "+"SELESAI: "+rec_array_hasil[i].selesai); } var jml_proses0 = 0; var jml_proses1 = 0; var jml_proses2 = 0; var jml_proses3 = 0; var jml_proses4 = 0; for (var i = 0; i<rec_array_hasil.length; i++) { if (rec_array_hasil[i].nama == rec_array[0].name) { jml_proses0++; } if (rec_array_hasil[i].nama == rec_array[1].name) { jml_proses1++; } if (rec_array_hasil[i].nama == rec_array[2].name) {
166
jml_proses2++; } if (rec_array_hasil[i].nama == rec_array[3].name) { jml_proses3++; } if (rec_array_hasil[i].nama == rec_array[4].name) { jml_proses4++; } } var jml_tunggu0 = jml_proses0-1; var jml_tunggu1 = jml_proses1-1; var jml_tunggu2 = jml_proses2-1; var jml_tunggu3 = jml_proses3-1; var jml_tunggu4 = jml_proses4-1; for (var i = 0; i<rec_array_hasil.length; i++) { if (rec_array_hasil[i].nama == rec_array[0].name) { array_proses0.push({nama:rec_array_hasil[i].nama, tempat:rec_array_hasil[i].tempat, nilai:rec_array_hasil[i].nilai, mulai:rec_array_hasil[i].mulai, selesai:rec_array_hasil[i].selesai}); } if (rec_array_hasil[i].nama == rec_array[1].name) { array_proses1.push({nama:rec_array_hasil[i].nama, tempat:rec_array_hasil[i].tempat, nilai:rec_array_hasil[i].nilai, mulai:rec_array_hasil[i].mulai, selesai:rec_array_hasil[i].selesai}); } if (rec_array_hasil[i].nama == rec_array[2].name) { array_proses2.push({nama:rec_array_hasil[i].nama, tempat:rec_array_hasil[i].tempat, nilai:rec_array_hasil[i].nilai, mulai:rec_array_hasil[i].mulai, selesai:rec_array_hasil[i].selesai}); } if (rec_array_hasil[i].nama == rec_array[3].name) { array_proses3.push({nama:rec_array_hasil[i].nama, tempat:rec_array_hasil[i].tempat, nilai:rec_array_hasil[i].nilai, mulai:rec_array_hasil[i].mulai, selesai:rec_array_hasil[i].selesai}); } if (rec_array_hasil[i].nama == rec_array[4].name) { array_proses4.push({nama:rec_array_hasil[i].nama, tempat:rec_array_hasil[i].tempat, nilai:rec_array_hasil[i].nilai, mulai:rec_array_hasil[i].mulai, selesai:rec_array_hasil[i].selesai}); } } for (var i = 0; i<array_proses0.length; i++) { trace("NAMA: "+array_proses0[i].nama+" "+"PROSES: "+array_proses0[i].tempat+" "+"JALAN: "+array_proses0[i].nilai+" "+"MULAI: "+array_proses0[i].mulai+" "+"SELESAI: "+array_proses0[i].selesai);
167
} for (var i = 0; i<jml_tunggu0; i++) { array_tunggu0.push({mulai:array_proses0[i].selesai, selesai:array_proses0[i+1].mulai}); trace("mulai tunggu "+(i+1)+" "+array_proses0[i].selesai+" selesai tunggu "+(i+1)+" "+array_proses0[i+1].mulai); } for (var i = 0; i<array_proses1.length; i++) { trace("NAMA: "+array_proses1[i].nama+" MULAI: "+array_proses1[i].mulai+" "+"SELESAI: "+array_proses1[i].selesai); } if (array_proses1[0].mulai>rec_array[1].tiba) { array_tunggu1.push({mulai:rec_array[1].tiba, selesai:array_proses1[0].mulai}); } for (var i = 0; i<jml_tunggu1; i++) { array_tunggu1.push({mulai:array_proses1[i].selesai, selesai:array_proses1[i+1].mulai}); trace("mulai tunggu ke "+(i+1)+" "+array_proses1[i].selesai+" selesai tunggu "+(i+1)+" "+array_proses1[i+1].mulai); } for (var i = 0; i<array_proses2.length; i++) { trace("NAMA: "+array_proses2[i].nama+" MULAI: "+array_proses2[i].mulai+" "+"SELESAI: "+array_proses2[i].selesai); } if (array_proses2[0].mulai>rec_array[2].tiba) { array_tunggu2.push({mulai:rec_array[2].tiba, selesai:array_proses2[0].mulai}); } for (var i = 0; i<jml_tunggu2; i++) { array_tunggu2.push({mulai:array_proses2[i].selesai, selesai:array_proses2[i+1].mulai}); trace("mulai tunggu ke "+(i+1)+" "+array_proses2[i].selesai+" selesai tunggu "+(i+1)+" "+array_proses2[i+1].mulai); } for (var i = 0; i<array_proses3.length; i++) { trace("NAMA: "+array_proses3[i].nama+" MULAI: "+array_proses3[i].mulai+" "+"SELESAI: "+array_proses3[i].selesai); } if (array_proses3[0].mulai>rec_array[3].tiba) { array_tunggu3.push({mulai:rec_array[3].tiba, selesai:array_proses3[0].mulai}); } for (var i = 0; i<jml_tunggu3; i++) { array_tunggu3.push({mulai:array_proses3[i].selesai, selesai:array_proses3[i+1].mulai}); trace("mulai tunggu ke "+(i+1)+" "+array_proses3[i].selesai+" selesai tunggu "+(i+1)+" "+array_proses3[i+1].mulai); }
168
for (var i = 0; i<array_proses4.length; i++) { trace("NAMA: "+array_proses4[i].nama+" MULAI: "+array_proses4[i].mulai+" "+"SELESAI: "+array_proses4[i].selesai); } if (array_proses4[0].mulai>rec_array[4].tiba) { array_tunggu4.push({mulai:rec_array[4].tiba, selesai:array_proses4[0].mulai}); } for (var i = 0; i<jml_tunggu4; i++) { array_tunggu4.push({mulai:array_proses4[i].selesai, selesai:array_proses4[i+1].mulai}); trace("mulai tunggu ke "+(i+1)+" "+array_proses4[i].selesai+" selesai tunggu "+(i+1)+" "+array_proses4[i+1].mulai); } for (var i = 0; i<input_proses.text; i++) { //proses.push({name: "P"+i, saattiba: _root['p'+i+'_saattiba'], lamaproses: _root['p'+i+'_lamaproses'],warna:_root['warna'+i]}); proses[i].name = rec_array[i].name; proses[i].saattiba = rec_array[i].tiba; proses[i].lamaproses = rec_array[i].eksekusi; proses[i].warna = _root['warna'+(rec_array[i].name.substr(1, 1))]; } } Listing Pada File Final SO Layer Prio NP function priority_NonP() { cek_tiba_sama(); if (cek_tiba_sama() == "Tiba --> semuanya SAMA") { bubblesort_prioritas(); } else { bubblesort_tiba(); rec_array_temp_sisa.push({name:rec_array[0].name, tiba:rec_array[0].tiba, eksekusi:rec_array[0].eksekusi, prioritas:rec_array[0].prioritas, mulai:rec_array[0].mulai, selesai:rec_array[0].selesai}); for (i=1; i<rec_array.length; i++) { rec_array_temp.push({name:rec_array[i].name, tiba:rec_array[i].tiba, eksekusi:rec_array[i].eksekusi, prioritas:rec_array[i].prioritas, mulai:rec_array[i].mulai, selesai:rec_array[i].selesai}); trace("AMBIL nama: "+rec_array[i].name+" tiba: "+rec_array[i].tiba+" eksekusi: "+rec_array[i].eksekusi+" prioritas: "+rec_array[i].prioritas); } bubblesort_temp_prioritas(); while (rec_array.length>0) { rec_array.pop(); } for (i=0; i<rec_array_temp.length; i++) { //trace("AMBIL URUT PRIORITAS nama: "+rec_array_temp[i].name+" tiba: "+rec_array_temp[i].tiba+"
169
eksekusi: "+rec_array_temp[i].eksekusi+" prioritas: "+rec_array_temp[i].prioritas); } rec_array.push(rec_array_temp_sisa.pop()); while (rec_array_temp.length>0) { rec_array.push(rec_array_temp.pop()); } } trace(rec_array.length); rec_array[0].mulai = rec_array[0].tiba; rec_array[0].selesai = rec_array[0].mulai+rec_array[0].eksekusi; if (rec_array[1].tiba>rec_array[0].selesai) { rec_array[1].mulai = rec_array[1].tiba; rec_array[1].selesai = rec_array[1].mulai+rec_array[1].eksekusi; } else if ((rec_array[1].tiba<rec_array[0].selesai) || (rec_array[1].tiba == rec_array[0].selesai)) { rec_array[1].mulai = rec_array[0].selesai; rec_array[1].selesai = rec_array[1].mulai+rec_array[1].eksekusi; } if (rec_array[2].tiba>rec_array[1].selesai) { rec_array[2].mulai = rec_array[2].tiba; rec_array[2].selesai = rec_array[2].mulai+rec_array[2].eksekusi; } else if ((rec_array[2].tiba<rec_array[1].selesai || rec_array[2].tiba == rec_array[1].selesai)) { rec_array[2].mulai = rec_array[1].selesai; rec_array[2].selesai = rec_array[2].mulai+rec_array[2].eksekusi; } if (rec_array[3].tiba>rec_array[2].selesai) { rec_array[3].mulai = rec_array[3].tiba; rec_array[3].selesai = rec_array[3].mulai+rec_array[3].eksekusi; } else if ((rec_array[3].tiba<rec_array[2].selesai || rec_array[3].tiba == rec_array[2].selesai)) { rec_array[3].mulai = rec_array[2].selesai; rec_array[3].selesai = rec_array[3].mulai+rec_array[3].eksekusi; } if (rec_array[4].tiba>rec_array[3].selesai) { rec_array[4].mulai = rec_array[4].tiba; rec_array[4].selesai = rec_array[4].mulai+rec_array[4].eksekusi; } else if ((rec_array[4].tiba<rec_array[3].selesai || rec_array[4].tiba == rec_array[3].selesai)) { rec_array[4].mulai = rec_array[3].selesai; rec_array[4].selesai = rec_array[4].mulai+rec_array[4].eksekusi; } }
Listing Pada File Final SO Layer Priority P function priorityPrem() {
170
for (var i = 0; i<input_proses.text; i++) { array.push({name:rec_array[i].name, id:rec_array[i].id, AT:rec_array[i].tiba, ET:rec_array[i].eksekusi, Prio:rec_array[i].prioritas, ST:'', FT:'', WT:'', RT:''}); } rec_array.sortOn(["tiba"], Array.NUMERIC); for (i=0; i<array.length; i++) { //trace("nama: "+array[i].name+" tiba: "+array[i].AT+" eksekusi: "+array[i].ET+" prioritas: "+array[i].Prio); } trace("=================================================================="); array.sortOn(["AT"], Array.NUMERIC); start_time = array[0].AT; max_time = start_time; for (i=0; i<array.length; i++) { array2.push({name:array[i].name, id:array[i].id, AT:array[i].AT, ET:array[i].ET, Prio:array[i].Prio, ST:array[i].ST, FT:array[i].FT, WT:array[i].WT, RT:array[i].ET, OAT:array[i].AT}); if ((array[i].AT-max_time)<=0) { max_time += array[i].ET; } else { max_time += (array[i].AT-max_time)+array[i].ET; } } array2.sortOn(["Prio"], Array.NUMERIC); max_prio = array2[4].Prio; for (i=0; i<(max_time-1); i++) { if (i<(start_time-1)) { trace("detik ke: "+(i+1)+" ...."); trace("menunggu di awal............"); continue; } array2.sortOn(["AT", "Prio", "OAT"], Array.NUMERIC); n = 0; for (k=0; k<array2.length; k++) { if (array2[k].RT>0) { n = k; break; } } if (array2[n].AT>(i+1)) { trace("detik ke: "+(i+1)+" ...."); trace("menunggu ditengah ............"); continue; } array2[n].RT -= 1; array2[n].AT += 1; if (array2[0].RT<=0) { array2[0].Prio = max_prio+1; } for (j=(n+1); j<array2.length; j++) { if (array2[j].AT<array2[n].AT) { array2[j].AT += 1;
171
} } array_hasil.push({nama:array2[n].name, tempat:(i+1), id:array2[n].id, mulai:(array2[n].AT)-1, selesai:array2[n].AT}); trace("detik ke: "+(i+1)+" ...."); trace("nama proses: "+array2[n].name+", dengan AT: "+array2[n].AT+" dan ET: "+array2[n].ET+", RT: "+array2[n].RT); } if (cari_tiba0() == 'ada') { trace('ada saattiba yg 0'); array_hasil.push({nama:array2[n].name, tempat:array_hasil[array_hasil.length-1].tempat+1, id:array_hasil[array_hasil.length-1].id, mulai:(array_hasil[array_hasil.length-1].selesai), selesai:(array_hasil[array_hasil.length-1].selesai)+1}); } for (var i = 0; i<array_hasil.length; i++) { trace("rec_array --> nama : "+array_hasil[i].nama+" nilai : "+array_hasil[i].tempat+' ID '+array_hasil[i].id+' mulai '+array_hasil[i].mulai+' selesai '+array_hasil[i].selesai); } for (var i = 0; i<array_hasil.length; i++) { if (array_hasil[i].nama != array_hasil[i+1].nama) { if (cari_tiba0() == 'ada') { trace('ada yang tibanya NOL'); rec_array_hasil.push({nama:array_hasil[i].nama, id:array_hasil[i].id, nilai:array_hasil[i].tempat, mulai:'', selesai:array_hasil[i].tempat}); } else { rec_array_hasil.push({nama:array_hasil[i].nama, id:array_hasil[i].id, nilai:array_hasil[i].tempat, mulai:'', selesai:array_hasil[i].tempat+1}); } } } for (var i = 0; i<rec_array_hasil.length; i++) { trace("rec_array hasil--> proses: "+rec_array_hasil[i].nama+" nilai : "+rec_array_hasil[i].nilai+' mulai '+rec_array_hasil[i].mulai+' selesai '+rec_array_hasil[i].selesai); } trace('==================='); rec_array_hasil[0].mulai = array_hasil[0].mulai; for (var i = 1; i<rec_array_hasil.length; i++) { rec_array_hasil[i].mulai = rec_array_hasil[i-1].selesai; } for (var i = 0; i<rec_array_hasil.length; i++) { trace("hasil disederhanakan - > nama proses: "+rec_array_hasil[i].nama+' id '+rec_array_hasil[i].id+' mulai '+rec_array_hasil[i].mulai+' selesai '+rec_array_hasil[i].selesai); } array_id.push({id:rec_array_hasil[0].id});
172
for (var i = 1; i<rec_array_hasil.length; i++) { if (cari_id(rec_array_hasil[i].id) == 'tdk') { array_id.push({id:rec_array_hasil[i].id}); } } for (var i = 0; i<array_id.length; i++) { trace('array_id ID : '+array_id[i].id); } for (i=0; i<array.length; i++) { array_temp.push({name:array[i].name, AT:array[i].AT, ET:array[i].ET, id:array[i].id}); trace("array_temp -- nama: "+array_temp[i].name+" tiba: "+array_temp[i].AT+" eksekusi: "+array_temp[i].ET); } trace('panjang array_temp '+array_temp.length); for (var i = 0; i<rec_array_hasil.length; i++) { trace("hasil -- nama proses: "+rec_array_hasil[i].nama+' mulai '+rec_array_hasil[i].mulai+' selesai '+rec_array_hasil[i].selesai); } }
top related