simulasi readers and writers problem dengan …

122
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

Upload: others

Post on 01-Oct-2021

32 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 2: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 3: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 4: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 5: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 6: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 7: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 8: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 9: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 10: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 11: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

11

Daftar Tabel

Halaman

2.1 Tabel Deadlock 35

3.1 Tabel Gambar Objek Simulasi 44

Universitas Sumatera Utara

Page 12: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 13: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 14: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 15: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 16: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 17: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 18: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 19: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 20: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 21: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 22: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 23: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 24: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 25: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 26: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 27: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 28: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 29: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 30: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 31: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 32: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 33: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 34: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 35: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 36: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 37: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 38: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 39: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 40: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 41: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 42: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 43: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 44: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 45: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 46: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 47: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 48: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 49: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 50: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 51: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 52: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 53: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 54: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 55: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 56: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 57: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 58: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 59: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 60: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 61: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 62: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 63: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 64: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 65: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 66: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 67: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 68: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 69: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 70: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 71: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 72: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 73: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 74: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 75: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

75

Gambar 3.7 Rancangan Form About

Universitas Sumatera Utara

Page 76: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 77: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 78: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 79: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 80: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 81: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 82: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 83: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 84: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 85: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 86: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 87: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

87

Gambar 4.10 Form Log Hasil Simulasi

Tampilan form Tabel Simulasi dapat dilihat pada gambar berikut.

Universitas Sumatera Utara

Page 88: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

88

Gambar 4.11 Form Tabel Hasil Simulasi

Universitas Sumatera Utara

Page 89: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 90: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 91: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 92: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 93: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 94: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 95: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 96: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 97: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 98: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 99: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 100: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 101: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 102: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 103: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 104: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 105: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 106: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 107: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 108: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 109: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 110: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 111: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 112: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 113: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 114: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 115: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 116: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 117: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 118: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 119: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 120: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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

Page 121: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

121

using System.Windows.Forms;

namespace SimulasiReadersWriters

{

public partial class FormAbout : Form

{

public FormAbout()

{

InitializeComponent();

}

}

}

Universitas Sumatera Utara

Page 122: SIMULASI READERS AND WRITERS PROBLEM DENGAN …

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