1
SIMULASI READERS AND WRITERS PROBLEM DENGAN
MENGGUNAKAN METODE SEMAPHORE DAN METODE SLEEP
AND WAKE-UP
SKRIPSI
OCTAVIANUS SIANTURI
081401047
PROGRAM STUDI S1 ILMU KOMPUTER
FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI
UNIVERSITAS SUMATERA UTARA
MEDAN
2018
Universitas Sumatera Utara
2
SIMULASI READERS AND WRITERS PROBLEM DENGAN MENGGUNAKAN
METODE SEMAPHORE DAN METODE SLEEP AND WAKE-UP
SKRIPSI
Diajukan untuk melengkapi tugas akhir dan memenuhi syarat mencapai gelar
Sarjana Komputer
OCTAVIANUS SIANTURI
081401047
PROGRAM STUDI S1 ILMU KOMPUTER
FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI
UNIVERSITAS SUMATERA UTARA
MEDAN
2018
Universitas Sumatera Utara
3
PERSETUJUAN
Judul : SIMULASI READERS AND WRITERS PROBLEM
DENGAN MENGGUNAKAN METODE SEMAPHORE
DAN METODE SLEEP AND WAKE-UP
Kategori : SKRIPSI
Nama : OCTAVIANUS SIANTURI
Nomor Induk Mahasiswa : 081401047
Program Studi : SARJANA (S1) ILMU KOMPUTER
Departemen : ILMU KOMPUTER
Fakultas : ILMU KOMPUTER DAN TEKNOLOGI INFORMASI
(FASILKOM-TI) UNIVERSITAS SUMATERA UTARA
Diluluskan di
Medan, 03 Agustus 2018
Komisi Pembimbing :
Pembimbing II, Pembimbing I,
Herriyance, S.T, M.Kom Dr. Poltak Sihombing, M. Kom
NIP: 198010242010121002 NIP: 196203171991031001
Diketahui/Disetujui oleh
Program Studi S1 Ilmu Komputer
NIP. 196203171991031001
Universitas Sumatera Utara
4
PERNYATAAN
SIMULASI READERS AND WRITERS PROBLEM DENGAN MENGGUNAKAN
METODE SEMAPHORE DAN METODE SLEEP AND WAKE-UP
SKRIPSI
Saya menyatakan bahwa skripsi ini adalah hasil karya saya sendiri, kecuali beberapa
kutipan dan ringkasan yang masing-masing disebutkan sumbernya.
Medan,
OCTAVIANUS SIANTURI
081401047
Universitas Sumatera Utara
5
PENGHARGAAN
Puji dan syukur penulis ucapkan kepada Tuhan Yang Maha Esa atas limpahan rahmat,
kasih dan karunia-Nya sehingga penulis dapat menyelesaikan skripsi ini sebagai syarat
untuk memperoleh gelar Sarjana Komputer, Program Studi Ilmu Komputer Fakultas Ilmu
Komputer dan Teknologi Informasi Universitas Sumatera Utara.
Pada pengerjaan skripsi dengan judul Simulasi Readers and Writers dengan
Menggunakan Metode Semaphore dan Metode Sleep And Wake-up, penulis menyadari
bahwa banyak campur tangan pihak yang turut membantu dan memotivasi dalam
pengerjaannya. Dalam kesempatan ini, penulis mengucapkan terima kasih kepada:
1. Bapak Prof. Dr. Runtung Sitepu, S.H, M.Hum, selaku Rektor Universitas Sumatera
Utara.
2. Bapak Prof. Dr. Opim Salim Sitompul, M.Sc, selaku Dekan Fakultas Ilmu Komputer
dan Teknologi Informasi Universitas Sumatera Utara.
3. Bapak Dr. Poltak Sihombing, M.Kom, selaku Ketua Program Studi Ilmu Komputer
Fakultas Ilmu Komputer dan Teknologi Informasi Universitas Sumatera Utara.
4. Bapak Herriyance, S.T, M.Kom selaku Sekretaris Program Studi S1 Ilmu Komputer
Fakultas Ilmu Komputer dan Teknologi Informasi Universitas Sumatera Utara.
5. Bapak Dr. Poltak Sihombing, M.Kom dan Bapak Herriyance, S.T, M.Kom selaku
dosen pembimbing yang telah memberikan arahan dan motivasi kepada penulis dalam
pengerjaan skripsi ini.
6. Ibu Dr. Maya Silvi Lydia, M.Sc dan Ibu Sri Melvani Hardi, S.Kom, M.Kom sebagai
dosen penguji yang telah memberikan saran dan kritik kepada penulis dalam
penyempurnaan skripsi ini.
7. Seluruh dosen Program Studi S1 Ilmu Komputer Fasilkom-TI USU dan semua pegawai
Program Studi S1 Ilmu Komputer Fasilkom-TI USU.
8. Ayahanda G. Sianturi dan Ibunda N. Butarbutar yang telah memberikan do’a,
dukungan, perhatian serta kasih sayang yang tulus serta pengorbanan yang tidak ternilai
harganya.
9. Teman-teman seperjuangan mahasiswa S1-Ilmu Komputer stambuk 2008, Johannes
Hutabarat, Hermanda Simamora, Angga Ricardo Malau, Elieser Hutapea, Harry
Universitas Sumatera Utara
6
Davidson, Brikson Barus dan teman-teman lain yang telah memberikan motivasi,
arahan dan perhatiannya.
10. Teman-teman Komunitas Logic : Gunalan, Rivai, Samuel, Septian Maihadi, Septian
DC, Angga, Herman, Elieser, dan lain – lain yang selalu memberikan pencerahan,
pengarahan, dan membuat suasana pengerjaan skripsi lebih menyenangkan.
11. Adik-adik angkatan 2009, 2010 dan 2011 yang telah membakar semangat untuk
menyelesaikan penyelesaian skripsi ini.
12. Semua pihak yang terlibat langsung ataupun tidak langsung yang tidak dapat penulis
ucapkan satu per satu yang telah membantu penyelesaian skripsi ini.
Penulis menyadari bahwa skripsi ini masih jauh dari kesempurnaan, oleh karena itu penulis
menerima saran dan kritik yang bersifat membangun demi kesempurnaan skripsi ini.
Sehingga dapat bermanfaat bagi kita semuanya.
Medan, 3 Agustus 2018
Octavianus Sianturi
Universitas Sumatera Utara
7
ABSTRAK
Pada awalnya kebanyakan orang memakai konsep-konsep sinkronisasi yang sederhana
yang didukung oleh hardware, seperti pemakaian interrupt atau pemakaian rutin-rutin yang
mungkin telah diimplementasi oleh hardware. Pada tahun 1967, Djikstra mengajukan suatu
konsep pemakaian suatu variable integer untuk menghitung banyaknya proses yang sedang
aktif atau yang sedang tidak aktif. Tipe dari variable ini dinamakan semaphore.
Kebanyakkan semaphore juga digunakan untuk sinkronisasi dalam komunikasi antar
device perangkat. Pada kasus readers and writers berisi masalah mutual-exclusion dan
sinkronisasi. Kasus ini dapat diilustrasikan sebagai berikut, terdapat writers (ilustrasi dari
proses yang menyimpan informasi ke database) menghasilkan item (ilustrasi dari
informasi) dan readers (ilustrasi dari proses yang mengambil informasi dari database) yang
akan menggunakan item yang dihasilkan writers. Keduanya mempunyai database (ilustrasi
dari buffer) bersama dan berukuran tetap. Karena ukuran database terbatas, petaka
(bencana) dapat terjadi untuk readers dan writers. Masalah bagi writers terjadi ketika
database telah penuh, sementara writers ingin meletakkan barang ke database yang telah
penuh itu. Sedangkan masalah bagi writers terjadi ketika writers ingin mengambil barang
sementara database telah/sedang kosong.
Katakunci : Semaphore, Sleep and Wake-up, Sistem Operasi, Readers and Writers,
Mutual-exclusion, Sinkronisasi.
Universitas Sumatera Utara
8
Readers And Writers Problem Simulation by Using Semaphore Method and Sleep
And Wake-up Method
ABSTRACT
Initially most people wear simple synchronization concepts which supported by hardware,
like usage of routine usage or interrupt which implementation could have by hardware. In
the year 1967, Djikstra raise a concept of an integer variable to count to the number of
process which is active or which is not is active. Type of this variable is named by
semaphore. semaphore is also used for synchronization in communications between device.
In the case of Readers and Writers contains The problem of mutual-exclusion and
synchronization. This case can be illustrated as follows, there are writers (illustrations of
processes that store information do buffers) make item (illustrations of information) and
readers (illustrated from a process that retrieves information from a buffer) that will use
item produced by writers. Both have a shared and fixed-size database (illustration of
buffers). Since database size is limited, disasters can occur for readers and writers. The
problem for writers occurs when the database is full, while the writers wants to put the item
into the already full database. While the problem for the readers occurs when the readers
wants to take the item while the database has / is empty.
Keywords: Semaphore, Sleep and Wake-up, Operating System, Readers and Writers,
Mutual-exclusion, Synchronization.
Universitas Sumatera Utara
9
DAFTAR ISI
Halaman
Persetujuan i
Pernyataan ii
Penghargaan iii
Abstrak v
Abstract vi
Daftar Isi vii
Daftar Tabel ix
Daftar Gambar x
Bab 1 Pendahuluan 1
1.1 Latar Belakang 1
1.2 Rumusan Masalah 2
1.3 Tujuan Penelitian 2
1.4 Manfaat Penelitian 2
1.5 Batasan Masalah 2
1.6 Metodologi Penelitian 3
1.7 Sistematika Penulisan 4
Bab 2 Landasan Teori 7
2.1 Sistem Operasi 7
2.2 Komponen Sistem Operasi 8
2.3 Proses 11
2.3.1 Keadaan Proses 12
2.3.2 Process Control Block (PCB) 14
2.3.3 Threads 15
2.4 Kongkurensi (Kebersamaan) 16
2.5 Sinkronisasi 17
2.5.1 Race Condition 17
2.5.2 Masalah Critical Section 19
2.5.3 Metode Semaphore 20
2.5.4 Metode Sleep and Wake-up 23
2.5.5 Kasus Readers and Writers 23
2.5.5.1 Penyelesaian dengan Sleep And Wake-up 24
2.5.5.2 Penyelesaian dengan Semaphore 26
2.5.5.3 Perbedaan antara Sleep and Wake-up dengan
Semaphore
28
2.6 Deadlock 29
2.6.1 Syarat-Syarat Terjadinya Deadlock 31
2.6.2 Metode Mengatasi Deadlock 32
2.6.3 Metode Pencegahan Deadlock 33
2.6.4 Metode Penghindaran Deadlock 35
2.6.5 Mendeteksi dan Memulihkan Deadlock 36
Universitas Sumatera Utara
10
2.7 Animasi 38
Bab 3 Analisis Dan Perancangan Sistem 39
3.1 Analisis Sistem 39
3.1.1 Analisis Masalah 39
3.1.2 Analisis Persyaratan 40
3.1.2.1 Analisis Persyaratan Fungsional 40
3.1.2.2 Analisis Persyaratan Nonfungsional 41
3.1.3 Analisis Proses Aplikasi Simulasi 42
3.1.3.1 Penggambaran Objek Animasi 43
3.1.3.2 Proses Simulasi Readers and Writers Problem 46
3.1.4 Algoritma Pengaturan Pergerakan 48
3.1.4.1 Algoritma Pengaturan Pergerakan Writers 48
3.1.4.2 Algoritma Pengaturan Pergerakan Readers 52
3.2 Perancangan Sistem 56
3.2.1 Form Input 57
3.2.2 Form Simulasi 59
3.2.3 Form Tabel 60
3.2.4 Form Log 61
3.2.5 Form About 62
Bab 4 Implementasi dan Pengujian Sistem 64
4.1 Implementasi Sistem 64
4.1.1 Form Input 64
4.1.2 Form Simulasi 65
4.1.3 Form Tabel 66
4.1.4 Form Log 67
4.1.5 Form About 68
4.2 Hasil Pengujian Sistem Simulasi 69
Bab 5 Kesimpulan Dan Saran 77
5.1 Kesimpulan 77
5.2 Saran 77
Daftar Pustaka 79
Lampiran 81
Universitas Sumatera Utara
11
Daftar Tabel
Halaman
2.1 Tabel Deadlock 35
3.1 Tabel Gambar Objek Simulasi 44
Universitas Sumatera Utara
12
DAFTAR GAMBAR
Halaman
2.1 Diagram Keadaan Proses 13
2.2 Process Control Block 15
2.3a Race Condition 18
2.3b Race Condition 19
2.4 Skema Solution masalah Readers and Writers dengan Sleep and
Wake-up
25
2.5 Skema Solution masalah Readers and Writers dengan
Semaphore
26
2.6a Deadlock 30
2.6b Deadlock 30
2.7 Graph Deadlock 31
2.9 Contoh Animasi Keyframe 38
3.1 Diagram Ishikawa Analisis Masalah 40
3.2 Diagram Hierarki 43
3.3 Rancangan Form Input 57
3.4 Rancangan Form Simulasi 59
3.5 Rancangan Form Tabel Simulasi 61
3.6 Rancangan Form Log/Laporan 62
3.7 Rancangan Form About 63
4.1 Form Input 65
4.2 Form Simulasi 66
4.3 Form Tabel 67
4.4 Form Log 68
4.5 Form About 68
4.6 Form Input (Pengujian Program) 69
4.7 Form Simulasi sebelum proses simulasi dimulai 70
4.8 Form Simulasi ketika writers berada dalam keadaan tidur (sleep) 70
4.9 Form Simulasi ketika readers berada dalam keadaan tidur (sleep) 71
4.10 Form Log Hasil Simulasi 75
4.11 Form Tabel Hasil Simulasi 76
Universitas Sumatera Utara
13
BAB I
PENDAHULUAN
1.1 Latar Belakang
Dalam sistem operasi, proses - proses dapat bekerja bersama untuk mencapai tujuan yang
dibutuhkan. Agar tujuan tercapai secara benar, proses-proses tersebut harus mensinkronkan
kegiatan - kegiatannya sehingga terkendali dengan baik untuk tidak mengalami kondisi
deadlock.
Permasalahan readers and writers digunakan sebagai ilustrasi pembahasan
sinkronisasi. Permasalahan readers and writers berisi masalah mutual-exclusion dan
sinkronisasi. Permasalahan ini sering juga disebut sebagai bounded-buffer problem
(masalah buffer dengan jumlah terbatas). Permasalahan ini dapat digambarkan sebagai
berikut, terdapat penulis (ilustrasi dari proses yang menyimpan informasi ke buffer)
menghasilkan buku (ilustrasi dari informasi) dan pembaca (ilustrasi dari proses yang
mengambil informasi dari buffer) yang akan memakai buku yang dihasilkan penulis.
Keduanya mempunyai database (ilustrasi dari buffer) bersama dan berukuran tetap. Karena
ukuran database terbatas, petaka (bencana) dapat terjadi untuk readers dan writers.
Masalah bagi writers terjadi ketika database telah penuh, sementara writers ingin
meletakkan buku ke database yang telah penuh itu. Sedangkan masalah bagi readers terjadi
ketika readers ingin mengambil barang sementara database telah/sedang kosong.
Universitas Sumatera Utara
14
Berdasarkan hal tersebut, penulis ingin merancang aplikasi yang mampu untuk
mensimulasikan readers and writers problem dengan menggunakan metode Semaphore
dan metode Sleep and Wake-up.
1.2 Rumusan Masalah
Berdasarkan latar belakang pemilihan judul, maka yang menjadi permasalahan adalah
Bagaimana mencegah deadlock pada proses antara readers dan writers dalam simulasi
dengan menggunakan metode sleep and wake-up untuk mencegah dan metode semaphore
untuk mensinkronkan.
1.3 Tujuan Penelitian
Tujuan dari penelitian ini adalah untuk merancang suatu aplikasi simulasi Readers and
Writers Problem dengan menerapkan metode semaphore dan metode sleep and wake-up.
1.4 Manfaat Penelitian
Manfaat dari penelitian ini, yakni :
1. Memberi pemahaman terhadap Readers and Writers Problem.
2. Mendukung dalam proses pemahaman, terutama mengenai topik sinkronisasi
proses - proses dalam perkuliahan Sistem Operasi.
1.5 Batasan Masalah
Batasan masalah yang menjadi acuan dalam pengerjaan skripsi ini sebagai berikut :
Universitas Sumatera Utara
15
1. Metode sleep and wakeup dan metode semaphore yang digunakan untuk mengatasi
permasalahan readers and writers problem.
2. Untuk input pada aplikasi dapat dimasukkan secara manual atau secara acak (random)
oleh pengguna.
3. Batas jumlah readers minimal 1 orang dan maksimal 6 orang.
4. Batas jumlah writers minimal 1 orang dan maksimal 6 orang.
5. Batas maksimal dan minimal dalam 1 kali penulisan dapat ditentukan dengan minimal
1 item sampai maksimum 100 item.
6. Batas maksimal dan minimal dalam 1 kali pembacaan dapat ditentukan dengan minimal
1 item sampai maksimum 100 item.
7. Lama proses membaca dan menulis diatur oleh aplikasi secara acak.
8. Dalam simulasi buffer diilustrasikan sebagai sebuah database.
9. Batas maksimal dan minimal ukuran dari database (buffer) dapat ditentukan dengan
minimal 1 item sampai maksimal 100 item.
10. Jenis item hanya terdapat sebanyak 5 jenis.
11. Aplikasi akan menampilkan proses yang terjadi dalam bentuk animasi gambar.
12. Aplikasi akan menampilkan laporan (log) mengenai proses-proses yang terjadi selama
simulasi.
13. Animasi dapat diatur kecepatannya secara manual.
14. Lama waktu proses simulasi dapat di-input-kan secara manual.
1.6 Metodologi Penelitian
Metodelogi penelitian yang akan digunakan adalah :
Universitas Sumatera Utara
16
1. Studi Literatur
Penulisan ini dimulai dengan pengumpulan bahan – bahan referensi dari
berbagai sumber seperti buku, jurnal ilmiah, makalah, halaman web, dan lain-
lain yang berkaitan dengan sistem operasi dan readers and writers problem
sehingga tercapai tujuan dari penulisan tugas akhir ini.
2. Analisis dan Perancangan Sistem
Pada tahap ini dilakukan analisis kebutuhan terhadap sistem dan menjadi dasar
untuk perancangan sistem disertai pembuatan flowchart, diagram unified
modeling language (UML), design interface, dan pseudocode.
3. Implementasi Sistem
Pada tahap ini dilakukan implementasi sistem sesuai rancangan yang telah
dibangun sebelumnya.
4. Pengujian Sistem
Pada tahap ini dilakukan pengujian terhadap sistem yang dibangun. Apakah
sistem dapat melakukan simulasi sesuai dengan yang diinginkan dan
memperbaiki kesalahan (error) yang muncul.
5. Dokumentasi dan Laporan Akhir
Melakukan dokumentasi hasil implementasi dan pengujian sistem secara tertulis
dalam bentuk laporan skripsi.
1.7 Sistematika Penulisan
Untuk membuat penulisan ini lebih terstruktur, maka penulisan ini dibagi menjadi lima,
yaitu sebagai berikut ini :
Universitas Sumatera Utara
17
BAB 1 : PENDAHULUAN
Pada bab ini berisi penjelasan mengenai latar belakang masalah, perumusan
masalah, tujuan penelitian, manfaat penelitian, metodelogi penelitian, dan
sistematika penulisan.
BAB 2 : LANDASAN TEORI
Pada bab ini berisi penjelasan mengenai teori yang berkaitan dengan
penelitian, diantaranya yaitu teori sistem operasi, teori proses, teori
kongkurensi, teori sinkronisasi, metode semaphore, metode sleep and wake-
up, dan teori – teori lainnya.
BAB 3 : ANALISIS DAN PERANCANGAN SISTEM
Pada bab ini berisi penjelasan mengenai analisis masalah dan segala hal
yang berkaitan dengan sistem yang dibangun, serta menjelaskan cara kerja
sistem , kemudian dilanjutkan dengan perancangan antarmuka sistem.
BAB 4 : IMPLEMENTASI DAN PENGUJIAN SISTEM
Pada bab ini berisi penjelasan mengenai implementasi sistem dengan
menggunakan bahasa pemrograman Microsoft Visual Studio 2012 (C#)
berdasarkan tahapan perancangan sistem, kemudian dilakukan pengujian
sistem dengan perancangan yang dilakukan pada sebelumnya.
Universitas Sumatera Utara
18
BAB 5 : KESIMPULAN DAN SARAN
Pada bab ini berisi kesimpulan yang diperoleh dalam penelitian dan saran
yang diberikan untuk pengembangan lebih lanjut.
Universitas Sumatera Utara
19
BAB II
LANDASAN TEORI
2.1 Sistem Operasi
Sistem operasi adalah antarmuka utama yang digunakan dalam berhubungan dengan sistem
komputer. Sebelum ada sistem operasi, orang hanya dapat mengoperasikan komputer
dengan menggunakan sinyal analog dan sinyal digital. Seiring dengan perkembangan
pengetahuan dan teknologi, maka bermunculanlah berbagai sistem operasi yang
menyediakan lingkungan untuk mengoperasikan komputer secara lebih mudah (user
friendly). Untuk lebih memahami sistem operasi maka ada sebaiknya perlu dipahami
terlebih dahulu beberapa konsep – konsep dasar mengenai sistem operasi itu sendiri.
Pengertian sistem operasi secara umum adalah sebagai resource manager yaitu
pengelola seluruh sumber daya yang terdapat pada sistem komputer dan sebagai extended
machine yaitu menyediakan sekumpulan layanan ke pemakai sehingga memudahkan dan
menyamankan penggunaan serta pemanfaatan sumber daya sistem komputer.
Sistem operasi memiliki 3 sasaran utama sebagai berikut :
1. Kenyamanan, membuat penggunaan komputer menjadi lebih nyaman
2. Efisiensi, penggunaan sumber daya sistem komputer secara efisien.
3. Evolusi, sistem operasi harus dibangun sehingga memungkinkan dan memudahkan
pengembangan, pengujian dan pengajuan sistem – sistem yang baru.
Universitas Sumatera Utara
20
2.2 Komponen Sistem Operasi
Menurut Abraham Silberschatz, Peter Baer Galvin, dan Greg Gagne (2005,hal: 82-89),
pada umumnya sebuah sistem operasi modern mempunyai komponen sebagai berikut:
1. Manajemen Proses.
Proses adalah satu program yang sedang dalam keadaan eksekusi. Suatu proses
membutuhkan satu atau beberapa sumber daya untuk menyelesaikan tugasnya. Sumber
daya tersebut dapat berupa CPU time, memori, berkas-berkas, atau perangkat-
perangkat Input/Output (I/O). Sistem operasi bertanggung jawab atas aktivitas -
aktivitas yang berkaitan dengan manajemen proses sebagai berikut :
a. Pembuatan dan penghapusan proses pengguna dan sistem proses.
b. Penundaan atau pelanjutan proses.
c. Penyedia mekanisme untuk :
Sinkronisasi antar proses.
Komunikasi antar proses.
penanganan deadlock.
2. Manajemen Memori Utama.
Memori utama atau lebih dikenal sebagai memori adalah suatu array besar yang terdiri
dari word atau byte, yang ukurannya dapat mencapai ratusan, ribuan, atau bahkan
jutaan. Setiap word atau byte mempunyai alamat tersendiri. Memori utama berfungsi
sebagai tempat penyimpanan yang akses datanya digunakan oleh CPU atau perangkat
I/O. Memori utama merupakan tempat penyimpanan data yang sementara (volatile),
artinya data dapat hilang begitu sistem dimatikan. Sistem operasi bertanggung jawab
atas aktivitas-aktivitas yang berkaitan dengan manajemen memori seperti:
Universitas Sumatera Utara
21
a. Melacak pemakaian ruang memori (siapa dan berapa besar?).
b. Memilih program – program mana yang akan di-load ke memori ketika bisa
digunakan.
c. Alokasi dan dealokasi ruang memori sesuai yang dibutuhkan.
3. Manajemen Penyimpanan Sekunder.
Data yang disimpan dalam memori utama bersifat sementara dan ukurannya sangat
kecil jika dibandingkan dengan keseluruhan data yang terdapat dalam komputer. Oleh
karena itu, untuk meyimpan keseluruhan data dan program komputer dibutuhkan
secondary storage yang bersifat non-volatile dan mampu menampung banyak data.
Contoh dari secondary storage adalah harddisk, disket, dan lain-lain. Sistem operasi
bertanggung jawab atas aktivitas-aktivitas yang berkaitan dengan disk-management,
yakni :
Manajemen ruang kosong.
Alokasi penyimpanan.
Penjadwalan disk.
4. Manajemen Sistem Input/Output (I/O).
Fungsi ini sering disebut device manager, dimana sistem operasi menyediakan "device
driver" yang umum sehingga operasi I/O dapat seragam (membaca atau menuliskan
data tanpa mempedulikan mekanisme kerja yang berbeda dari perangkat-perangkat I/O
yang ada). Contoh: pengguna menggunakan operasi yang sama untuk membaca berkas
pada harddisk, CD-ROM dan floppy disk. Komponen untuk sistem I/O terdiri dari :
a. Sistem Buffer : menampung sementara data dari/ke I/O devices.
Universitas Sumatera Utara
22
b. Spooling: melakukan penjadwalan pemakaian I/O sistem supaya pemakaian I/O
lebih efisien (antrian).
c. Driver: penerjemah instruksi antara sistem operasi dan I/O untuk dapat melakukan
operasi tertentu. Setiap perangkat keras I/O memiliki driver yang berbeda-beda.
5. Manajemen Berkas.
Berkas adalah kumpulan informasi yang dibuat dengan tujuan tertentu. Berkas
disimpan dalam struktur yang bersifat hirarkis, seperti direktori. Dalam manajemen
berkas, sistem operasi bertanggung jawab dalam melakukan :
a. Pembuatan dan penghapusan berkas.
b. Pembuatan dan penghapusan direktori.
c. Mendukung manipulasi berkas dan direktori.
d. Memetakan berkas pada secondary storage.
e. Backup berkas ke media penyimpanan yang permanen (non-volatile).
6. Sistem Proteksi.
Proteksi berkenaan dengan mekanisme untuk mengontrol akses yang dilakukan oleh
program, prosesor, atau pengguna ke sistem sumber daya. Mekanisme proteksi harus:
a. membedakan antara penggunaan yang sudah diberi izin dan yang belum.
b. menetapkan pembatasan atau pengaturan yang telah ditentukan (specify the
controls to be imposed).
c. menyediakan tata cara pelaksanaan (provide a means of enforcement).
7. Sistem Terdistribusi (Jaringan).
Sistem ini untuk mendukung penggunaan jaringan. Sistem ini umumnya kini telah
terpadu dalam sistem operasi karena kebutuhan kinerjanya serta kebutuhan komputasi
Universitas Sumatera Utara
23
telah menghendaki kemampuan ini terdapat di dalam sistem komputer. Sistem ini
menyediakan akses pengguna ke bermacam sumber-daya sistem. Sistem ini membawa
keuntungan dalam hal sebagai berikut :
a. Peningkatan kecepatan komputasi (computation speed-up).
b. Peningkatan penyediaaan data (increased data availability).
c. Peningkatan keandalan (enhanced reliability).
8. Sistem Command – Interpreter.
Sistem Operasi menunggu instruksi dari pengguna (command driven). Program yang
membaca instruksi dan mengartikan control statements (keinginan pengguna)
umumnya disebut control-card interpreter atau command-line interpreter atau UNIX
shell. User Interface sangat bervariasi dari satu sistem operasi ke sistem operasi yang
lain dan disesuaikan dengan tujuan dan teknologi I/O devices yang ada. Contohnya:
Command Line Interface (CLI), Graphical User Interface (GUI), dan lain-lain.
2.3 Proses
Proses merupakan konsep pokok dalam sistem operasi. Konsep ini pertama kali dipakai di
sistem operasi Multics pada tahun 60-an. Hal yang penting dalam perancangan sistem
operasi semuanya berkaitan dengan manajemen proses.
Terdapat beragam definisi proses. Salah satunya adalah suatu program yang sedang
dieksekusi. Proses merupakan unit kerja terkecil yang secara individu memiliki sumber
daya – sumber daya dan dijadwalkan sistem operasi. Sistem operasi mengelola semua
proses dalam komputer dan mengalokasikan sumber daya ke proses-proses sesuai
kebijaksanaan yang digunakan / diterapkan untuk memenuhi sasaran sistem.
Universitas Sumatera Utara
24
Program sendiri bukanlah suatu proses. Suatu program adalah satu entitas
pasif/statis yang terletak di dalam suatu file, seperti isi dari sebuah berkas yang disimpan
dalam disket. Suatu proses merupakan suatu entitas aktif/dinamis karena dalam keadaan
tereksekusi, dengan sebuah program counter yang menunjuk pada instruksi selanjutnya
untuk dijalankan dan seperangkat sumber daya/resource yang berkenaan dengannya.
Walau lebih dari satu proses dapat dihubungkan dengan sebuah program yang sama,
program tersebut dianggap merupakan urutan- urutan eksekusi yang berbeda. Sebagai
contoh, beberapa pengguna dapat menjalankan copy yang berbeda pada mail program, atau
pengguna yang sama dapat meminta banyak copy dari program editor. Tiap-tiap proses ini
adalah proses yang berbeda walaupun bagian tulisan text yang dikerjakan adalah sama.
Adalah hal yang umum untuk memiliki proses yang menghasilkan banyak proses saat suatu
proses tersebut dieksekusi.
2.3.1 Keadaan Proses
Pada saat proses dieksekusi, proses tersebut dapat berubah statusnya (state). Status dari
sebuah proses didefinisikan oleh aktivitas yang sedang bekerja dalam proses tersebut.
Status dari suatu proses berupa sebagai berikut :
1. New : Proses baru saja dibuat.
2. Running : Pemroses sedang mengeksekusi intruksi proses tersebut.
3. Waiting (blocked) : Proses sedang menunggu sejumlah event/kejadian untuk
melengkapi tugasnya. Contoh proses menunggu :
Selesainya operasi perangkat masukan/keluaran (I/O)
Tersedianya memori
Universitas Sumatera Utara
25
Tibanya pesan jawaban
4. Ready : Proses siap (ready) dieksekusi, tapi pemroses belum tersedia untuk eksekusi
proses ini sama dengan proses sedang menunggu jatah waktu dari pemroses untuk
dieksekusi.
5. Terminated : Proses telah selesai dieksekusi.
Penting untuk disadari bahwa hanya satu proses dapat berjalan pada suatu prosesor pada
satu waktu. Namun, banyak proses yang dapat berstatus ready atau waiting. Diagram
keadaan proses dangan status-status tersebut dapat dilihat pada gambar berikut ini
(Silberschatz, 2005, hal: 135).
Gambar 2.1 Diagram keadaan Proses
2.3.2 Process Control Block (PCB)
Parameter-parameter suatu proses dicatat dalam bagian yang biasanya disebut process
control block (PCB). PCB berisikan informasi – informasi yang berhubungan dengan
sebuah proses yang spesifik, termasuk hal – hal di bawah ini :
Universitas Sumatera Utara
26
1. Status proses, yaitu keadaan pada proses: new, ready, running, waiting, halted, dan
juga banyak lagi.
2. Program counter, suatu stack yang berisikan alamat (address) berikutnya yang
akan dieksekusi oleh proses tersebut.
3. CPU register, register tersebut termasuk accumulator, register indeks, stack
pointer, general – purpose register, ditambah code information pada kondisi
apapun. Beserta dengan program counter, keadaan/status informasi harus disimpan
ketika gangguan terjadi, untuk memungkinkan proses tersebut berjalan/bekerja
dengan benar setelahnya.
4. Informasi penjadwalan CPU, informasi ini berisi prioritas dari suatu proses, pointer
ke antrian penjadwalan, dan beberapa parameter penjadwalan yang lainnya.
5. Informasi manajemen memori, dapat termasuk suatu informasi sebagai nilai dari
dasar dan batas register, tabel halaman, atau tabel segmen tergantung pada sistem
memori yang digunakan oleh sistem operasi.
6. Informasi pencatatan, berupa informasi jumlah dari CPU dan waktu riil yang
digunakan, batas waktu, jumlah akun, jumlah job/proses, dan banyak lagi.
7. Informasi status I/O, termasuk daftar dari perangkat I/O yang digunakan pada
proses ini, daftar berkas – berkas yang sedang diakses, dan banyak lagi.
Gambaran suatu process control block (PCB) dapat dilihat pada gambar 2.2 sebagai
berikut (Silberschatz, 2005, hal: 136).
Universitas Sumatera Utara
27
Gambar 2.2 Process Control Block
2.3.3 Threads
Thread adalah abstraksi dari unit aktivitas (penjadwalan). Sebuah proses dapat memiliki
lebih dari satu thread. Sistem yang memungkinkan lebih dari satu thread dieksekusi secara
bersamaan disebut multithreading. Pada multiprocessors, thread-thread dalam satu proses
dapat berjalan secara paralel dalam waktu yang sama.
Thread (sering disebut Light Weight Process (LWP)) adalah unit dasar utilisasi
pemroses dan berisi program counter, register set, dan stack space. Thread-thread dalam
satu proses berbagi (memakai bersama) bagian kode, data dan sumber daya sistem operasi
seperti file dan signal. Multithreading merupakan upaya meningkatkan kinerja sistem
komputer, disebabkan oleh sebagai berikut :
1. Penciptaan thread baru lebih cepat dibanding penciptaan proses baru.
2. Terminasi thread lebih cepat dibanding pengakhiran proses.
3. Pengalihan ke thread lain di satu proses lebih cepat dibanding beralih dari satu proses
ke proses lain.
Universitas Sumatera Utara
28
4. Thread-thread pada satu proses dapat berbagi kode, data dan sumber daya lain secara
nyaman dan efisien dibanding proses-proses terpisah.
2.4 Kongkurensi (Kebersamaan)
Kongkurensi merupakan landasan umum dalam perancangan suatu sistem operasi. Proses-
proses disebut kongkuren jika proses-proses (lebih dari 1 proses) berada pada saat yang
sama. Proses-proses konkuren dapat sepenuhnya tak bergantung dengan lainnya tapi dapat
juga saling berinteraksi/kerjasama. Proses – proses yang berinteraksi memerlukan
sinkronisasi/koordinasi agar terkendali dengan baik.
Kongkurensi meliputi hal-hal berikut :
1. Alokasi waktu pemroses untuk proses-proses.
2. Pemakaian bersama dan persaingan untuk mendapatkan sumber daya.
3. Komunikasi antar proses.
4. Sinkronisasi aktivitas banyak proses.
Kongkurensi dapat muncul pada 3 konteks yang berbeda, yaitu:
1. Banyak aplikasi (multiple application)
Multiprogramming memungkinkan banyak proses sekaligus sehingga terdapat
banyak aplikasi yang dijalankan pada sistem komputer. Banyak proses ini juga
sangat berguna untuk sistem komputer tunggal (single user) karena sambil
menunggu proses selesainya layanan (misal transfer berkas oleh modem atau
pencetakan oleh printer) pemakai dapat berinteraksi dengan aplikasi lain seperti
aplikasi game atau mengetik pada text editor.
2. Aplikasi terstruktur
Universitas Sumatera Utara
29
Pengembangan prinsip – prinsip perancangan modular dan pemrograman
terstruktur adalah suatu aplikasi dapat secara efektif diimplementasikan sebagai
sekumpulan proses aplikasi. Dengan sekumpulan proses – proses, maka tiap proses
mempunyai satu layanan khusus yang ditentukan.
3. Strukturisasi sistem operasi
Keunggulan-keunggulan strukturisasi dapat juga diaplikasikan ke pemrograman
sistem. Beberapa sistem operasi terbaru yang dipasarkan dan dalam riset telah
diimplementasikan sebagai sekumpulan proses.
2.5 Sinkronisasi
Akses-akses yang dilakukan secara bersamaan ke data yang sama dapat menyebabkan data
menjadi tidak konsisten. Untuk menjaga agar data tetap konsisten, maka dibutuhkan suatu
mekanisme untuk memastikan data yang diminta oleh proses yang bekerja selalu dalam
keadaan aktual. Hal inilah yang melatarbelakangi munculnya sinkronisasi dalam sistem
operasi.
2.5.1 Race Condition
Dalam sistem operasi terdapat race condition, yang merupakan sebuah kondisi dimana
terdapat 2 atau lebih proses membaca atau menulis data/variabel yang digunakan bersama
dan hasilnya tergantung dari proses mana yang terakhir menggunakan data tersebut.
Misalkan ada sebuah algoritma read (x), x = x + 1, dan write (x) yang akan diakses oleh 2
proses yaitu P1 dan P2. Masalah terjadi ketika P1 membaca input variabel yang digunakan
Universitas Sumatera Utara
30
bersama, yaitu x (merupakan critical section) dan mulai operasi penambahan, kemudian P2
juga membaca input variabel tersebut sebelum P1 dapat menampilkannya ke layar monitor.
Gambar 2.3a Race Condition
Proses P1 membaca nilai variabel x yang diinputkan, misal : 3
Proses P1 menjalankan operasi penambahan sehingga x bertambah 1, menjadi 4
Proses P2 membaca nilai variabel x yang diinputkan, misal : 5. Terjadi masalah
untuk P1 karena variabel x yang seharusnya 4 menjadi 5
Proses P2 menjalankan operasi penambahan sehingga x bertambah 1, menjadi 6
Proses P1 mencetak variabel x yang hasilnya adalah 6 yang merupakan nilai yang
salah bagi P1, seharusnya 4.
Proses P2 mencetak variabel x yang hasilnya adalah 6 yang merupakan nilai yang
benar bagi P2.
Untuk mengatasi race condition adalah dengan meyakinkan bahwa hanya ada 1 proses saja
yang akan mengeksekusi critical section. Dengan kata lain, proses akan mengeksekusi
critical section secara sekuensial (berurutan), tidak secara paralel (bersamaan) yang disebut
mutual exlusion.
Universitas Sumatera Utara
31
Gambar 2.3b Race Condition
Mutual exclusion dapat dikerjakan dengan membuat eksekusi seluruh critical section
menjadi eksekusi tunggal di data / variabel yang digunakan bersama sehingga tidak dapat
dikerjakan oleh proses yang lain pada saat yang sama. Eksekusi tunggal ini disebut dengan
atomic action.
2.5.2 Masalah Critical Section
Critical Section adalah bagian dari proses yang memerlukan mutual exclusion.
Secara umum, penyelesaian critical section harus memperhatikan 3 kondisi, yaitu:
1. Mutual exclusion, jika suatu proses sedang mengerjakan critical section, maka tidak
boleh ada proses lain yang masuk (mengerjakan) critical section tersebut.
2. Progress, jika tidak ada suatu proses yang mengerjakan critical section dan ada
beberapa proses yang akan masuk ke critical section, maka hanya proses-proses
yang sedang berada pada entry-section saja yang boleh berkompetisi dan
mengerjakan critical section.
3. Bounded Waiting, besarnya waktu tunggu dari suatu proses yang akan memasuki
critical section sejak proses itu meminta izin untuk mengerjakan critical section,
hingga permintaan itu dipenuhi.
Universitas Sumatera Utara
32
2.5.3 Metode Semaphore
Semaphore adalah pendekatan yang diajukan oleh Djikstra (1965) untuk menangani
permasalahan critical section. Untuk berbagi pakai sumber daya, proses harus memecahkan
masalah mutual exclusion. Sedangkan untuk bekerja sama dalam suatu tugas, proses harus
masalah pen-signal-an. Oleh karena itu muncul variabel sederhana yang disebut
semaphore. Prinsip dasar semaphore adalah dua atau lebih proses bekerja sama dengan
signal yang sederhana, misal proses dipaksa untuk berhenti di tempat yang ditunjuk sampai
menerima suatu signal khusus. Untuk mengirim signal lewat semaphore, proses
mengeksekusi signal yang sederhana. Untuk menerima signal lewat semaphore, proses
mengeksekusi operasi wait() yang sederhana. Jika signal yang bersangkutan belum
dikirimkan, maka proses ditunda sampai pengiriman datang.
Semaphore dapat dianalogikan dengan sebuah kunci yang tergantung pada
gantungan. Ketika proses memanggil wait(); hal ini berarti kita sedang mencari kunci di
gantungan. Jika kunci ada di gantungan, maka kunci diambil dan pemanggil wait() akan
melanjutkan tugasnya. Jika kunci tersebut tidak ada, maka pemanggil wait() akan
menunggu di sekitar gantungan sampai kunci dipasangkan kembali ke gantungan.
Pemanggil signal() yang akan menempatkan kunci kembali di gantungan. Semaphore
memiliki 2 sifat, yaitu :
1. Semaphore dapat diinisialisasi dengan nilai non-negatif.
2. Terdapat 2 operasi terhadap semaphore, yaitu :
Operasi Down / operasi wait() mengurangkan nilai semaphore. Jika nilai
semaphore menjadi negatif maka proses yang mengeksekusi wait() diblok.
Universitas Sumatera Utara
33
procedure wait (var sem : semaphore);
begin
enter_kernel;
sem.count = sem.count - 1;
if sem.count < 0 then
begin
place the current task on
the sem.blocked_list;
call dispatcher - choose
another task to run;
end; (*if*)
leave_kernel;
end; (*wait*)
Operasi Up / operasi signal() menambahkan nilai semaphore. Jika nilai
semaphore menjadi negatif maka proses yang diblok oleh operasi wait()
dibebaskan (tidak diblok lagi).
procedure signal (var sem : semaphore);
begin
enter_kernel;
sem.count = sem.count + 1;
Universitas Sumatera Utara
34
if sem.blocked_list is non-empty
then
remove a task from the top of the
blocked queue and place it on the top of
priority queue - i.e. mark it ready call
dispatcher (if pre-emptive task switch is
to occur);
end; (*if*)
leave_kernel;
end; (*signal*)
Sebelum masuk ke critical section, proses melakukan operasi wait. Bila berhasil maka
proses masuk critical section. Bila tidak berhasil maka proses di-block pada semaphore itu.
Proses yang di-block akan dapat melanjutkan kembali bila proses sudah keluar dari critical
section dan melakukan operasi signal sehingga menjadikan proses yang di-block ready dan
berlanjut hingga operasi wait berhasil.
2.5.4 Metode Sleep and Wake-up
Permasalahan yang terjadi dalam multithreading dapat dikendalikan dengan sinkronisasi.
Sinkronisasi tersebut akan memastikan thread - thread mana saja yang akan dieksekusi
Universitas Sumatera Utara
35
terlebih dulu dan menyimpan data eksekusi sehingga pada saat prosesnya tiba data tersebut
dapat dipanggil dan eksekusinya dapat dilanjutkan. Metode sleep and wake-up merupakan
metode sinkronisasi yang paling sederhana (Kumar, 2004). Metode ini mempunyai 2
tahapan sebagai berikut :
1. Sleep merupakan suatu system call yang menyebabkan pemanggilnya masuk ke
state blocked.
2. Wake-up merupakan suatu system call yang membangunkan proses yang sedang
blocked (membuat proses yang memanggil menjadi ready).
Prosedurnya yakni proses akan diblok/tidur (sleep) ketika tidak dapat memasuki critical
section-nya dan akan dibangunkan (wake-up)/ready manakala sumber daya yang
diperlukan telah tersedia. Kedua rutin tersebut bersifat atomic yaitu dimana saat rutin
dieksekusi maka tidak ada interupsi yang dapat menghentikanya.
2.5.5 Kasus Readers and Writers
Masalah readers and writers adalah salah satu masalah sinkronisasi klasik yang sering
digunakan untuk mendiskusikan dan membandingkan berbagai cara untuk menyelesaikan
masalah sinkronisasi. Secara singkat, masalah ini terjadi ketika ada beberapa pembaca dan
penulis ingin mengakses suatu berkas pada saat bersamaan.
Perkiraan dalam readers and writers problem adalah sebagai berikut:
1. Terdapat 2 proses menggunakan suatu buffer yang dipakai bersama dan berukuran
tetap.
2. Satu proses adalah writers yang meletakkan data ke buffer.
3. Proses lain adalah readers yang mengambil data dari buffer.
Universitas Sumatera Utara
36
Masalah readers and writers dapat dikembangkan menjadi masalah yang memiliki m buah
penulis dan n buah pembaca. Karena buffer terbatas, masalah berikut dapat terjadi, yaitu:
1. Masalah untuk writers.
Masalah terjadi ketika buffer telah penuh, sementara writers ingin meletakkan data ke
buffer yang telah penuh itu.
2. Masalah untuk readers.
Masalah terjadi ketika readers ingin mengambil data sementara buffer telah/sedang
kosong.
Kedua proses perlu sinkronisasi agar keduanya dapat terhindar dari masalah.
2.5.5.1 Penyelesaian Kasus Readers and Writers dengan Sleep and Wake-up
Penyelesaian ini memiliki dua rutin, yaitu sleep dan wake-up. Kedua rutin bersifat atomik,
yaitu saat rutin dieksekusi maka tak ada interupsi yang dapat mengganggunya. Sleep adalah
rutin yang menyebabkan pemanggil di-blocked, ditunda sampai proses lain membangunkan
(wake-up). Wake-up adalah rutin untuk membangunkan proses yang sedang berada dalam
status sleeping. Wake-up mempunyai satu parameter, yaitu proses yang dibangunkan.
Solusi penyelesaian dengan sleep and wake-up adalah sebagai berikut:
1. Solusi untuk masalah writers.
Writers memanggil sleep begitu mengetahui database/buffer telah penuh saat
writers akan menyimpan data ke buffer. Writers tidak lagi aktif kecuali dibangunkan
(wake-up), proses lain (readers) yang memberitahu bahwa satu item atau lebih sudah
Universitas Sumatera Utara
37
diambil dari database/buffer sehingga terdapat ruang bagi writers untuk menyimpan
data ke database/buffer.
2. Solusi untuk masalah readers.
Readers memanggil sleep begitu mengetahui database/buffer telah kosong saat
readers mengambil item. Readers tidak lagi aktif kecuali dibangunkan (wake-up)
proses lain (writers) yang memberitahu bahwa database/buffer telah terisi satu item
atau lebih sehingga terdapat data yang dapat diambil readers dari database/buffer.
const B = 100;
var
count : interger;
Buffer : array [0..B-1] of jenis_item;
procedure write_item;
(* menulis item baru *)
procedure put_item;
(* meletakkan item ke buffer *)
procedure read_item;
(* membaca item *)
procedure remove_item;
(* mengambil item dari buffer *)
procedure writers;
begin
write_item;
if count = B then
sleep();
put_item;
count = count + 1;
if count = 1 then
wakeup(readers);
end;
procedure readers;
begin
if count = 0 then
sleep();
Universitas Sumatera Utara
38
remove_item;
count = count - 1;
if count = B-1 then
wakeup(writers);
read_item;
end;
Gambar 2.4 Skema solution masalah Readers and Writers dengan
Sleep and Wake-up
2.5.5.2 Penyelesaian dengan Semaphore
Semaphore digunakan untuk mem-blocked writers atau readers lain ketika salah satu
writers atau readers sedang berada dalam database/buffer.
var
no_writers; io_permission : semaphore;
readers : record
in_progress : integer;
update_permission : integer;
end;
(* All Semaphore have an initial count = 1 and the semaphore
queue is initially empty. The initial value of
readers.in_progress is 0 *)
procedure write;
begin
wait(no_writers);
wait(io_permission);
Universitas Sumatera Utara
39
carry out the actual write operation;
signal(io_permission);
signal(no_writers);
end; (* write *)
procedure read;
begin
(* first the funny bit to make access fair for
writers - i.e. not to lock them out for too long. *)
wait(no_writers);
signal(no_writers);
(* now the protection to update the number of
readers accessing the database *)
wait(readers.update_permission);
if readers.in_progress = 0 then
wait(readers.update_permission);
readers.in_progress = readers.in_progress + 1;
signal(readers.update_permission);
now carry out the actual read operations;
(* now decrement the number of readers in progress
and check to see if there are any still left. if not then
signal that all io is finished *)
wait(readers.update_permission);
Universitas Sumatera Utara
40
readers.in_progress = readers.in_progress - 1;
if readers.in_progress = 0 then
signal(readers.io_permission);
signal(readers.update_permission);
end; (* read *)
Gambar 2.5 Skema solution masalah Readers and Writers dengan Sempahore
2.5.5.3 Perbedaan antara Sleep and Wake-up dengan Semaphore
Perbedaan antara Sleep and Wake-up dengan Semaphore adalah sebagai berikut:
1. Fungsi dari masing-masing metode.
a. Metode Sleep and Wake-up mencegah masalah yang terjadi ketika
database/buffer berada dalam keadaan penuh (sementara writers ingin
meletakkan data ke dalam database/buffer) dan database/buffer berada dalam
keadaan kosong (sementara readers ingin mengambil data dari
database/buffer).
b. Semaphore digunakan untuk mencegah writers dan readers mengakses dan
meng-update nilai database/buffer secara bersamaan, sehingga nilai
database/buffer menjadi tidak akurat.
2. Cara kerja dari masing-masing metode.
a. Cara kerja Sleep and Wake-up: writers memanggil sleep begitu mengetahui
database/buffer penuh saat writers akan meletakkan data ke database/buffer.
Writers tidak lagi aktif kecuali jika dibangunkan (wake-up) readers yang
memberitahu bahwa satu atau lebih item telah diambil dari database/buffer
Universitas Sumatera Utara
41
sehingga akan terdapat ruang bagi writers untuk meletakkan data ke
database/buffer tersebut. Readers memanggil sleep begitu mengetahui
database/buffer telah kosong saat readers mengambil item. Readers tidak lagi
aktif kecuali jika dibangunkan (wake-up) oleh writers yang memberitahu bahwa
database/buffer telah terisi satu atau lebih item sehingga terdapat data yang
dapat diambil readers dari database/buffer..
b. Cara kerja Semaphore : menjalankan operasi wait (s = s – 1) ketika akan
memasuki database/buffer dan operasi signal (s = s + 1) setelah keluar dari
database/buffer. Bila ada salah satu variabel yang ingin masuk ke
database/buffer, ketika variabel lain sedang di dalam database/buffer (nilai s <
0), maka variabel tersebut akan di-block hingga variabel yang masuk ke
database/buffer melakukan operasi signal untuk menaikkan nilai s.
2.6 Deadlock
Definisi deadlock adalah jika proses menunggu suatu kejadian tertentu yang tak akan
pernah terjadi. Sekumpulan proses berkondisi deadlock bila setiap proses yang ada di
kumpulan menunggu suatu kejadian yang hanya dapat dilakukan proses lain yang juga
berada di kumpulan itu. Proses menunggu kejadian yang tak akan pernah terjadi. Urutan
kejadian pengoperasian peralatan masukan / keluaran :
Meminta (request) : meminta pelayanan perangkat masukan/keluaran.
Memakai (use) : memakai perangkat masukan/keluaran.
Melepaskan (release) : melepaskan pemakaian perangkat masukan/keluaran.
Universitas Sumatera Utara
42
Sebagai contoh terdapat model deadlock 2 proses dan 2 sumber daya. Misalkan 2
proses sebagai P0 dan P1, sementara 2 sumber daya sebagai R0 dan R1. P0 meminta sumber
daya R0. Sumber daya R1 dialokasikan ke P1.
Gambar 2.6a Deadlock
Skenario yang menimbulkan deadlock adalah dimana P0 dialokasikan R0 dan P1
dialokasikanR1.
Gambar 2.6b Deadlock
Kemudian P0 sambil masih menggenggam R0, meminta R1 dan P1 sambil masih
menggenggam R1, meminta R0. Maka terjadilah deadlock karena sama – sama akan saling
menunggu. Terjadinya deadlock ditandai dengan adanya graph yang berbentuk lingkaran
seperti berikut ini.
Universitas Sumatera Utara
43
Gambar 2.7 Graph Deadlock
2.6.1 Syarat-Syarat Terjadinya Deadlock
Menurut Coffman (1971), ada empat syarat terjadinya deadlock, yakni :
1. Kondisi mutual exclusion (mutual exclution condition).
Tiap sumber daya saat itu diberikan pada tepat satu proses.
2. Kondisi genggam dan tunggu (hold and wait condition).
Proses – proses yang sedang mengenggam sumber daya, menunggu sumber daya –
sumber daya baru.
3. Kondisi non-preemption (non-preemption condition).
Sumber daya – sumber daya yang sebelumnya diberikan tidak dapat diambil paksa dari
proses itu. Sumber daya – sumber daya tersebut harus secara eksplisit dilepaskan dari
proses yang menggenggamnya.
4. Kondisi menunggu secara sirkuler (circular wait condition).
Harus terdapat rantai sirkuler dari dua proses atau lebih, masing – masing menunggu
sumber daya yang digenggam oleh anggota berikutnya pada rantai itu.
Ketiga syarat pertama merupakan syarat perlu (necessary condition) bagi terjadinya
deadlock. Keberadaan deadlock selalu berarti terpenuhi kondisi-kondisi di atas, tak
mungkin terjadi deadlock bila tidak ada ketiga kondisi itu. Deadlock terjadi berarti terdapat
ketiga kondisi itu, tetapi adanya ketiga kondisi itu belum berarti terjadi deadlock. Deadlock
baru benar-benar terjadi bila syarat keempat terpenuhi. Kondisi keempat merupakan
keharusan bagi terjadinya peristiwa deadlock. Bila salah satu kondisi saja tidak terpenuhi,
maka deadlock tidak terjadi.
Universitas Sumatera Utara
44
2.6.2 Metode Mengatasi Deadlock
Strategi untuk menghadapi deadlock dapat dibagi menjadi tiga pendekatan, yakni :
1. Mengabaikan adanya deadlock.
2. Memastikan bahwa deadlock tidak akan pernah ada dengan metode pencegahan, yaitu
mencegah empat syarat terjadinya deadlock agar deadlock tidak akan pernah terjadi
atau metode menghindari deadlock, yaitu mengizinkan empat kondisi deadlock, tetapi
menghentikan setiap proses yang kemungkinan mencapai deadlock.
3. Membiarkan deadlock untuk terjadi, pendekatan ini membutuhkan dua metode yang
saling mendukung, yaitu:
a. Pendeteksian deadlock, untuk mengidentifikasi ketika deadlock terjadi.
b. Pemulihan deadlock, mengembalikan kembali sumber daya yang dibutuhkan pada
proses yang memintanya.
2.6.3 Metode Pencegahan Deadlock
Metode ini merupakan metode yang paling sering digunakan. Metode pencegahan
dianggap sebagai solusi yang bersih dipandang dari sudut tercegahnya deadlock. Tetapi
pencegahan akan mengakibatkan kinerja utilisasi sumber daya yang buruk.
Metode pencegahan menggunakan pendekatan dengan cara meniadakan empat
syarat yang dapat menyebabkan deadlock terjadi pada saat eksekusi Coffman (1971).
Syarat pertama yang akan dapat ditiadakan adalah Mutual Exclusion, jika tidak ada sumber
Universitas Sumatera Utara
45
daya yang secara khusus diperuntukkan bagi suatu proses maka tidak akan pernah terjadi
deadlock. Namun jika membiarkan ada dua atau lebih proses mengakses sebuah sumber
daya yang sama akan menyebabkan chaos. Langkah yang digunakan adalah dengan
spooling sumber daya, yaitu dengan mengantrikan job-job pada antrian dan akan dilayani
satu-satu.
Beberapa masalah yang mungkin terjadi adalah:
1. Tidak semua dapat di-spool, tabel proses sendiri tidak mungkin untuk di-spool
2. Kompetisi pada ruang disk untuk spooling sendiri dapat mengarah pada deadlock
Hal inilah yang menyebabkan mengapa syarat pertama tidak dapat ditiadakan, jadi mutual
exclusion benar-benar tidak dapat dihilangkan.
Cara kedua dengan meniadakan kondisi hold and wait terlihat lebih menjanjikan.
Jika suatu proses yang sedang menggunakan sumber daya dapat dicegah agar tidak dapat
menunggu sumber daya yang lain, maka deadlock dapat dicegah. Langkah yang digunakan
adalah dengan membuat proses agar meminta sumber daya yang mereka butuhkan pada
awal proses sehingga dapat dialokasikan sumber daya yang dibutuhkan. Namun jika
terdapat sumber daya yang sedang terpakai maka proses tersebut tidak dapat memulai
prosesnya. Masalah yang mungkin terjadi:
1. Sulitnya mengetahui berapa sumber daya yang dibutuhkan pada awal proses.
2. Tidak optimalnya pengunaan sumber daya jika ada sumber daya yang digunakan
hanya beberapa waktu dan tidak digunakan tapi tetap dimiliki oleh suatu proses
yang telah memintanya dari awal.
Meniadakan syarat ketiga non preemptive ternyata tidak lebih menjanjikan dari
meniadakan syarat kedua, karena dengan meniadakan syarat ketiga maka suatu proses
Universitas Sumatera Utara
46
dapat dihentikan ditengah jalan. Hal ini tidak dimungkinkan karena hasil dari suatu proses
yang dihentikan menjadi tidak baik.
Cara terakhir adalah dengan meniadakan syarat keempat circular wait. Terdapat
dua pendekatan, yaitu:
1. Mengatur agar setiap proses hanya dapat menggunakan sebuah sumber daya pada
suatu waktu, jika menginginkan sumber daya lain maka sumber daya yang dimiliki
harus dilepas.
2. Membuat penomoran pada proses-proses yang mengakses sumber daya. Suatu
proses dimungkinkan untuk dapat meminta sumber daya kapan pun, tetapi
permintaannya harus dibuat terurut.
Masalah yang mungkin terjadi dengan mengatur bahwa setiap proses hanya dapat memiliki
satu proses adalah bahwa tidak semua proses hanya membutuhkan satu sumber daya, untuk
suatu proses yang kompleks dibutuhkan banyak sumber daya pada saat yang bersamaan.
Sedangkan dengan penomoran masalah yang dihadapi adalah tidak terdapatnya suatu
penomoran yang dapat memuaskan semua pihak.
Secara ringkas pendekatan yang digunakan pada metode pencegahan deadlock dan
masalah-masalah yang menghambatnya, terangkum dalam tabel dibawah ini (Robert
Betz,2001).
Tabel 2.1. Tabel Deadlock
Syarat Langkah Kelemahan
Mutual Exclusion Spooling sumber daya Dapat menyebabkan chaos
Hold and Wait Meminta sumber daya di awal Sulit memperkirakan di
awal dan tidak optimal
No forced
resource release
(no pre-emption)
Mengambil sumber daya di
tengah proses
Hasil proses tidak akan baik
Universitas Sumatera Utara
47
Circular Wait Penomoran permintaan sumber
daya
Tidak ada penomoran yang
memuaskan semua pihak
2.6.4 Metode Penghindaran Deadlock
Pendekatan metode ini adalah dengan hanya memberi kesempatan ke permintaan sumber
daya yang tidak mungkin akan menyebabkan deadlock. Metode ini memeriksa dampak
pemberian akses pada suatu proses, jika pemberian akses tidak mungkin menuju kepada
deadlock, maka sumber daya akan diberikan pada proses yang meminta. Jika tidak aman,
proses yang meminta akan di-suspend sampai suatu waktu permintaannya aman untuk
diberikan. Kondisi ini terjadi ketika setelah sumber daya yang sebelumnya dipegang oleh
proses lain telah dilepaskan.
Kondisi aman yang dimaksudkan selanjutnya disebut sebagai safe-state, sedangkan
keadaan yang tidak memungkinkan untuk diberikan sumber daya yang diminta disebut
unsafe-state.
Kondisi Aman (Safe state)
Suatu keadaan dapat dinyatakan sebagai safe state jika tidak terjadi deadlock dan terdapat
cara untuk memenuhi semua permintaan sumber daya yang ditunda tanpa menghasilkan
deadlock. Dengan cara mengikuti urutan tertentu.
Kondisi Tak Aman (Unsafe state)
Suatu state dinyatakan sebagai state tak selamat (unsafe state) jika tidak terdapat cara untuk
memenuhi semua permintaaan yang saat ini ditunda dengan menjalankan proses-proses
dengan suatu urutan.
Universitas Sumatera Utara
48
Gambar 2.8 Safe State, Unsafe State dan Deadlock
2.6.5 Mendeteksi dan Memulihkan Deadlock
Deteksi deadlock adalah teknik untuk menentukan apakah deadlock terjadi serta
mengidentifikasi proses – proses dan sumber daya – sumber daya yang terlibat deadlock.
Periode yang biasa dilakukan adalah memonitor permintaan dan pelepasan sumber daya.
Bila sistem terdapat deadlock maka deadlock harus diputuskan. Biasanya beberapa proses
akan kehilangan sebagian atau semua kerja yang telah dilakukan. Hal ini lebih baik
daripada terjadinya deadlock yang berarti semua proses tidak menghasilkan apapun.
Teknik pemulihan yang biasa digunakan adalah menghilangkan (suspend/kill)
proses – proses dari sistem dan pengajuan kembali sumber daya yang dipegang proses –
proses tersebut. Proses yang dihilangkan biasanya cacat tetapi proses lain dapat
menyelesaikan prosesnya. Pendekatan – pendekatan berikut dapat dilakukan untuk
pemulihan deadlock :
Singkirkan semua proses yang terlibat deadlock.
Backup semua proses yang terlibat deadlock ke suatu check point yang didefinisikan
sebelumnya dan jalankan kembali proses itu.
Universitas Sumatera Utara
49
Secara berurutan abaikan proses – proses sampai deadlock tidak terjadi lagi. Urutan
proses yang dipilih untuk disingkirkan berdasar kriteria biaya minimum.
Secara berurutan preempt sumber daya – sumber daya sampai tidak ada deadlock
lagi. Proses yang kehilangan sumber daya karena preemption harus dikembalikan
(roll-back) ke titik sebelum memperoleh sumber daya.
Kriteria pemilihan proses yang akan disingkirkan (suspend/kill) :
Waktu pemrosesan yang dijalankan paling kecil.
Jumlah baris keluaran yang diproduksi paling kecil.
Mempunyai estimasi sisa waktu eksekusi terbesar.
Jumlah total sumber daya terkecil yang telah dialokasikan.
Prioritas terkecil.
Dalam penyingkiran proses, sistem harus mengembalikan berkas-berkas yang telah
dimodifikasi oleh proses-proses yang disingkirkan ke keadaan asli karena berpengaruh
terhadap konsistensi data sistem itu.
Universitas Sumatera Utara
50
2.7 Animasi
Animasi adalah pergerakan dari objek dalam ruangan dua atau tiga dimensi. Pergerakan
dihitung untuk menghasilkan tiap gambar dengan memindahkan sedikit objek. Teknik ini
dipakai pada kartun animasi tradisional dan untuk menghasilkan efek khusus tertentu.
Keyframming (in-betweening atau tweening) adalah teknik yang biasanya dipakai dalam
kartun animasi. Pada keyframming, kartunis utama membuat pandangan utama sedangkan
kartunis lainnya membuat gambar yang terletak di antaranya. Teknik keyframming dengan
animator komputer membuat fungsi frame inbetweens secara otomatis.
Dengan keyframe tidak hanya dapat menganimasikan posisi, orientasi dan menskala
objek tetapi juga warnanya bahkan ketebalan kabut dalam pandangan. Program yang bagus
memungkinkan animator untuk mengontrol dan mengubah secara virtual semua parameter
tampilan dengan cara keyframe.
Gambar 2.9 Contoh Animasi Keyframe
Universitas Sumatera Utara
51
BAB III
ANALISIS DAN PERANCANGAN SISTEM
3.1 Analisis Sistem
Untuk dapat memahami kebutuhan sistem dan gambaran fungsi – fungsi yang akan
dikerjakan sistem simulasi, maka dilakukan analisis dan perancangan sistem. Dalam analisi
dan perancangan sistem akan membahas mengenai alur kerja perangkat lunak simulasi,
penggambaran objek simulasi dan proses simulasi Readers and Writers Problem. Masing-
masing pembahasan akan dibahas dalam beberapa sub bab berikut ini.
3.1.1 Analisis Masalah
Diagram Ishikawa (fishbone diagram) biasanya disebut juga diagram sebab akibat yang
biasanya digunakan untuk mengidentifikasi masalah yang ada pada sistem yang akan
dirancang. Dengan diagram ini kita dapat mengidentifikasi, mengeksplorasi dan
menggambarkan suatu masalah dengan mengikutsertakan sebab dan akibat dari
permasalahan dalam visual grafis. Dengan demikian proses pencapaian sistem akan sangat
dibantu dengan adanya Diagram Ishikawa ini.
Universitas Sumatera Utara
52
Gambar 3.1 Diagram Ishikawa Analisis Masalah
3.1.2 Analisis Persyaratan
Analisis persyaratan merupakan tahapan yang penting, yaitu menentukan persyaratan dari
sistem seperti kebutuhan dari pengguna. Analisis persyaratan terbagis atas dua, yaitu
analisis persyaratan fungsional dan analisis persyaratan nonfungsional.
3.1.2.1 Analisis Persyaratan Fungsional
Segala sesuatu yang harus dipenuhi sistem untuk mencapai tujuannya merupakan bagian
dari persyaratan fungsional. Berikut ini merupakan beberapa persyaratan fungsional sistem
yang akan dibangun, antara lain :
1. File gambar objek animasi yang digunakan berformat JPEG (*.jpg) dan memiliki
perbedaan pada setiap keadaan seperti berjalan ke bawah, berjalan ke atas, keadaan
sedang tidur, dan keadaan bangun.
2. Metode semaphore dan Sleep and Wake-up yang digunakan harus mampu
menghindari terjadinya deadlock selama proses simulasi berjalan.
Universitas Sumatera Utara
53
3. Aplikasi simulasi harus mampu melakukan acak/random nilai input-an setiap
variabel – variabel yang ada.
3.1.2.2 Analisis Persyaratan Nonfungsional
Persyaratan nonfungsional meliputi performa, mudah untuk dipelajari dan digunakan,
hemat biaya, dokumentasi, manajemen kualitas, dan kontrol.
1. Performa
Aplikasi yang akan dibangun harus dapat menunjukkan hasil dari proses
simulasi readers and writers problem yang dilakukan oleh sistem.
2. Mudah dipelajari dan digunakan
Aplikasi yang akan dibangun harus sederhana agar mudah dipelajari oleh
pengguna (user).
3. Hemat biaya
Aplikasi yang dibangun tidak memerlukan perangkat tambahan ataupun
perangkat pendukung dalam proses eksekusinya.
4. Dokumentasi
Aplikasi yang akan dibangun dapat mencatat dan menampilkan laporan proses
yang telah terjadi selama proses simulasi berlangsung.
5. Manajemen kualitas
Aplikasi yang akan dibangun harus memiliki kualitas yang baik.
6. Kontrol
Universitas Sumatera Utara
54
Aplikasi yang dibangun harus memiliki message error (pesan error) jika
pengguna tidak lengkap memasukkan input-an dan input-an yang dimasukkan
tidak sesuai dengan sistem.
3.1.3 Analisis Proses Aplikasi Simulasi
Aplikasi simulasi Readers and Writers Problem dimulai dengan tampilan form input. Form
input berfungsi untuk mengatur kondisi – kondisi setiap komponen pada simulasi.
Komponen - komponen yang dapat diatur antara lain sebagai berikut :
1. Pengaturan pada Writers, yaitu jumlah writer, batas maksimum dan minimum bagi
writer dalam satu kali write.
2. Pengaturan pada Readers, yaitu jumlah reader, batas maksimum dan minimum bagi
reader dalam satu kali read.
3. Pengaturan pada Database, yaitu batas ukuran maksimum dan minimum pada
database/buffer.
4. Pengaturan lain, yaitu jenis item, batas waktu dan kecepatan proses simulasi.
Setelah pengaturan pada form input, proses simulasi dapat dimulai dengan menekan
tombol ’Simulasi’. Selanjutnya, form simulasi akan muncul. Ketika proses simulasi sedang
berjalan, user dapat menghentikan untuk sementara proses simulasi dengan menekan
tombol ’Stop’. User juga dapat melihat laporan proses yang terjadi dalam simulasi dengan
menekan tombol ’Log’. Laporan juga disediakan dalam bentuk tabel.
Alur kerja pada aplikasi simulasi ini dapat digambarkan dalam bentuk Diagram
Hierarki, seperti terlihat pada gambar 3.2 berikut.
Universitas Sumatera Utara
55
Gambar 3.2 Diagram Hierarki
3.1.3.1 Penggambaran Objek Animasi
Dalam simulasi Reader and Writers Problem terdapat objek/variabel animasi yang
diillustrasikan dalam bentuk objek gambar statis. Variabel dalam simulasi ini adalah
readers, writers dan database. Penggambaran variabel tersebut dilakukan dengan
menggunakan GNU image manipulation program (GIMP). Variabel beserta illustrasi objek
gambarnya dapat dilihat pada tabel 3.1 berikut ini.
Universitas Sumatera Utara
56
Tabel 3.1 Tabel Gambar Objek Simulasi
Gambar Keterangan
Gambar writers berjalan ke bawah (tampak depan).
Gambar writers berjalan ke atas (tampak belakang).
Gambar writers dalam keadaan tidur (sleep).
Gambar writers dalam keadaan bangun (wake-up)
Universitas Sumatera Utara
57
Gambar Keterangan
Gambar readers berjalan ke bawah (tampak depan).
Gambar readers berjalan ke atas (tampak belakang).
Gambar readers dalam keadaan tidur (sleep).
Universitas Sumatera Utara
58
Gambar Keterangan
Gambar readers dalam keadaan bangun (wake-up)
3.1.3.2 Proses Simulasi Readers and Writers Problem
Proses simulasi Readers and Writers Problem adalah sebagai berikut:
1. Writers aktif menulis dan menambahkan item/data ke database (buffer). Aksi ini
akan menambah jumlah item ke dalam database.
2. Readers aktif mengambil item/data dari database (buffer) dan membaca item/data.
Aksi ini akan mengurangi jumlah item ke dalam database.
3. Apabila database telah penuh(mencapai batas maksimal), maka writers akan tidur
(memanggil aksi sleep).
4. Apabila readers mengambil item/data dari database dan writers dalam keadaan
tidur (sleep), maka readers akan membangunkan (wake-up) writers.
5. Apabila database kosong (mencapai batas minimal), maka readers akan tidur
(memanggil aksi sleep).
6. Apabila writers meletakkan item/data ke database dan readers dalam keadaan tidur
(sleep), maka writers akan membangunkan (wake-up) readers.
Keenam poin di atas merupakan inti dari kejadian – kejadian yang terjadi di dalam
simulasi Readers and Writers Problem. Pencegahan kondisi deadlock (writers ingin
Universitas Sumatera Utara
59
meletakkan item ke database sedangkan database telah penuh atau readers ingin
mengambil item dari database sedangkan database telah kosong) dihindari dengan metode
sleep dan wake up. Setiap variabel - variabel akan memanggil aksi sleep untuk menghindari
kondisi deadlock dan akan dibangunkan oleh variabel lainnya, ketika keadaan sudah tidak
mengalami deadlock.
Critical section dalam aplikasi simulasi ini adalah ketika writers ingin meletakkan
item ke dalam database dan readers ingin mengambil item dari database. Dalam hal ini,
semaphore dipakai dalam mengatur writers dan readers supaya tidak meletakkan atau
mengambil item dari database atau mengakses critical section secara bersamaan. Ketika
salah satu writers atau readers meletakkan atau mengambil item, maka variabel lain di-
blocked agar tidak memasuki critical section, sehingga jumlah item di dalam database tidak
diakses secara bersamaan, nilainya tetap konsisten dan terjaga kebenarannya.
Proses simulasi yang dirancang dalam aplikasi menggunakan komponen timer yang
terdapat dalam bahasa pemograman Microsoft Visual Studio 2012 (C#). Fungsi dari
komponen timer adalah untuk memeriksa keadaan setiap objek dalam satu interval waktu
yang telah diatur kepadanya. Timer akan memeriksa dan memajukan keadaan objek ke
keadaan berikutnya, sehingga terbentuk pergerakan. Misalkan, keadaan sekarang adalah
writers berjalan ke bawah dengan kaki kiri, maka pada keadaan berikutnya, timer akan
mengubah gambar tersebut dengan gambar writers berjalan ke bawah dengan kaki kanan.
Demikian seterusnya.
Universitas Sumatera Utara
60
3.1.4 Algoritma Pengaturan Pergerakan
Algoritma yang digunakan dalam merancang aplikasi simulasi Readers and Writers
Problem terbagi menjadi 2 (dua) bagian, yaitu:
1. Algoritma Pengaturan Pergerakan Writers.
2. Algoritma Pengaturan Pergerakan Readers.
3.1.4.1 Algoritma Pengaturan Pergerakan Writers
Algoritma ini digunakan untuk mengatur pergerakan writers Dalam perancangan aplikasi,
algoritma pergerakan seorang writers ditulis ke dalam sebuah timer. Apabila terdapat enam
orang writers yang aktif, maka ini berarti terdapat enam buah juga timer untuk mengatur
pergerakan setiap writers. Dalam aplikasi ini, pergerakan writers antara lain adalah:
1. Berada di dalam pintu.
Writers diasumsikan sedang menulis item. Gambar writers tidak diperlihatkan pada
daerah simulasi.
2. Berjalan menuju database/buffer.
Writers diasumsikan telah siap menulis item dan membawa item ke
database/buffer.
3. Meletakkan item ke database/buffer
Writer telah tiba di database dan akan meletakkan semua item ke database/buffer.
Pada saat ini digunakan semaphore, untuk menghindari pengaksesan critical
section secara bersamaan. Di sini, critical section adalah keadaan ketika seorang
writer masuk ke dalam database dan meletakkan item ke database/buffer.
Penggunaan sempahore akan mem-blocked semua variabel (writers ataupun
Universitas Sumatera Utara
61
readers) yang ingin masuk ke dalam critical section ketika salah seorang writer
ataupun reader sedang berada di dalam database dan sedang meng-update jumlah
item database dan jumlah item-nya sendiri. Penggunaan semaphore akan menjamin
hanya terdapat satu variabel (writers ataupun readers) yang berada di dalam
database pada satu waktu. Cara menerapkan sempahore di dalam aplikasi adalah
lakukan operasi wait (s = s -1) ketika writers akan masuk ke dalam database, dan
lakukan operasi signal (s = s +1) ketika writers telah selesai dan keluar dari
database. Jika nilai s bernilai -1 (s < 0) ketika sebuah variabel (writers ataupun
readers) akan masuk ke dalam database, maka variabel di-blocked atau tidak dapat
masuk ke dalam database dan menunggu hingga nilai s = 0. Apabila database telah
mencapai ukuran maksimal, maka akan dipanggil aksi sleep (tidur) untuk setiap
writers. Ketika writer telah selesai meletakkan item ke database, panggil aksi wake-
up (bangun) untuk semua readers apabila ada reader yang tertidur.
4. Berjalan kembali ke pintu.
Writers telah selesai meletakkan semua item ke database dan berjalan kembali ke
tempat asalnya (pintu writers).
Algoritma pergerakan writers adalah sebagai berikut:
1. Jika writers sedang berada di dalam pintu (diasumsikan sedang menulis
item), maka lakukan langkah berikut ini :
a. Jika writer tidak sedang berada dalam keadaan tidur (sleep),
maka lakukan langkah berikut :
i. Lakukan animasi tulisan “Sedang menulis item …..”.
Universitas Sumatera Utara
62
ii. Lakukan pengacakan nilai dari 0 sampai 10 untuk
menentukan apakah writer telah siap menulis item atau
belum.
iii. Jika hasil pengacakan adalah 1, maka writer dianggap telah
siap menulis item. Lakukan langkah berikut :
1) Lakukan pengacakan untuk hasil write item.
2) Ganti aksi writer menjadi ‘sedang berjalan ke database’.
3) Hentikan animasi tulisan “Sedang menulis item …..”.
b. Jika writer sedang berada dalam keadaan tidur (sleep), maka
hentikan animasi tulisan “Sedang menulis item …..”.
2. Jika writer sedang berjalan menuju database, maka lakukan langkah
berikut :
a. Jika writers sedang berada dalam keadaan tidur (sleep), maka
lakukan animasi tidur pada writers.
b. Jika writers tidak sedang berada dalam keadaan tidur (sleep),
maka lakukan animasi writer sedang berjalan ke bawah menuju
database, dengan menambah posisi y (nilai top) terhadap gambar
writers.
c. Apabila writers telah sampai di database (dengan memeriksa
posisi y), maka ganti aksi writers menjadi ‘sedang meletakkan
item ke database’.
3. Jika writers sedang meletakkan item ke database, maka lakukan langkah
berikut:
Universitas Sumatera Utara
63
a. Jika writers sedang berada dalam keadaan tidur (sleep), maka
lakukan animasi tidur pada writers.
b. Jika writers tidak sedang berada dalam keadaan tidur (sleep),
maka lakukan langkah berikut:
i. Periksa nilai semaphore-nya. Jika nilai s = -1, maka keluar
dari langkah ini (untuk kemudian masuk lagi ke langkah ini,
berulang – ulang hingga nilai dari s tidak sama dengan -1).
ii. Lakukan operasi wait, kurangi nilai semaphore (s = s -1).
iii. Periksa apakah ukuran database dapat menampung semua
jumlah item dari writer. Jika ya, maka letakkan semua item
tersebut ke database. Jika tidak, maka letakkan sebagian item
tersebut ke database hingga database penuh (mencapai
ukuran maksimal) dan panggil aksi tidur (sleep) untuk semua
writers. Lalu update jumlah item pada database dan writers.
iv. Bangunkan (panggil aksi wake-up) untuk semua readers
(karena sudah terdapat item di dalam database).
v. Lakukan operasi signal, naikkan nilai semaphore (s = s + 1).
vi. Jika semua item sudah diletakkan pada database, maka ganti
aksi writers menjadi ‘berjalan kembali ke pintu’.
4. Jika writers sedang berjalan kembali ke pintu, maka lakukan langkah
berikut:
a. Lakukan animasi writers sedang berjalan ke atas menuju pintu,
dengan mengurangi posisi y (nilai top) terhadap gambar writers.
Universitas Sumatera Utara
64
b. Apabila writer telah sampai di pintu atau tempat asalnya (dengan
memeriksa posisi y), maka ganti aksi writers menjadi ‘sedang
berada di dalam pintu dan sedang menulis item’.
3.1.4.2 Algoritma Pengaturan Pergerakan Readers
Algoritma ini digunakan untuk mengatur pergerakan readers. Sama seperti writers,
algoritma pergerakan seorang readers dituliskan ke dalam sebuah timer. Apabila terdapat
enam orang reader yang aktif, maka ini berarti terdapat enam buah juga timer untuk
mengatur pergerakan setiap reader. Dalam aplikasi ini, pergerakan readers antara lain
adalah :
1. Berada di dalam pintu.
Readers diasumsikan sedang membaca item hasil pengambilan dari database.
Gambar readers tidak diperlihatkan pada daerah simulasi.
2. Berjalan menuju database.
Readers diasumsikan telah habis membaca item dan mulai berjalan ke database
untuk mengambil item lagi.
3. Mengambil item dari database.
Readers telah tiba di database dan akan mengambil sejumlah item dari database.
Dalam aksi ini dipakai semaphore, untuk menghindari pengaksesan critical section
secara bersamaan. Di sini, critical section adalah keadaan ketika seorang reader
masuk ke dalam database dan mulai mengambil item dari database. Penggunaan
sempahore akan mem-blocked setiap variabel (writers ataupun readers) yang ingin
masuk ke dalam critical section ketika salah seorang writers ataupun readers
Universitas Sumatera Utara
65
sedang berada di dalam database dan sedang meng-update jumlah item pada
database dan jumlah item-nya sendiri. Penggunaan semaphore akan menjamin
hanya terdapat satu saja variabel (writers ataupun readers) yang berada di dalam
database pada satu waktu. Cara menerapkan semaphore adalah sama seperti
pembahasan pada algoritma pergerakan writers. Apabila database telah mencapai
ukuran minimal, maka panggil aksi sleep (tidur) untuk semua readers. Ketika
readers telah selesai mengambil item dari database, panggil aksi wake-up (bangun)
untuk semua writers apabila ada writers dalam keadaan tertidur.
4. Berjalan kembali ke pintu.
Readers telah mengambil item dari database dan berjalan kembali ke tempat
asalnya (pintu readers).
Algoritma pergerakan readers adalah sebagai berikut:
1. Jika readers sedang berada di dalam pintu (diasumsikan sedang membaca item),
maka lakukan langkah berikut:
a. Jika readers tidak sedang berada dalam keadaan tidur (sleep), maka lakukan
langkah berikut:
i. Lakukan animasi tulisan “Sedang membaca item …..”.
ii. Lakukan pengacakan nilai dari 0 sampai 10 untuk menentukan apakah
readers telah siap membaca item atau belum.
iii. Jika hasil pengacakan adalah 1, maka reader dianggap telah siap membaca
item. Lakukan langkah berikut :
1) Lakukan pengacakan untuk permintaan pengambilan item dari
database.
Universitas Sumatera Utara
66
2) Ganti aksi reader menjadi ‘sedang berjalan ke database’.
3) Hentikan animasi tulisan “Sedang membaca item …..”.
b. Jika readers sedang berada dalam keadaan tidur (sleep), maka hentikan
animasi tulisan “Sedang membaca item …..”.
2. Jika readers sedang berjalan menuju database, maka lakukan langkah berikut :
a. Jika readers sedang berada dalam keadaan tidur (sleep), maka lakukan
animasi tidur pada readers.
b. Jika readers tidak sedang berada dalam keadaan tidur (sleep), maka lakukan
animasi reader sedang berjalan ke atas menuju database, dengan mengurangi
posisi y (nilai top) terhadap gambar readers.
c. Apabila readers telah sampai di database (dengan memeriksa posisi y), maka
ganti aksi readers menjadi ‘sedang mengambil item dari database’.
3. Jika readers sedang mengambil item dari database, maka lakukan langkah berikut:
a. Jika readers sedang berada dalam keadaan tidur (sleep), maka lakukan
animasi tidur pada reader.
b. Jika readers tidak sedang berada dalam keadaan tidur (sleep), maka lakukan
langkah berikut :
i. Periksa nilai semaphore. Jika nilai s = -1, maka keluar dari langkah ini
(untuk kemudian masuk lagi ke langkah ini, berulang – ulang hingga s
tidak sama dengan -1).
ii. Lakukan operasi wait, kurangi nilai semaphore (s = s -1).
iii. Periksa apakah ukuran database dapat memenuhi permintaan item readers.
Jika ya, maka ambil semua item dari database. Jika tidak, maka ambil
Universitas Sumatera Utara
67
sebagian item dari database hingga database mencapai ukuran minimum
dan panggil aksi tidur (sleep) untuk semua readers. Update jumlah item
pada database dan readers.
iv. Bangunkan (panggil aksi wake-up) untuk semua writers (karena beberapa
item sudah diambil dari dalam database).
v. Lakukan operasi signal, naikkan nilai semaphore-nya (s = s + 1).
vi. Jika semua permintaan item sudah dipenuhi dan diambil pada database,
maka ganti aksi readers menjadi ‘berjalan kembali ke pintu’.
4. Jika readers sedang berjalan kembali ke pintu, maka lakukan langkah berikut :
a. Lakukan animasi readers sedang berjalan ke bawah menuju pintu, dengan
menambah posisi y (nilai top) terhadap gambar readers.
b. Apabila readers telah sampai di pintu atau tempat asalnya (dengan
memeriksa posisi y), maka ganti aksi pada reader menjadi ‘sedang berada
di dalam pintu dan sedang membaca item’.
3.2 Perancangan Sistem
Pembuatan aplikasi simulasi Readers and Writers Problem menggunakan bahasa
pemograman Microsoft Visual Studio 2012. Pembuatan gambar objek simulasi
menggunakan GNU image manipulation program (GIMP). Beberapa komponen yang
dipakai dalam aplikasi ini antara lain:
1. Picturebox, untuk menampilkan gambar.
2. Combobox, untuk memilih salah satu pilihan.
3. Textbox, untuk memasukkan input.
Universitas Sumatera Utara
68
4. Button, sebagai tombol.
5. Frame, untuk mengelompokkan objek.
6. Timer, komponen untuk menjalankan proses animasi (memeriksa keadaan dan
menggerakkan keadaan ke keadaan berikutnya).
Pada aplikasi simulasi ini terdapat lima buah form, yaitu:
1. Form Input.
2. Form Simulasi.
3. Form Tabel Simulasi.
4. Form Log.
5. Form About.
3.2.1 Form Input
Form input berfungsi untuk memasukkan input aplikasi. Input-an pada aplikasi berupa:
jumlah writers, jumlah readers, batas maksimum dan minimum bagi writer dalam satu kali
write, batas maksimum dan minimum bagi readers dalam satu kali read, batas ukuran
maksimum dan minimum database/buffer, banyak jenis item, batas waktu simulasi, dan
kecepatan proses simulasi. Rancangan form input dapat dilihat pada gambar 3.3.
Universitas Sumatera Utara
69
Gambar 3.3 Rancangan Form Input
Keterangan:
1 : title bar.
2 : label, untuk menampilkan judul aplikasi .
3 : button (Simulasi), untuk membuka form simulasi.
4 : button (Acak Input), untuk mengacak semua nilai input.
5 : button (About), untuk menampilkan form About.
6 : button (Keluar), untuk menutup aplikasi.
7 : combobox, untuk memilih jumlah writers.
8 : textbox, untuk memasukkan batas maksimum satu kali meletakkan item oleh
writers.
9 : textbox, untuk memasukkan batas minimum satu kali meletakkan item oleh
Universitas Sumatera Utara
70
writers.
10 : combobox, untuk memilih jumlah readers.
11 : textbox, untuk memasukkan batas maksimum satu kali mengambil item oleh
readers.
12 : textbox, untuk memasukkan batas minimum satu kali mengambil item oleh
readers.
13 : textbox, untuk memasukkan batas ukuran maksimum database.
14 : textbox, untuk memasukkan batas ukuran minimum database.
15 : combobox, untuk memilih banyak jenis item.
16 : textbox, untuk memasukkan batas waktu simulasi.
17 : textbox, untuk memasukkan kecepatan proses simulasi.
3.2.2 Form Simulasi
Form Simulasi berfungsi untuk menampilkan proses simulasi Readers and Writers
Problem. Dalam form ini, terdapat enam buah pintu keluar writers, 6 buah pintu keluar
readers dan sebuah database (buffer), sebagai tempat untuk meletakkan dan mengambil
item. Rancangan form Simulasi dapat dilihat pada gambar 3.4.
Universitas Sumatera Utara
71
Gambar 3.4 Rancangan Form Simulasi
Keterangan:
1 : pintu keluar writer-1.
2 : pintu keluar writer -2.
3 : pintu keluar writer -3.
4 : pintu keluar writer -4.
5 : pintu keluar writer -5.
6 : pintu keluar writer -6.
7 : label, menampilkan jumlah item dalam database.
8 : label, menampilkan waktu simulasi.
9 : pintu keluar reader-1.
Universitas Sumatera Utara
72
10 : pintu keluar reader -2.
11 : pintu keluar reader -3.
12 : pintu keluar reader -4.
13 : pintu keluar reader -5.
14 : pintu keluar reader -6.
15 : button (Tabel), untuk menampilkan form tabel laporan.
16 : button (Log), untuk menampilkan laporan proses yang terjadi dengan
menampilkan form Log.
17 : button (Start), untuk memulai proses simulasi.
18 : button (Stop), untuk menghentikan sementara proses simulasi.
3.2.3 Form Tabel Simulasi
Form Tabel Simulasi berfungsi untuk menampilkan tabel laporan yang mencatat
setiap waktu mulai write / read, waktu selesai write / read, waktu tiba di database dan
penambahan serta pengurangan item dalam database selama proses simulasi berlangsung.
Rancangan form Tabel Simulasi dapat dilihat pada gambar 3.5.
Universitas Sumatera Utara
73
Gambar 3.5 Rancangan Form Tabel Simulasi
Keterangan:
1 : title bar.
2 : dataGridView, sebagai tabel yang menampilkan data-data penambahan dan
pengurangan item dalam database.
3 : button (Keluar), untuk menutup form tabel simulasi.
3.2.4 Form Log
Form Log berfungsi untuk mencatat dan menampilkan laporan proses yang telah
terjadi pada proses simulasi. Laporan proses berupa waktu transaksi dan jenis transaksi
yang terjadi (peletakkan item ke database, pengambilan item ke database, aksi sleep dan
Universitas Sumatera Utara
74
wake-up yang dipanggil oleh writers ataupun readers). Rancangan form Laporan dapat
dilihat pada gambar 3.6.
Gambar 3.6 Rancangan Form Laporan
Keterangan:
1 : title bar.
2 : textBox, untuk menampilkan laporan proses – proses yang terjadi.
3 : button (Keluar), untuk menutup form laporan.
3.2.5 Form About
Form About dirancang untuk menampilkan judul / nama aplikasi, nama dan nomor
induk mahasiswa pembuat aplikasi, nama jurusan dan nama kampus. Rancangan form
About dapat dilihat pada gambar 3.7.
Universitas Sumatera Utara
75
Gambar 3.7 Rancangan Form About
Universitas Sumatera Utara
76
BAB IV
IMPLEMENTASI DAN PENGUJIAN SISTEM
4.1 Implementasi Sistem
Implementasi sistem merupakan kelanjutan dari tahap perancangan sistem di bab
sebelumnya. Sistem yang dibangun menggunakan bahasa pemograman Microsoft Visual
Studio 2012 (C#).
4.1.1 Form Input
Pada form input ini pengguna dapat memasukkan semua nilai – nilai setiap variabel yang
telah disediakan atau bisa juga langsung menggunakan menu acak input yang berfungsi
untuk mengacak nilai input-an. Lalu pengguna dapat menggunakan tombol simulasi untuk
dapat memasuki form simulasi.
Universitas Sumatera Utara
77
Gambar 4.1 Form Input
4.1.2 Form Simulasi
Pada form simulasi akan menampilkan proses simulasi readers and writers problem. Pada
form ini terdapat 6 pintu keluar writers, 6 pintu keluar readers dan sebuah database yang
menggambarkan buffer sebagai tempat meletakkan dan mengambil data. Dan juga terdapat
4 tombol yaitu tombol tabel, tombol log, tombol start, dan tombol stop.
Universitas Sumatera Utara
78
Gambar 4.2 Form Simulasi
4.1.3 Form Tabel
Pada form tabel akan menampilkan tabel laporan yang mencatat setiap waktu mulai
read/write, waktu selesai read/write, waktu tiba di database dan penambahan/pengurangan
data dalam database selama proses simulasi berjalan.
Universitas Sumatera Utara
79
Gambar 4.3 Form Tabel
4.1.4 Form Log
Pada form Log akan menampilkan laporan dari proses – proses yang tejadi selama simulasi
berjalan. Laporan proses yang dicatat berupa waktu proses menulis dan membaca,
pergerakan readers maupun writers, peletakkan dan pengambilan data dari database, dan
aksi sleep dan wake-up yang dipanggil oleh readers maupun writers.
Universitas Sumatera Utara
80
Gambar 4.4 Form Log
4.1.5 Form About
Pada form about akan menampilkan judul aplikasi dan informasi dari pembuat aplikasi.
Gambar 4.5 Form About
Universitas Sumatera Utara
81
4.2 Hasil Pengujian Sistem Simulasi
Untuk menguji hasil dari proses eksekusi aplikasi, maka dimasukkanlah input sebagai
berikut:
1. Jumlah writers = 6 orang
2. Batas satu kali write, maksimum= 24 item dan minimum = 2 item.
3. Jumlah readers = 6 orang.
4. Batas satu kali read, maksimum = 15 item dan minimum = 9 item.
5. Batas ukuran maksimum database = 100 item.
6. Batas ukuran minimum database = 10 item.
7. Banyak jenis item = 5 jenis.
8. Batas waktu simulasi = 1000 detik.
Pada aplikasi, form Input akan terlihat seperti pada gambar berikut.
Gambar 4.6 Form Input (Pengujian Program)
Universitas Sumatera Utara
82
Tampilan awal form Simulasi dapat dilihat pada gambar berikut.
Gambar 4.7 Form Simulasi sebelum proses simulasi dimulai
Pada saat t = 153 detik, ada writers yang berada dalam keadaan tertidur (sleep). Tampilan
prosesnya dapat dilihat pada gambar berikut.
Gambar 4.8 Simulasi ketika writers berada dalam keadaan tertidur (sleep)
Universitas Sumatera Utara
83
Pada saat t = 514 detik, ada readers yang berada dalam keadaan tertidur (sleep). Tampilan
prosesnya dapat dilihat pada gambar berikut.
Gambar 4.9 Simulasi ketika readers berada dalam keadaan tertidur (sleep)
Laporan proses-proses yang terjadi dari t = 0 detik sampai t = 100 detik adalah sebagai
berikut:
----------------------------------
LAPORAN SIMULASI Readers and Writers
----------------------------------
t = 5 detik : Writer-5 selesai menulis (Novel, Koran, Majalah, Tabloid,
Komik) sebanyak (21, 16, 15, 23, 17) dan mulai bergerak menuju database.
t = 5 detik : Writer-4 selesai menulis (Novel, Koran, Majalah, Tabloid,
Komik) sebanyak (21, 16, 15, 23, 17) dan mulai bergerak menuju database.
t = 5 detik : Writer-3 selesai menulis (Novel, Koran, Majalah, Tabloid,
Komik) sebanyak (21, 16, 15, 23, 17) dan mulai bergerak menuju database.
t = 5 detik : Writer-2 selesai menulis (Novel, Koran, Majalah, Tabloid,
Komik) sebanyak (21, 16, 15, 23, 17) dan mulai bergerak menuju database.
t = 5 detik : Writer-1 selesai menulis (Novel, Koran, Majalah, Tabloid,
Komik) sebanyak (21, 16, 15, 23, 17) dan mulai bergerak menuju database.
t = 5 detik : Writer-0 selesai menulis (Novel, Koran, Majalah, Tabloid,
Komik) sebanyak (21, 16, 15, 23, 17) dan mulai bergerak menuju database.
t = 10 detik : Writer-5 meletakkan (Novel, Koran, Majalah, Tabloid,
Komik) sebesar (21, 16, 15, 23, 17) ke database.t = 10 detik : Barang
sudah diletakkan di database, Writer membangunkan (wake up) semua reader
yang aktif.
t = 10 detik : Writer-4 meletakkan (Novel, Koran, Majalah, Tabloid,
Komik) sebesar (21, 16, 15, 23, 17) ke database.t = 10 detik : Barang
Universitas Sumatera Utara
84
sudah diletakkan di database, Writer membangunkan (wake up) semua reader
yang aktif.
t = 10 detik : Writer-3 meletakkan (Novel, Koran, Majalah, Tabloid,
Komik) sebesar (21, 16, 15, 23, 17) ke database.t = 10 detik : Barang
sudah diletakkan di database, Writer membangunkan (wake up) semua reader
yang aktif.
t = 10 detik : Writer-2 meletakkan (Novel, Koran, Majalah, Tabloid,
Komik) sebesar (21, 16, 15, 23, 17) ke database.t = 10 detik : Barang
sudah diletakkan di database, Writer membangunkan (wake up) semua reader
yang aktif.
t = 10 detik : Writer-1 meletakkan (Novel, Koran, Majalah, Tabloid,
Komik) sebesar (16, 16, 15, 8, 17) ke database.t = 10 detik : Barang
sudah diletakkan di database, Writer membangunkan (wake up) semua reader
yang aktif.t = 10 detik : Ukuran database maksimum, semua writer yang
aktif sleep.
t = 12 detik : Reader-5 selesai membaca (Novel, Koran, Majalah, Tabloid,
Komik) sebanyak (4, 8, 5, 5, 5) dan mulai bergerak menuju database.
t = 12 detik : Reader-4 selesai membaca (Novel, Koran, Majalah, Tabloid,
Komik) sebanyak (4, 8, 5, 5, 5) dan mulai bergerak menuju database.
t = 12 detik : Reader-3 selesai membaca (Novel, Koran, Majalah, Tabloid,
Komik) sebanyak (4, 8, 5, 5, 5) dan mulai bergerak menuju database.
t = 12 detik : Reader-2 selesai membaca (Novel, Koran, Majalah, Tabloid,
Komik) sebanyak (4, 8, 5, 5, 5) dan mulai bergerak menuju database.
t = 12 detik : Reader-1 selesai membaca (Novel, Koran, Majalah, Tabloid,
Komik) sebanyak (4, 8, 5, 5, 5) dan mulai bergerak menuju database.
t = 12 detik : Reader-0 selesai membaca (Novel, Koran, Majalah, Tabloid,
Komik) sebanyak (4, 8, 5, 5, 5) dan mulai bergerak menuju database.
t = 20 detik : Reader -5 mengambil (Novel, Koran, Majalah, Tabloid,
Komik) sebesar (4, 8, 5, 5, 5) dari database.t = 20 detik : Barang
sudah diambil dari di database, Reader membangunkan (wake up) semua
writer yang aktif.
t = 20 detik : Reader -4 mengambil (Novel, Koran, Majalah, Tabloid,
Komik) sebesar (4, 8, 5, 5, 5) dari database.t = 20 detik : Barang
sudah diambil dari di database, Reader membangunkan (wake up) semua
writer yang aktif.
t = 20 detik : Reader -3 mengambil (Novel, Koran, Majalah, Tabloid,
Komik) sebesar (4, 8, 5, 5, 5) dari database.t = 20 detik : Barang
sudah diambil dari di database, Reader membangunkan (wake up) semua
writer yang aktif.
t = 20 detik : Reader -2 mengambil (Novel, Koran, Majalah, Tabloid,
Komik) sebesar (4, 8, 5, 5, 5) dari database.t = 20 detik : Barang
sudah diambil dari di database, Reader membangunkan (wake up) semua
writer yang aktif.
t = 20 detik : Reader -1 mengambil (Novel, Koran, Majalah, Tabloid,
Komik) sebesar (4, 8, 5, 5, 5) dari database.t = 20 detik : Barang
sudah diambil dari di database, Reader membangunkan (wake up) semua
writer yang aktif.
t = 20 detik : Reader -0 mengambil (Novel, Koran, Majalah, Tabloid,
Komik) sebesar (4, 8, 5, 5, 5) dari database.t = 20 detik : Barang
sudah diambil dari di database, Reader membangunkan (wake up) semua
writer yang aktif.
t = 20 detik : Writer-0 meletakkan (Novel, Koran, Majalah, Tabloid,
Komik) sebesar (21, 16, 15, 23, 17) ke database.t = 20 detik : Barang
sudah diletakkan di database, Writer membangunkan (wake up) semua reader
yang aktif.
Universitas Sumatera Utara
85
t = 50 detik : Reader-5 selesai membaca (Novel, Koran, Majalah, Tabloid,
Komik) sebanyak (8, 4, 6, 5, 6) dan mulai bergerak menuju database.
t = 50 detik : Writer-5 selesai menulis (Novel, Koran, Majalah, Tabloid,
Komik) sebanyak (22, 9, 17, 11, 16) dan mulai bergerak menuju database.
t = 50 detik : Reader-4 selesai membaca (Novel, Koran, Majalah, Tabloid,
Komik) sebanyak (8, 4, 6, 5, 6) dan mulai bergerak menuju database.
t = 50 detik : Writer-4 selesai menulis (Novel, Koran, Majalah, Tabloid,
Komik) sebanyak (22, 9, 17, 11, 16) dan mulai bergerak menuju database.
t = 50 detik : Reader-3 selesai membaca (Novel, Koran, Majalah, Tabloid,
Komik) sebanyak (8, 4, 6, 5, 6) dan mulai bergerak menuju database.
t = 50 detik : Writer-3 selesai menulis (Novel, Koran, Majalah, Tabloid,
Komik) sebanyak (22, 9, 17, 11, 16) dan mulai bergerak menuju database.
t = 50 detik : Reader-2 selesai membaca (Novel, Koran, Majalah, Tabloid,
Komik) sebanyak (8, 4, 6, 5, 6) dan mulai bergerak menuju database.
t = 50 detik : Writer-2 selesai menulis (Novel, Koran, Majalah, Tabloid,
Komik) sebanyak (22, 9, 17, 11, 16) dan mulai bergerak menuju database.
t = 50 detik : Reader-1 selesai membaca (Novel, Koran, Majalah, Tabloid,
Komik) sebanyak (8, 4, 6, 5, 6) dan mulai bergerak menuju database.
t = 50 detik : Writer-1 selesai menulis (Novel, Koran, Majalah, Tabloid,
Komik) sebanyak (22, 9, 17, 11, 16) dan mulai bergerak menuju database.
t = 50 detik : Reader-0 selesai membaca (Novel, Koran, Majalah, Tabloid,
Komik) sebanyak (8, 4, 6, 5, 6) dan mulai bergerak menuju database.
t = 56 detik : Writer-5 meletakkan (Novel, Koran, Majalah, Tabloid,
Komik) sebesar (3, 9, 17, 7, 16) ke database.t = 56 detik : Barang
sudah diletakkan di database, Writer membangunkan (wake up) semua reader
yang aktif.t = 56 detik : Ukuran database maksimum, semua writer yang
aktif sleep.
t = 59 detik : Reader -5 mengambil (Novel, Koran, Majalah, Tabloid,
Komik) sebesar (8, 4, 6, 5, 6) dari database.t = 59 detik : Barang
sudah diambil dari di database, Reader membangunkan (wake up) semua
writer yang aktif.
t = 59 detik : Reader -4 mengambil (Novel, Koran, Majalah, Tabloid,
Komik) sebesar (8, 4, 6, 5, 6) dari database.t = 59 detik : Barang
sudah diambil dari di database, Reader membangunkan (wake up) semua
writer yang aktif.
t = 59 detik : Writer-4 meletakkan (Novel, Koran, Majalah, Tabloid,
Komik) sebesar (16, 9, 17, 10, 16) ke database.t = 59 detik : Barang
sudah diletakkan di database, Writer membangunkan (wake up) semua reader
yang aktif.t = 59 detik : Ukuran database maksimum, semua writer yang
aktif sleep.
t = 59 detik : Reader -3 mengambil (Novel, Koran, Majalah, Tabloid,
Komik) sebesar (8, 4, 6, 5, 6) dari database.t = 59 detik : Barang
sudah diambil dari di database, Reader membangunkan (wake up) semua
writer yang aktif.
t = 59 detik : Writer-3 meletakkan (Novel, Koran, Majalah, Tabloid,
Komik) sebesar (8, 9, 17, 5, 14) ke database.t = 59 detik : Barang
sudah diletakkan di database, Writer membangunkan (wake up) semua reader
yang aktif.t = 59 detik : Ukuran database maksimum, semua writer yang
aktif sleep.
t = 59 detik : Reader -2 mengambil (Novel, Koran, Majalah, Tabloid,
Komik) sebesar (8, 4, 6, 5, 6) dari database.t = 59 detik : Barang
sudah diambil dari di database, Reader membangunkan (wake up) semua
writer yang aktif.
t = 59 detik : Writer-2 meletakkan (Novel, Koran, Majalah, Tabloid,
Komik) sebesar (8, 9, 13, 5, 6) ke database.t = 59 detik : Barang sudah
diletakkan di database, Writer membangunkan (wake up) semua reader yang
Universitas Sumatera Utara
86
aktif.t = 59 detik : Ukuran database maksimum, semua writer yang aktif
sleep.
t = 59 detik : Reader -1 mengambil (Novel, Koran, Majalah, Tabloid,
Komik) sebesar (8, 4, 6, 5, 6) dari database.t = 59 detik : Barang
sudah diambil dari di database, Reader membangunkan (wake up) semua
writer yang aktif.
t = 59 detik : Writer-1 meletakkan (Novel, Koran, Majalah, Tabloid,
Komik) sebesar (8, 9, 6, 5, 6) ke database.t = 59 detik : Barang sudah
diletakkan di database, Writer membangunkan (wake up) semua reader yang
aktif.t = 59 detik : Ukuran database maksimum, semua writer yang aktif
sleep.
t = 59 detik : Reader -0 mengambil (Novel, Koran, Majalah, Tabloid,
Komik) sebesar (8, 4, 6, 5, 6) dari database.t = 59 detik : Barang
sudah diambil dari di database, Reader membangunkan (wake up) semua
writer yang aktif.
t = 60 detik : Writer-3 meletakkan (Novel, Koran, Majalah, Tabloid,
Komik) sebesar (8, 0, 0, 5, 2) ke database.t = 60 detik : Barang sudah
diletakkan di database, Writer membangunkan (wake up) semua reader yang
aktif.t = 60 detik : Ukuran database maksimum, semua writer yang aktif
sleep.
t = 96 detik : Reader-5 selesai membaca (Novel, Koran, Majalah, Tabloid,
Komik) sebanyak (8, 5, 3, 7, 8) dan mulai bergerak menuju database.
t = 96 detik : Reader-4 selesai membaca (Novel, Koran, Majalah, Tabloid,
Komik) sebanyak (8, 5, 3, 7, 8) dan mulai bergerak menuju database.
t = 96 detik : Reader-3 selesai membaca (Novel, Koran, Majalah, Tabloid,
Komik) sebanyak (8, 5, 3, 7, 8) dan mulai bergerak menuju database.
t = 96 detik : Reader-2 selesai membaca (Novel, Koran, Majalah, Tabloid,
Komik) sebanyak (8, 5, 3, 7, 8) dan mulai bergerak menuju database.
t = 96 detik : Reader-1 selesai membaca (Novel, Koran, Majalah, Tabloid,
Komik) sebanyak (8, 5, 3, 7, 8) dan mulai bergerak menuju database.
t = 96 detik : Reader-0 selesai membaca (Novel, Koran, Majalah, Tabloid,
Komik) sebanyak (8, 5, 3, 7, 8) dan mulai bergerak menuju database.
t = 105 detik : Reader -5 mengambil (Novel, Koran, Majalah, Tabloid,
Komik) sebesar (8, 5, 3, 7, 8) dari database.t = 105 detik : Barang
sudah diambil dari di database, Reader membangunkan (wake up) semua
writer yang aktif.
Tampilan form Log dapat dilihat pada gambar berikut.
Universitas Sumatera Utara
87
Gambar 4.10 Form Log Hasil Simulasi
Tampilan form Tabel Simulasi dapat dilihat pada gambar berikut.
Universitas Sumatera Utara
88
Gambar 4.11 Form Tabel Hasil Simulasi
Universitas Sumatera Utara
89
BAB V
KESIMPULAN DAN SARAN
5.1 Kesimpulan
Setelah melakukan studi literatur, analisis, perancangan, implementasi dan pengujian
sistem simulasi Readers and Writers Problem, maka diperoleh kesimpulan sebagai
berikut :
1. Aplikasi menggunakan metode sleep and wake-up untuk mencegah masalah yang
terjadi ketika buffer penuh, sementara writer ingin meletakkan item ke buffer dan
reader ingin mengambil item sementara buffer telah kosong.
2. Aplikasi menggunakan semaphore untuk untuk mem-blocked writers atau readers
lain ketika salah satu writer atau reader sedang berada dalam database/buffer.
3. Aplikasi simulasi Readers and Writers Problem ini merupakan illustrasi dari proses
sinkronisasi, yaitu bagaimana cara mengatur beberapa proses yang mengakses
beberapa variabel secara bersamaan.
5.2 Saran
Penulis ingin memberikan beberapa saran yang mungkin dapat membantu dalam
pengembangan perangkat lunak simulasi ini yaitu :
1. Aplikasi dapat dikembangkan dengan menambahkan animasi writers dan readers
yang lebih detil, seperti animasi writers sedang menulis item, animasi readers
sedang membaca item dan sebagainya.
2. Animasi pada aplikasi dapat ditingkatkan dengan menggunakan aplikasi Adobe
Flash dan dipertimbangkan untuk menambahkan suara (audio) ke dalam aplikasi
untuk lebih menarik dan interaktif.
Universitas Sumatera Utara
90
DAFTAR PUSTAKA
Allen B. Downey. 2005. The Little Book of Semaphores. 2nd edition. Green Tea Press.
Bob DuCharme. 2001. The Operating System Handbook or Fake Your Way Through Minis
and Mainframes. Singapore : McGraw-Hill Book Co.
Deitel, Harvey M. 2004. Operating System. 3th edition. Massachusetts: Addison-Wesley
Publishing Company.
Fajrillah. 2011. Sistem Operasi Komputer. Bogor : Ghalia Indonesia.
Havender, J.W. 1968. Avoiding Deadlock in Multitasking System. IBM System Journal,
Vol.7, No.2: hal. 97.
Jalal Kawash. 2005. Process Synchroniztion with Readers and Writers Revisited. Journal
of Computing and Information Technology-CIT 13.2005.1: hal. 43-51.
Jean Bacon, Tim Harris. 2003. Operating System: Concurrent and Distributed Software
Design. Massachusetts: Addison-Wesley.
Kusumadewi, S. 2002. Sistem Operasi. Edisi 2. Jakarta: Graha Ilmu.
Michael Kifer and Scott A. Smolka.2007. Introduction to Operating System Design and
Implementation The OSP 2 Approach. London: Springe-Verlag.
Milenkovie, Milan. 1992. Operating System: Concepts and Design. Singapore: McGraw-
Hill Book Co.
Robert Bets. 2001. Introduction to Real-time Operating System. Departemen of Electrical
and Computer Engineering University of Newcastle. Australia.
Shay, William A. 1993. Introduction to Operating System. New York: Harper Collins
College Publishers.
Universitas Sumatera Utara
91
Silberschatz, Peter Galvin, dan Grag Gagne. 2000. Applied Operating System. 1st edition.
New York: John Wiley & Hill Book Co.
Silberschatz, A., dan Galvin, P. 2004. Operating System Concepts with Java. 6th edition.
New York: John Wiley & Sons.
Silberschatz, A.2005. Operating System Concepts. 7th edition. New York: John Wiley &
Sons.
Stallings, William. 1996. Computer Organization and Architecture. New Jersey: Prentice-
Hall.
Stallings, William. 2001. Operating System: Internal and Design Principles. 4th edition.
New Jersey: Prentice-Hall.
Tanenbaum, Andrew S. 2009. Modern Operating Systems. 3rd edition. New Jersey:
Prentice-Hall.
Tanenbaum, Andrew S. 2006. Operating Systems Design and Implementation. 3rd edition.
New Jersey: Prentice-Hall.
Universitas Sumatera Utara
92
LAMPIRAN A : LISTING PROGRAM
1. Listing Program Form Input
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SimulasiReadersWriters
{
public partial class FormInput : Form
{
public FormInput()
{
InitializeComponent();
}
private void button3_Click(object sender, EventArgs e)
{
int randValue;
Random rand = new Random(DateTime.Now.Millisecond);
randValue = rand.Next(5);
// Random Nilai Min/Maks Items Writer
cbJumlahWriter.SelectedIndex = randValue;
rand = new Random(DateTime.Now.Millisecond);
randValue = rand.Next(10) + 1;
tbMinItemsWriter.Text = randValue.ToString();
rand = new Random(DateTime.Now.Millisecond);
randValue = randValue + rand.Next(10) + rand.Next(20) + 1;
tbMaksItemsWriter.Text = randValue.ToString();
rand = new Random(DateTime.Now.Millisecond);
randValue = rand.Next(5);
// Random Nilai Min/Maks Items Reader
cbJumlahReader.SelectedIndex = randValue;
rand = new Random(DateTime.Now.Millisecond);
randValue = rand.Next(5) + 1;
tbMinItemsReader.Text = randValue.ToString();
rand = new Random(DateTime.Now.Millisecond);
Universitas Sumatera Utara
93
randValue = randValue + rand.Next(5) + rand.Next(5) + 1;
tbMaksItemsReader.Text = randValue.ToString();
// Random Nilai Min/Maks Database/Buffer
rand = new Random(DateTime.Now.Millisecond);
randValue = rand.Next(20) + 1;
tbMinBuffer.Text = randValue.ToString();
randValue = 0;
while (randValue < Convert.ToInt16(tbMaksItemsReader.Text) ||
randValue < Convert.ToInt16(tbMaksItemsWriter.Text) ||
randValue < Convert.ToInt16(tbMinBuffer.Text) + 44)
{
rand = new Random(DateTime.Now.Millisecond);
randValue = rand.Next(100) + 1;
}
tbMaksBuffer.Text = randValue.ToString();
rand = new Random(DateTime.Now.Millisecond);
randValue = rand.Next(5);
cbJenisItems.SelectedIndex = randValue;
}
private void FormInput_Load(object sender, EventArgs e)
{
cbJumlahReader.Items.Clear();
cbJumlahWriter.Items.Clear();
for (int i = 0; i < 6; i++)
{
cbJumlahWriter.Items.Add(i + 1 + " orang");
cbJumlahReader.Items.Add(i + 1 + " orang");
}
cbJenisItems.Items.Clear();
for (int i = 0; i < 5; i++)
{
cbJenisItems.Items.Add(i + 1 + " jenis");
}
cbJumlahWriter.SelectedIndex = 5;
cbJumlahReader.SelectedIndex = 5;
cbJenisItems.SelectedIndex = 4;
Universitas Sumatera Utara
94
Program.ItemsName[0] = "Novel";
Program.ItemsName[1] = "Koran";
Program.ItemsName[2] = "Majalah";
Program.ItemsName[3] = "Tabloid";
Program.ItemsName[4] = "Komik";
}
private void tbMaksItemsWriter_KeyUp(object sender, KeyEventArgs e)
{
}
private void button4_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void button1_Click(object sender, EventArgs e)
{
if (tbMinItemsWriter.Text == "0")
{
MessageBox.Show("Minimum Produksi Writer Belum diisi");
return;
} else if (tbMaksItemsWriter.Text == "0")
{
MessageBox.Show("Maksimum Produksi Writer Belum diisi");
return;
} else if (Convert.ToInt16(tbMaksItemsWriter.Text) <
Convert.ToInt16(tbMinItemsWriter.Text))
{
MessageBox.Show("Maks Writer harus lebih besar");
return;
} else if (tbMinItemsReader.Text == "0")
{
MessageBox.Show("Min Konsumsi belum diisi");
return;
} else if (tbMaksItemsReader.Text == "0")
{
MessageBox.Show("Maks Konsumsi belum diisi");
return;
Universitas Sumatera Utara
95
} else if (Convert.ToInt16(tbMaksItemsReader.Text) <
Convert.ToInt16(tbMinItemsReader.Text))
{
MessageBox.Show("Maks Reader harus lebih besar");
return;
} else if (tbMaksBuffer.Text == "0")
{
MessageBox.Show("Maks Database belum diisi");
return;
} else if (tbMinBuffer.Text == "0")
{
MessageBox.Show("Min Database belum diisi");
return;
} else if (Convert.ToInt16(tbMaksBuffer.Text) <
Convert.ToInt16(tbMinBuffer.Text))
{
MessageBox.Show("Maks Database harus lebih besar");
return;
} else if (Convert.ToInt16(tbMaksBuffer.Text) <
Convert.ToInt16(tbMaksItemsWriter.Text))
{
MessageBox.Show("Maks Database harus lebih besar dari Writer");
return;
} else if (Convert.ToInt16(tbMaksBuffer.Text) <
Convert.ToInt16(tbMaksItemsReader.Text))
{
MessageBox.Show("Maks Database harus lebih besar dari Reader");
return;
} else if (tbDetikSimulasi.Text == "0")
{
MessageBox.Show("detik simulasi masih belumn diisi");
return;
} else if (tbWaktuSimulasi.Text == "0")
{
MessageBox.Show("waktu simulasi belum diisi");
return;
}
Program.JumlahJenis = cbJenisItems.SelectedIndex + 1;
Program.Delay = Convert.ToInt16(tbDetikSimulasi.Text);
Program.MinDatabase = Convert.ToInt16(tbMinBuffer.Text);
Universitas Sumatera Utara
96
Program.MaxDatabase = Convert.ToInt16(tbMaksBuffer.Text);
Program.DatabaseItems = new int[Program.JumlahJenis];
Program.JumlahWriter = cbJumlahWriter.SelectedIndex + 1;
Program.JumlahReader = cbJumlahReader.SelectedIndex + 1;
Program.writer = new Writer[Program.JumlahWriter];
Program.reader = new Reader[Program.JumlahReader];
// init Writer
for (int i = 0 ; i < Program.JumlahWriter ; i++)
{
Program.writer[i] = new Writer();
Program.writer[i].Enabled = true;
Program.writer[i].Exist = false;
Program.writer[i].Action = "";
Program.writer[i].Indeks = i;
Program.writer[i].Product = new int[Program.JumlahJenis];
}
// init reader
for (int i = 0 ; i < Program.JumlahReader ; i++)
{
Program.reader[i] = new Reader();
Program.reader[i].Enabled = true;
Program.reader[i].Exist = false;
Program.reader[i].Action = "";
Program.reader[i].Indeks = i;
Program.reader[i].ConsumeItems = new int[Program.JumlahJenis];
}
Program.MinProduksi = Convert.ToInt16(tbMinItemsWriter.Text);
Program.MaxProduksi = Convert.ToInt16(tbMaksItemsWriter.Text);
Program.MinKonsumsi = Convert.ToInt16(tbMinItemsReader.Text);
Program.MaxKonsumsi = Convert.ToInt16(tbMaksItemsReader.Text);
Program.WaktuSimulasi = Convert.ToInt16(tbWaktuSimulasi.Text);
//refresh tabel dan log
Program.TableLog.Clear();
FormSimulasi formSimulasi = new FormSimulasi();
formSimulasi.ShowDialog();
Universitas Sumatera Utara
97
formSimulasi.Dispose();
}
private void button2_Click(object sender, EventArgs e)
{
FormAbout fa = new FormAbout();
fa.ShowDialog();
fa.Dispose();
}
}
}
2. Listing Program Form Simulasi
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SimulasiReadersWriters
{
public partial class FormSimulasi : Form
{
private static int Semaphore = 0;
private static int SLaporan = 0;
private static string Laporan = "LOG PROSES
########################";
private static Int32 nWaktu;
private static Int32 nTable;
private static int[] VariableWriter;
private static int[] HasilProduksiWriter;
private static int[] JumlahProdukWriter;
private static string[] TextToolTipWriter;
private static int[] VariableReader;
private static int[] ConsumeProdukReader;
Universitas Sumatera Utara
98
private static int[] JumlahProdukReader;
private static string[] TextToolTipReader;
private static string TmpString = "";
private static ToolTip[] ToolTipsWriter;
private static ToolTip[] ToolTipsReader;
public FormSimulasi()
{
InitializeComponent();
}
private void timerWaktu_Tick(object sender, EventArgs e)
{
tbWaktu.Text = ""+ (Convert.ToInt32(tbWaktu.Text) + 1);
if (Convert.ToInt32(tbWaktu.Text) == Program.WaktuSimulasi)
{
timerWaktu.Stop();
tProd1.Enabled = false;
tProd2.Enabled = false;
tProd3.Enabled = false;
tProd4.Enabled = false;
tProd5.Enabled = false;
tProd6.Enabled = false;
tKons1.Enabled = false;
tKons2.Enabled = false;
tKons3.Enabled = false;
tKons4.Enabled = false;
tKons5.Enabled = false;
tKons6.Enabled = false;
MessageBox.Show("Waktu simulasi selesai");
}
}
private void FormSimulasi_Load(object sender, EventArgs e)
{
labelStatus1.Text = Program.JumlahWriter > 0 ? "AVAIABLE" : "NOT
AVAIABLE";
labelStatus2.Text = Program.JumlahWriter > 1 ? "AVAIABLE" : "NOT
AVAIABLE";
Universitas Sumatera Utara
99
labelStatus3.Text = Program.JumlahWriter > 2 ? "AVAIABLE" : "NOT
AVAIABLE";
labelStatus4.Text = Program.JumlahWriter > 3 ? "AVAIABLE" : "NOT
AVAIABLE";
labelStatus5.Text = Program.JumlahWriter > 4 ? "AVAIABLE" : "NOT
AVAIABLE";
labelStatus6.Text = Program.JumlahWriter > 5 ? "AVAIABLE" : "NOT
AVAIABLE";
labelStatusKons1.Text = Program.JumlahReader > 0 ? "AVAIABLE" :
"NOT AVAIABLE";
labelStatusKons2.Text = Program.JumlahReader > 1 ? "AVAIABLE" :
"NOT AVAIABLE";
labelStatusKons3.Text = Program.JumlahReader > 2 ? "AVAIABLE" :
"NOT AVAIABLE";
labelStatusKons4.Text = Program.JumlahReader > 3 ? "AVAIABLE" :
"NOT AVAIABLE";
labelStatusKons5.Text = Program.JumlahReader > 4 ? "AVAIABLE" :
"NOT AVAIABLE";
labelStatusKons6.Text = Program.JumlahReader > 5 ? "AVAIABLE" :
"NOT AVAIABLE";
VariableWriter = new int[Program.JumlahWriter];
HasilProduksiWriter = new int[Program.JumlahWriter];
JumlahProdukWriter = new int[Program.JumlahWriter];
TextToolTipWriter = new string[Program.JumlahWriter];
VariableReader = new int[Program.JumlahReader];
ConsumeProdukReader = new int[Program.JumlahReader];
JumlahProdukReader = new int[Program.JumlahReader];
TextToolTipReader = new string[Program.JumlahReader];
Random rand;
int randValue;
tbWaktu.Text = "0";
ToolTipsWriter = new ToolTip[Program.JumlahWriter];
for (int i = 0; i < Program.JumlahWriter; i++)
{
ToolTipsWriter[i] = new ToolTip();
Universitas Sumatera Utara
100
ToolTipsWriter[i].InitialDelay = 10;
//rand = new Random(DateTime.Now.Millisecond);
//randValue = rand.Next(3) + 1;
//Program.reader[i].Tipe = randValue.ToString();
Program.writer[i].RowIndex = 0;
}
tProd1.Interval = Program.Delay;
tProd2.Interval = Program.Delay;
tProd3.Interval = Program.Delay;
tProd4.Interval = Program.Delay;
tProd5.Interval = Program.Delay;
tProd6.Interval = Program.Delay;
ToolTipsReader = new ToolTip[Program.JumlahReader];
for (int i = 0 ; i < Program.JumlahReader ; i++)
{
ToolTipsReader[i] = new ToolTip();
ToolTipsReader[i].InitialDelay = 10;
//rand = new Random(DateTime.Now.Millisecond);
//randValue = rand.Next(3) + 1;
//Program.reader[i].Tipe = randValue.ToString();
Program.reader[i].RowIndex = 0;
}
tKons1.Interval = Program.Delay;
tKons2.Interval = Program.Delay;
tKons3.Interval = Program.Delay;
tKons4.Interval = Program.Delay;
tKons5.Interval = Program.Delay;
tKons6.Interval = Program.Delay;
labelNamaItems.Text = "(";
labelJumlahItems.Text = "(";
labelMinimum.Text = "(";
for (int i = 0 ; i < Program.JumlahJenis ; i++)
{
if (i > 0)
{
labelNamaItems.Text += ", ";
Universitas Sumatera Utara
101
labelJumlahItems.Text +=", ";
labelMinimum.Text += ", ";
}
labelNamaItems.Text += Program.ItemsName[i];
labelJumlahItems.Text += "0";
labelMinimum.Text += Program.MinDatabase;
}
labelMinimum.Text += ")";
labelNamaItems.Text += ")";
labelJumlahItems.Text += ")";
timerWaktu.Interval = Program.Delay;
Program.WriterIsSleep = false;
Program.ReaderIsSleep = true;
Semaphore = 0;
}
private void ReaderSimulation(int id, Label label, Timer timer, PictureBox
pic)
{
if (!Program.reader[id].Exist)
{
if (!Program.ReaderIsSleep)
{
if (Program.reader[id].Action == "Sedang mengkonsumsi")
{
if (Program.reader[id].RowIndex == 0 && (SLaporan == 0))
{
SLaporan--;
// Bentuk Table Baru
VariableReader[id] = Program.TableLog.Count();
RowLog row = new RowLog();
Program.TableLog.Add(row);
Program.reader[id].RowIndex = VariableReader[id];
Program.TableLog[VariableReader[id]].Variable = "Reader " +
id;
Program.TableLog[VariableReader[id]].WktMulai =
tbWaktu.Text;
Universitas Sumatera Utara
102
SLaporan++;
}
// Sedang mengkonsumsi
if (Convert.ToInt16(label.Tag) > 6)
{
label.Tag = "0";
}
label.Tag = Convert.ToInt16(label.Tag) + 1;
label.Text = "Sedang Mengkonsumsi \n";
for (int i = 0; i < Convert.ToInt16(label.Tag); i++)
{
label.Text += " . ";
}
if (!label.Visible)
{
label.Visible = true;
}
}
Random rand = new Random(DateTime.Now.Millisecond);
VariableReader[id] = rand.Next(15);
int rowIndex = Program.reader[id].RowIndex;
if ((VariableReader[id] == 1) &&
Program.TableLog[rowIndex].WktMulai != tbWaktu.Text)
{
// Proses konsumsi selesai
label.Visible = false;
// Catat Waktu selesai
Program.TableLog[rowIndex].WktSelesai = tbWaktu.Text;
// Random Hasil Produksi
Program.reader[id].strConsumeItems = "(";
for (int i = 0; i < Program.JumlahJenis; i++)
{
ConsumeProdukReader[id] = Program.MinProduksi +
rand.Next(Program.MaxKonsumsi - Program.MinKonsumsi) + 1;
Program.reader[id].ConsumeItems[i] =
ConsumeProdukReader[id];
if (i > 0)
{
Universitas Sumatera Utara
103
Program.reader[id].strConsumeItems += ", ";
}
Program.reader[id].strConsumeItems +=
ConsumeProdukReader[id];
}
Program.reader[id].strConsumeItems += ")";
ToolTipsReader[id].ToolTipTitle = "Reader " + (id + 1);
TextToolTipReader[id] = ": " +
Program.reader[id].strConsumeItems;
setToolTips(id, "Reader", TextToolTipReader[id]);
Laporan += "\n";
Laporan += "t = " + tbWaktu.Text + " detik : Reader-" + id + " selesai
mengkonsumsi " +
labelNamaItems.Text + " sebanyak " +
Program.reader[id].strConsumeItems +
" dan mulai bergerak menuju database.";
// Update Action
Program.reader[id].Exist = true;
Program.reader[id].Action = "Jalan ke Database";
// image turun
pic.Tag = "0";
pic.Location = new Point(pic.Location.X, pic.Location.Y - 20);
pic.Image = imgKDatabase.Images[0];
pic.Refresh();
pic.Visible = true;
}
}
else
{
if (label.Visible) label.Visible = false;
}
}
else if (Program.reader[id].Action == "Jalan ke Database")
{
pic.Tag = pic.Tag.ToString() == "0" ? "1" : "0";
if (Program.ReaderIsSleep)
{
pic.Image = imgKTidur.Images[Convert.ToInt16(pic.Tag)];
pic.Refresh();
}
Universitas Sumatera Utara
104
else
{
// naik
pic.Location = new Point(pic.Location.X, pic.Location.Y - 20);
pic.Image = imgKDatabase.Images[Convert.ToInt16(pic.Tag)];
pic.Refresh();
if (pic.Location.Y < 260)
{
// reader sampai;
Program.reader[id].Action = "Ambil Product dari Database";
}
}
}
else if (Program.reader[id].Action == "Ambil Product dari Database")
{
if (Program.ReaderIsSleep)
{
pic.Tag = pic.Tag.ToString() == "0" ? "1" : "0";
pic.Image = imgKTidur.Images[Convert.ToInt16(pic.Tag)];
pic.Refresh();
}
else
{
if (Semaphore <= -1) return;
Semaphore--;
TmpString = "(";
ConsumeProdukReader[id] = 0;
for (int i = 0; i < Program.JumlahJenis; i++)
{
JumlahProdukReader[id] = Program.reader[id].ConsumeItems[i];
if (i > 0)
{
TmpString += ", ";
}
if (Program.DatabaseItems[i] - JumlahProdukReader[id] >
Program.MinDatabase)
{
TmpString += JumlahProdukReader[id];
Program.DatabaseItems[i] -= JumlahProdukReader[id];
Program.reader[id].ConsumeItems[i] = 0;
Universitas Sumatera Utara
105
}
else if (Program.DatabaseItems[i] - JumlahProdukReader[id] <=
Program.MinDatabase)
{
JumlahProdukReader[id] = Program.DatabaseItems[i] -
Program.MinDatabase;
TmpString += JumlahProdukReader[id];
// tambahkan sebagian
Program.DatabaseItems[i] -= JumlahProdukReader[id];
Program.reader[id].ConsumeItems[i] -=
JumlahProdukReader[id];
Program.ReaderIsSleep = true;
ConsumeProdukReader[id] = 1;
}
}
TmpString += ") ";
Laporan += "\n";
string waktu = tbWaktu.Text;
Laporan += "t = " + waktu + " detik : Reader -" + id +
" mengambil " + labelNamaItems + " sebesar " + TmpString +
" dari database.";
Program.WriterIsSleep = false;
Laporan += "t = " + waktu + " detik : Barang sudah diambil dari
didatabase, " +
"Reader membangunkan (wake up) semua writer yang aktif.";
if (Program.ReaderIsSleep)
{
Laporan += "t = " + waktu + " detik : Ukuran database minimum, "
+
"semua reader yang aktif sleep.";
}
RefreshReader(id,pic);
RefreshDatabase();
Program.TableLog[Program.reader[id].RowIndex].WktDatabase =
waktu;
Program.TableLog[Program.reader[id].RowIndex].Action = "+ " +
TmpString;
Program.TableLog[Program.reader[id].RowIndex].Database =
labelJumlahItems.Text;
Program.reader[id].RowIndex = 0;
Universitas Sumatera Utara
106
Semaphore++;
//MessageBox.Show(HasilProduksiWriter[id] + "hasil");
if (ConsumeProdukReader[id] == 0)
{
timer.Interval = Program.Delay;
Program.reader[id].Action = "Balik ke Bawah";
}
}
}
else if (Program.reader[id].Action == "Balik ke Bawah")
{
pic.Tag = pic.Tag.ToString() == "0" ? "1" : "0";
pic.Location = new Point(pic.Location.X, pic.Location.Y + 20);
pic.Image = imgKBalik.Images[Convert.ToInt16(pic.Tag)];
pic.Refresh();
if (pic.Location.Y > 400)
{
pic.Visible = false;
Program.reader[id].Exist = false;
Program.reader[id].Action = "Sedang mengkonsumsi";
}
}
}
private void WriterSimulation(int id, Label label, Timer timer, PictureBox pic)
{
if (!Program.writer[id].Exist)
{
if (!Program.WriterIsSleep)
{
if (Program.writer[id].RowIndex == 0 && (SLaporan == 0))
{
SLaporan--;
// Bentuk Table Baru
VariableWriter[id] = Program.TableLog.Count();
RowLog row = new RowLog();
Program.TableLog.Add(row);
Program.writer[id].RowIndex = VariableWriter[id];
Universitas Sumatera Utara
107
Program.TableLog[VariableWriter[id]].Variable = "Writer " + id;
Program.TableLog[VariableWriter[id]].WktMulai = tbWaktu.Text;
SLaporan++;
}
// Sedang Memproduksi
if (Convert.ToInt16(label.Tag) > 6)
{
label.Tag = "0";
}
label.Tag = Convert.ToInt16(label.Tag) + 1;
label.Text = "Sedang Memproduksi \n";
for (int i = 0; i < Convert.ToInt16(label.Tag); i++)
{
label.Text += " . ";
}
if (!label.Visible)
{
label.Visible = true;
}
Random rand = new Random(DateTime.Now.Millisecond);
VariableWriter[id] = rand.Next(15);
int rowIndex = Program.writer[id].RowIndex;
if ((VariableWriter[id] == 1) &&
Program.TableLog[rowIndex].WktMulai != tbWaktu.Text)
{
// Proses produksi selesai
label.Visible = false;
// Catat Waktu selesai
Program.TableLog[rowIndex].WktSelesai = tbWaktu.Text;
// Random Hasil Produksi
Program.writer[id].StrHasilProduksi = "(";
for (int i = 0; i < Program.JumlahJenis; i++)
{
HasilProduksiWriter[id] = Program.MinProduksi +
rand.Next(Program.MaxProduksi - Program.MinProduksi) + 1;
Program.writer[id].Product[i] = HasilProduksiWriter[id];
if (i > 0)
{
Program.writer[id].StrHasilProduksi += ", ";
Universitas Sumatera Utara
108
}
Program.writer[id].StrHasilProduksi += HasilProduksiWriter[id];
}
Program.writer[id].StrHasilProduksi += ")";
ToolTipsWriter[id].ToolTipTitle = "Writer " + (id + 1);
TextToolTipWriter[id] = ": " +
Program.writer[id].StrHasilProduksi;
setToolTips(id, "Writer", TextToolTipWriter[id]);
Laporan += "\n";
Laporan += "t = " + tbWaktu.Text + " detik : Writer-" + id + " selesai
memproduksi " +
labelNamaItems.Text + " sebanyak " +
Program.writer[id].StrHasilProduksi +
" dan mulai bergerak menuju database.";
// Update Action
Program.writer[id].Exist = true;
Program.writer[id].Action = "Jalan ke Database";
// image turun
pic.Tag = "0";
pic.Location = new Point(pic.Location.X, pic.Location.Y + 20);
pic.Image = imgPDatabase.Images[0];
pic.Refresh();
pic.Visible = true;
}
}
else
{
if (label.Visible) label.Visible = false;
}
}
else if (Program.writer[id].Action == "Jalan ke Database")
{
pic.Tag = pic.Tag.ToString() == "0" ? "1" : "0";
if (Program.WriterIsSleep)
{
pic.Image = imgPTidur.Images[0];
pic.Refresh();
}
else
{
Universitas Sumatera Utara
109
// turun
pic.Location = new Point(pic.Location.X, pic.Location.Y + 20);
pic.Image = imgPDatabase.Images[Convert.ToInt16(pic.Tag)];
pic.Refresh();
if (pic.Location.Y > 160)
{
// writer sampai;
Program.writer[id].Action = "Taruh Product ke Database";
}
}
}
else if (Program.writer[id].Action == "Taruh Product ke Database")
{
//MessageBox.Show("Taruh Ke database");
if (Program.WriterIsSleep)
{
pic.Tag = pic.Tag.ToString() == "0" ? "1" : "0";
pic.Image = imgPTidur.Images[Convert.ToInt16(pic.Tag)];
pic.Refresh();
}
else
{
if (Semaphore == -1) return;
Semaphore--;
TmpString = "(";
HasilProduksiWriter[id] = 0;
for (int i = 0; i < Program.JumlahJenis; i++)
{
JumlahProdukWriter[id] = Program.writer[id].Product[i];
if (i > 0)
{
TmpString += ", ";
}
if (Program.DatabaseItems[i] + JumlahProdukWriter[id] <
Program.MaxDatabase)
{
TmpString += JumlahProdukWriter[id];
Program.DatabaseItems[i] += JumlahProdukWriter[id];
Program.writer[id].Product[i] = 0;
}
Universitas Sumatera Utara
110
else if (Program.DatabaseItems[i] + JumlahProdukWriter[id] >=
Program.MaxDatabase)
{
JumlahProdukWriter[id] = Program.MaxDatabase -
Program.DatabaseItems[i];
TmpString += JumlahProdukWriter[id];
// tambahkan sebagian
Program.DatabaseItems[i] += JumlahProdukWriter[id];
Program.writer[id].Product[i] -= JumlahProdukWriter[id];
Program.WriterIsSleep = true;
HasilProduksiWriter[id] = 1;
}
}
TmpString += ") ";
Laporan += "\n";
string waktu = tbWaktu.Text;
Laporan += "t = " + waktu + " detik : Writer-" + id +
" meletakkan " + labelNamaItems + " sebesar " + TmpString +
" ke database.";
Program.ReaderIsSleep = false;
Laporan += "t = " + waktu + " detik : Barang sudah diletakkan
didatabase, " +
"Writer membangunkan (wake up) semua reader yang aktif.";
if (Program.WriterIsSleep)
{
Laporan += "t = " + waktu + " detik : Ukuran database maksimum,
" +
"semua writer yang aktif sleep.";
}
RefreshWriter(id,pic);
RefreshDatabase();
Program.TableLog[Program.writer[id].RowIndex].WktDatabase =
waktu;
Program.TableLog[Program.writer[id].RowIndex].Action = "+ " +
TmpString;
Program.TableLog[Program.writer[id].RowIndex].Database =
labelJumlahItems.Text;
Program.writer[id].RowIndex = 0;
Semaphore++;
Universitas Sumatera Utara
111
//MessageBox.Show(HasilProduksiWriter[id] + "hasil");
if (HasilProduksiWriter[id] == 0)
{
timer.Interval = Program.Delay;
Program.writer[id].Action = "Balik ke Atas";
}
}
}
else if (Program.writer[id].Action == "Balik ke Atas")
{
pic.Tag = pic.Tag.ToString() == "0" ? "1" : "0";
pic.Location = new Point(pic.Location.X, pic.Location.Y - 20);
pic.Image = imgPBalik.Images[Convert.ToInt16(pic.Tag)];
pic.Refresh();
if (pic.Location.Y < 80)
{
pic.Visible = false;
Program.writer[id].Exist = false;
Program.writer[id].Action = "";
}
}
}
private void RefreshReader(int id, PictureBox pic)
{
Program.reader[id].strConsumeItems = "(";
for (int i = 0; i < Program.JumlahJenis; i++)
{
ConsumeProdukReader[id] = Program.reader[id].ConsumeItems[i];
if (i > 0)
{
Program.reader[id].strConsumeItems += ", ";
}
Program.reader[id].strConsumeItems += ConsumeProdukReader[id];
}
Program.reader[id].strConsumeItems += ")";
ToolTipsReader[id].ToolTipTitle = "Reader " + (id + 1);
TextToolTipReader[id] = ": " + Program.reader[id].strConsumeItems;
setToolTips(id, "Reader", TextToolTipReader[id]);
}
Universitas Sumatera Utara
112
private void RefreshWriter(int id, PictureBox pic)
{
Program.writer[id].StrHasilProduksi = "(";
for (int i = 0 ; i < Program.JumlahJenis ; i++)
{
HasilProduksiWriter[id] = Program.writer[id].Product[i];
if (i > 0)
{
Program.writer[id].StrHasilProduksi += ", ";
}
Program.writer[id].StrHasilProduksi += HasilProduksiWriter[id];
}
Program.writer[id].StrHasilProduksi += ")";
ToolTipsWriter[id].ToolTipTitle = "Writer " + (id + 1);
TextToolTipWriter[id] = ": " + Program.writer[id].StrHasilProduksi;
setToolTips(id, "Writer", TextToolTipWriter[id]);
}
private void RefreshDatabase()
{
labelJumlahItems.Text = "(";
for (int i = 0 ; i < Program.JumlahJenis ; i++)
{
if (i > 0 )
{
labelJumlahItems.Text += ", ";
}
labelJumlahItems.Text += Program.DatabaseItems[i];
}
labelJumlahItems.Text += ")";
}
private void picWriter1_MouseMove(object sender, MouseEventArgs e)
{
//ToolTipsWriter[0].Show(TextToolTipWriter[0], this,
picWriter1.Location.X + 5, picWriter1.Location.Y + 5, 1);
}
private void picWriter2_MouseMove(object sender, MouseEventArgs e)
Universitas Sumatera Utara
113
{
//ToolTipsWriter[1].Show(TextToolTipWriter[1], this,
picWriter2.Location.X + 5, picWriter2.Location.Y + 5, 1);
}
private void picWriter3_MouseMove(object sender, MouseEventArgs e)
{
//ToolTipsWriter[2].Show(TextToolTipWriter[2], this,
picWriter3.Location.X + 5, picWriter3.Location.Y + 5, 1);
}
private void picWriter4_MouseMove(object sender, MouseEventArgs e)
{
//ToolTipsWriter[3].Show(TextToolTipWriter[3], this,
picWriter4.Location.X + 5, picWriter4.Location.Y + 5, 1);
}
private void picWriter5_MouseMove(object sender, MouseEventArgs e)
{
//ToolTipsWriter[4].Show(TextToolTipWriter[4], this,
picWriter5.Location.X + 5, picWriter5.Location.Y + 5, 1);
}
private void picWriter6_MouseMove(object sender, MouseEventArgs e)
{
//ToolTipsWriter[5].Show(TextToolTipWriter[5], this,
picWriter6.Location.X + 5, picWriter6.Location.Y + 5, 1);
}
private void bStart_Click(object sender, EventArgs e)
{
for (int i = 0 ; i < 6 ; i++)
{
if (i < Program.JumlahWriter)
{
if (i==0) tProd1.Enabled = true;
else if (i==1) tProd2.Enabled = true;
else if (i == 2) tProd3.Enabled = true;
else if (i == 3) tProd4.Enabled = true;
else if (i == 4) tProd5.Enabled = true;
Universitas Sumatera Utara
114
else if (i==5) tProd6.Enabled = true;
}
if (i < Program.JumlahReader)
{
if (i==0) tKons1.Enabled = true;
else if (i == 1) tKons2.Enabled = true;
else if (i == 2) tKons3.Enabled = true;
else if (i == 3) tKons4.Enabled = true;
else if (i == 4) tKons5.Enabled = true;
else if (i == 5) tKons6.Enabled = true;
}
}
timerWaktu.Enabled = true;
}
private void setToolTips(int id, string type, string caption)
{
if (type == "Writer")
{
if (id == 0) ToolTipsWriter[0].SetToolTip(picWriter1, caption);
if (id == 1) ToolTipsWriter[1].SetToolTip(picWriter2, caption);
if (id == 2) ToolTipsWriter[2].SetToolTip(picWriter3, caption);
if (id == 3) ToolTipsWriter[3].SetToolTip(picWriter4, caption);
if (id == 4) ToolTipsWriter[4].SetToolTip(picWriter5, caption);
if (id == 5) ToolTipsWriter[5].SetToolTip(picWriter6, caption);
}
else if (type == "Reader")
{
if (id == 0) ToolTipsReader[0].SetToolTip(picReader1, caption);
if (id == 1) ToolTipsReader[1].SetToolTip(picReader2, caption);
if (id == 2) ToolTipsReader[2].SetToolTip(picReader3, caption);
if (id == 3) ToolTipsReader[3].SetToolTip(picReader4, caption);
if (id == 4) ToolTipsReader[4].SetToolTip(picReader5, caption);
if (id == 5) ToolTipsReader[5].SetToolTip(picReader6, caption);
}
}
private void tProd1_Tick(object sender, EventArgs e)
{
WriterSimulation(0, labelProdAction1, tProd1, picWriter1);
Universitas Sumatera Utara
115
}
private void tProd2_Tick(object sender, EventArgs e)
{
WriterSimulation(1, labelProdAction2, tProd2, picWriter2);
}
private void tProd3_Tick(object sender, EventArgs e)
{
WriterSimulation(2, labelProdAction3, tProd3, picWriter3);
}
private void tProd4_Tick(object sender, EventArgs e)
{
WriterSimulation(3, labelProdAction4, tProd4, picWriter4);
}
private void tProd5_Tick(object sender, EventArgs e)
{
WriterSimulation(4, labelProdAction5, tProd5, picWriter5);
}
private void tProd6_Tick(object sender, EventArgs e)
{
WriterSimulation(5, labelProdAction6, tProd6, picWriter6);
}
private void tKons1_Tick(object sender, EventArgs e)
{
ReaderSimulation(0, labelKonsAction1, tKons1, picReader1);
}
private void tKons2_Tick(object sender, EventArgs e)
{
ReaderSimulation(1, labelKonsAction2, tKons2, picReader2);
}
private void tKons3_Tick(object sender, EventArgs e)
{
ReaderSimulation(2, labelKonsAction3, tKons3, picReader3);
Universitas Sumatera Utara
116
}
private void tKons4_Tick(object sender, EventArgs e)
{
ReaderSimulation(3, labelKonsAction4, tKons4, picReader4);
}
private void tKons5_Tick(object sender, EventArgs e)
{
ReaderSimulation(4, labelKonsAction5, tKons5, picReader5);
}
private void tKons6_Tick(object sender, EventArgs e)
{
ReaderSimulation(5, labelKonsAction6, tKons6, picReader6);
}
private void button1_Click(object sender, EventArgs e)
{
FormLog form = new FormLog();
form.richTextBox1.Clear();
form.richTextBox1.Text = Laporan;
form.ShowDialog();
form.Dispose();
}
private void button2_Click(object sender, EventArgs e)
{
FormTabel form = new FormTabel();
form.database = labelNamaItems.Text;
form.ShowDialog();
Dispose();
}
private void bStop_Click(object sender, EventArgs e)
{
for (int i = 0; i < 6; i++)
{
if (i < Program.JumlahWriter)
{
Universitas Sumatera Utara
117
if (i == 0) tProd1.Enabled = false;
else if (i == 1) tProd2.Enabled = false;
else if (i == 2) tProd3.Enabled = false;
else if (i == 3) tProd4.Enabled = false;
else if (i == 4) tProd5.Enabled = false;
else if (i == 5) tProd6.Enabled = false;
}
if (i < Program.JumlahReader)
{
if (i == 0) tKons1.Enabled = false;
else if (i == 1) tKons2.Enabled = false;
else if (i == 2) tKons3.Enabled = false;
else if (i == 3) tKons4.Enabled = false;
else if (i == 4) tKons5.Enabled = false;
else if (i == 5) tKons6.Enabled = false;
}
}
timerWaktu.Enabled = false;
}
}
}
3. Listing Program Form Tabel Simulasi
namespace SimulasiReadersWriters
{
partial class FormTabel
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed;
otherwise, false.</param>
protected override void Dispose(bool disposing)
Universitas Sumatera Utara
118
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.dataGridView1 = new System.Windows.Forms.DataGridView();
this.button1 = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
this.SuspendLayout();
//
// dataGridView1
//
this.dataGridView1.ColumnHeadersHeightSizeMode =
System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSiz
e;
this.dataGridView1.Location = new System.Drawing.Point(12, 12);
this.dataGridView1.Name = "dataGridView1";
this.dataGridView1.Size = new System.Drawing.Size(874, 495);
this.dataGridView1.TabIndex = 0;
//
// button1
//
this.button1.Location = new System.Drawing.Point(811, 531);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 1;
this.button1.Text = "keluar";
this.button1.UseVisualStyleBackColor = true;
Universitas Sumatera Utara
119
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// FormTabel
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(898, 566);
this.Controls.Add(this.button1);
this.Controls.Add(this.dataGridView1);
this.Name = "FormTabel";
this.Text = "FormTabel";
this.Load += new System.EventHandler(this.FormTabel_Load);
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.DataGridView dataGridView1;
private System.Windows.Forms.Button button1;
}
}
4. Listing Program Form History (Log)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace SimulasiReadersWriters
{
public partial class FormLog : Form
{
Universitas Sumatera Utara
120
public FormLog()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
Close();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SimulasiReadersWriters
{
class RowLog
{
public string Variable {get; set;}
public string WktMulai {get; set;}
public string WktSelesai {get; set;}
public string WktDatabase {get; set;}
public string Action {get; set;}
public string Database {get; set;}
}
}
5. Listing Program Form About
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
Universitas Sumatera Utara
121
using System.Windows.Forms;
namespace SimulasiReadersWriters
{
public partial class FormAbout : Form
{
public FormAbout()
{
InitializeComponent();
}
}
}
Universitas Sumatera Utara
122
CURRICULUM VITAE
Nama : Octavianus Sianturi
Alamat Sekarang : Jl. Sempurna Ujung Villa Nusa Sempurna B-26 Medan
Alamat Orang tua : Jl. Kain Panjang No.01 Pematangsiantar
Telp/Hp : 082368771509
Email : [email protected]
Riwayat Pendidikan
2008-2013 : S1 Ilmu Komputer Universitas Sumatera Utara, Medan
2005-2008 : SMA RK Budi Mulia Pematangsiantar
2002-2005 : SMP Kristen Kalam Kudus Pematangsiantar
1996-2002 : SD Kristen Kalam Kudus Pematangsiantar
Keahlian/Kursus yang diikuti
Pemrograman Komputer
Web Developer
Jaringan Komputer
Universitas Sumatera Utara