Makalah ini membahas tentang peranan semaphore dalam sistem operasi. Semaphore adalah variabel integer yang digunakan untuk sinkronisasi antarproses. Terdapat dua operasi pada semaphore yaitu down dan up. Semaphore dapat berupa binary semaphore atau counting semaphore. Fungsi utama semaphore adalah menyelesaikan masalah section kritis dengan memenuhi syarat eksklusivitas bersama, kemajuan, dan waiting terbatas.
English for Proficiency Certification (EPC) - Modul 2 - Further Exercises and...
SEMAFOR
1. MAKALAH
Peranan Semaphore
Ditujukan untuk memenuhi tugas mata kuliah Sistem Operasi
Disusun oleh:
Anissa Latanssa 0616103005
Dede Iryawan 0616103022
Ilham Gustiawan 0616103009
Mohamad Wildan 0616103015
Rizky Ramadhan 0616103004
UNIVERSITAS WIDYATAMA
PROGRAM STUDI TEKNIK INFORMATIKA
FAKULTAS TEKNIK
BANDUNG
2018
2. KATA PENGANTAR
Puji syukur kita panjatkan kepada Tuhan Yang Maha Esa, karena atas rahmat-Nya
jualah, saya dapat menyelesaikan makalah. Saya juga mengucapkan terima kasih kepada semua
pihak yang telah membantu dalam memberikan masukan dan kritik yang membangun yang
dapat menjadikan makalah ini lebih lengkap dan lebih layak sebagai informasi.
Saya menyadari makalah ini masih banyak kekurangan. Oleh karena itu, saya
senantiasa mengharapkan masukan dan penyempurnaan makalah ini. Akhirnya, semoga
makalah ini dapat bermanfaat.
Bandung, 21 Mei 2018
Penulis
3. A. Konsep Dasar Semaphore
Semaphore termasuk pendekatan yang diajukan oleh Djikstra, dengan prinsip bahwa
dua proses atau lebih dapat bekerja sama dengan menggunakan penanda-penanda sederhana.
Seperti proses dapat dipaksa berhenti pada suatu saat, sampai proses mendapatkan penanda
tertentu itu. Sembarang kebutuhan koordinasi kompleks dapat dipenuhi dengan struktur
penanda yang cocok untuk kebutuhan itu. Variabel khusus untuk penanda ini disebut
semaphore
Semaphore mempunyai dua sifat, yaitu:
Semaphore dapat diinisialisasi dengan nilai non-negatif.
Terdapat dua operasi terhadap semaphore, yaitu Down dan Up. Usulan asli yang
disampaikan Djikstra adalah operasi P dan V.
Semaphore adalah salah satu teknik sinyal sederhana, dan merupakan konsep penting
dalam OS desain, dimana sebuah nilai integer digunakan untuk pensinyalan antara proses.
Hanya tiga operasi yang mungkin dilakukan pada semaphore, yang semuanya atom:
inisialisasi, penurunan, dan penaikan.
Operasi pengurangan dapat mengakibatkan terhalangnya proses, dan kenaikan dari
pengoperasian yang sedang berlangsung dapat mengakibatkan terblokirnya suatu proses. Hal
ini juga dikenal sebagai sebuah perhitungan semaphore atau semaphore umum.
Semaphore adalah bendera digunakan untuk memeriksa apakah sumber daya saat ini
sedang digunakan oleh thread atau proses. Misalnya, jika suatu proses ingin menggunakan
printer, terlebih dahulu perlu memastikan printer tersedia dengan memeriksa untuk melihat
apakah semaphore telah ditetapkan. jika sudah diatur, maka perlu menunggu untuk proses yang
4. saat ini telah selesai. Namun, jika printer bebas, proses ini akan menetapkan semaphore dan
mulai menggunakan printer, memblokir akses ke semua proses lainnya sampai selesai.
Semaphore adalah teknik klasik untuk melindungi bagian penting dari kode dari yang
secara simultan dieksekusi oleh lebih dari satu proses. Semaphore adalah generalisasi dari
monitor. Sebuah monitor memungkinkan hanya satu thread untuk mengunci objek sekaligus.
Semaphore A N memungkinkan proses.
Proses meraih semaphore-eksklusif untuk menggunakan semi disebut menenggak
semaphore karena mereka diimplementasikan dengan integer Countdown yang decrements
untuk setiap kunci dan kenaikan untuk masing-masing membuka. Jika semaphore adalah
sepenuhnya terisi, thread baru ingin menggunakannya akan menunggu sampai thread beberapa
rilis kunci dengan upping semaphore itu. Untuk semaphore untuk bekerja, cek untuk penuh,
dan penurunan harus dilakukan semua dalam satu instruksi yang tidak pernah terputus atom.
Instruksi monitor JVM menyediakan dukungan hardware yang diperlukan untuk
mensimulasikan semaphores.
Semaphore s, lain kontribusi penting oleh EW Dijkstra, dapat dilihat sebagai ekstensi
untuk mutex kunci. Semaphore adalah suatu obyek dengan dua metode Tunggu dan Sinyal,
sebuah integer swasta counter dan antrian swasta (benang). Semantik dari semaphore adalah
sangat sederhana. Misalkan S adalah semaphore yang swasta counter telah diinisialisasi ke
integer non-negatif.
Ketika Tunggu dijalankan oleh thread, kita memiliki dua kemungkinan:
Penghitung S adalah positif
Dalam hal ini, konter ini mengalami penurunan sebesar 1 dan benang kembali
pelaksanaannya.
Penghitung S adalah nol
Dalam hal ini, benang ditangguhkan dan dimasukkan ke dalam antrian pribadi S.
Ketika Sinyal dijalankan oleh thread, kami juga memiliki dua kemungkinan:
Antrian S tidak memiliki benang menunggu
Penghitung S ditingkatkan oleh satu dan benang kembali pelaksanaannya.
Antrian S telah menunggu threads
Dalam hal ini, konter S harus nol (lihat pembahasan Tunggu di atas). Salah satu benang
menunggu akan diizinkan untuk meninggalkan antrian dan melanjutkan
pelaksanaannya. Benang yang mengeksekusi Sinyal juga terus.
5. Operasi Tunggu atau Signal adalah atom. Ini berarti sekali kegiatan Tunggu mulai
(yaitu, pengujian dan penurunan nilai counter dan memasukkan benang ke dalam antrian),
mereka akan terus sampai akhir tanpa gangguan apapun. Lebih tepatnya, meskipun ada banyak
langkah untuk melaksanakan Tunggu dan Signal, langkah-langkah ini dianggap sebagai
instruksi non-interruptible tunggal.
Demikian pula, hal yang sama berlaku untuk Sinyal. Apalagi, jika lebih dari satu
benang mencoba mengeksekusi Tunggu (atau sinyal), hanya satu dari mereka akan berhasil.
Kita tidak boleh membuat asumsi tentang mana thread akan berhasil.
Tunggu karena dapat menyebabkan thread untuk memblokir (yaitu, ketika counter nol),
ia memiliki efek yang sama dari operasi kunci dari sebuah kunci mutex. Demikian pula, sebuah
sinyal dapat melepaskan benang tunggu, dan mirip dengan membuka operasi. Bahkan,
semaphores dapat digunakan sebagai kunci mutex. Pertimbangkan S semaphore dengan nilai
awal 1. Kemudian, Tunggu dan Signal sesuai untuk mengunci dan membuka:
Mari kita periksa bagaimana sepasang Tunggu dan Signal dapat menjamin
pengecualian bersama. Perlu diingat bahwa nilai awal counter dari S adalah 1. Misalkan
sejumlah benang mencoba untuk eksekusi Tunggu. Karena hanya ada satu thread berhasil dapat
mengeksekusi Tunggu, thread ini, katakanlah A, menyebabkan counter berkurang sebesar 1,
dan memasuki bagian yang kritis. Karena nilai awal counter adalah 1, sekali thread A
memasuki critical section, konter menjadi 0, dan, sebagai hasilnya, semua usaha berikutnya
dalam melaksanakan Tunggu akan diblokir. Oleh karena itu, membenarkan klaim kita bahwa
Tunggu mirip untuk mengunci.
Perkembangan zaman yang begitu pesat mampu meracuni mahasiswa dengan cara
memunculkan produk-produk teknologi yang semakin canggih yang membuat kecenderungan
pada mahasiswa untuk terus menggunakan hasil racikan teknologi bahkan tak bisa dipungkiri
pada masa dewasa ini, mahasiswa bahkan tak pernah lepas dari hasil Teknologi Informasi dan
Komunikasi.
Semaphore adalah salah satu cara menangani critical section. Semaphore S merupakan
variabel bertipe integer yang diakses dengan 2 standar operasi atomic, yaitu wait dan signal.
Operasi-operasi ini diwakili dengan P (wait) dan V(signal), sebagai berikut :
Wait(S) : while S 0 do no)op;
S:=S – 1;
Signal : S:=S + 1;
6. Misalkan ada 2 proses yang sedang berjalan secara konkure, yaitu P1 dengan
pernyataan S1 dan P2 dengan pernyataan S2. andaikan kita mengharapkan S2 baru akan
dijalankan hanya setelah S1 selesai. Hal ini dapat dilakukan dengan menggunakan bantuan
semaphore synch (dengan nilai awal = 0) yang akan dishare oleh kedua proses.
Untuk Proses P1 :
S1 ;
Signal(synch);
Untuk proses P2:
Wait(synch);
S2;
Karena nilai awal untuk synch adalah nol, maka P2 akan mengeksekusi S2 hanya
setelah P1 mengerjakan signal(synch) setelah S1
Salah satu kerugian dari penggunaan semaphore diatas adalah adanya busy waiting.
Apabila suatu proses menempati critical, dan ada proses lain ingin masuk critical section, maka
kan terjadi iterasi secara terus-menerus pada entry-section. Hal ini akan menimbulkan masalah
pada sistem yang menggunakan konsep multiprogramming.
Untuk menghindari busy waiting, dilakukan modifikasi pada operasi wait dan signal.
Jika suatu proses sedang mengeksekusi operasi wait, maka nilai semaphore menjadi tidak
positif. Pada saat ini proses akan memblok dirinya sendiri (blok) dan ditempatkan pada waiting
queue.
Proses yang sedang diblok akan menunggu hingga semaphore S direstart, yaitu pada
saat beberapa proses yang lain mengeksekusi operasi signal. Suatu proses akan direstart dengan
operasi wakeup, yang akan mengubah proses dari keadaan waiting ke ready.
Beberapa Prinsip Semaphore :
1. Dua proses dapat saling berkaitan atau menentukan proses yang lain dengan
memanfaatkan signal-sinal
2. Sebuah proses akan dihentikan oleh proses yang lain, ketika mendapatkan signal
tertentu. Suatu proses akan menunggu diproses setelah nilai integer menjadi 0.
selanjutnya sinyal akan dilakukan increamen dengan penambahan 1
3. Semaphore merupakan variable bertipe integer yang diakses oleh 2 operasi atomik
standar, yaitu wait dan signal.
7. 4. Terdapat dua operasi terhadap semaphore yaitu Down dan Up. Nama aslinya : P
dan V
B. Macam-Macam Semaphore
Ada 2 macam semafor yang cukup umum, yaitu:
Binary semaphore
Counting semaphore
Binary semaphore adalah semafor yang bernilai hanya 1 dan 0. Sedangkan Counting
semaphore adalah semafor yang dapat bernilai 1 dan 0 dan nilai integer yang lainnya.
Banyak sistem operasi yang hanya mengimplementasi binary semaphore sebagai
primitif, sedangkan counting semaphore dibuat dengan memakai primitif ini. Untuk lebih rinci
mengenai cara pembuatan counting semaphore dapat dilihat pada bagian berikutnya.
Perlu diketahui di sini bahwa, ada beberapa jenis dari counting semaphore. Salah satu
jenisnya adalah semafor yang tidak mencapai nilai negatif (seperti yang dicontohkan pada
bagian sebelumnya). Jenis yang lain adalah semaphore yang dapat mencapai nilai negatif.
Pembuatan counting semaphore banyak dilakukan para programmer untuk memenuhi
alat sinkronisasi yang sesuai dengannya. Seperti yang telah dibahas di atas, bahwa counting
semaphore ada beberapa macam. Pada bagian ini, akan dibahas counting semaphore yang
memperbolehkan harga negatif.
Listing program di bawah ini diambil dari buku Silberschatz.
00 binary-semaphore S1,S2;
01 int C;
Subrutin wait C dapat dilihat di bawah ini:
02 wait (S1);
03 C--;
04 if ( C < 0 ) {
05 signal (S1);
06 wait (S2);
8. 07 }
08 signal (S1);
subrutin signal C dapat dilihat di bawah ini:
09 wait (S1);
10 C++;
11 if (C <= 0)
12 signal (S2);
13 else
14 signal (S1);
Kita memerlukan dua binary semaphore pada kasus ini, maka pada baris 00
didefinisikan dua binary semaphore. Baris 01 mendefinisikan nilai dari semafor tersebut. Perlu
diketahui di sini bahwa waitC adalah wait untuk counting semaphore, sedangkan wait adalah
untuk binary semaphore.
Jika diperhatikan pada subrutin waitC dan signalC di awal dan akhir diberikan pasangan
wait dan signal dari binary semaphore. Fungsi dari binary semaphore yang ini adalah untuk
menjamin critical section (instruksi wait dan signal dari semafor bersifat atomic, maka begitu
pula untuk waitC dan signalC, jadi kegunaan lain semafor adalah untuk membuat suatu
subrutin bersifat atomic).
Binary semaphore S2 sendiri digunakan sebagai tempat menunggu giliran proses-
proses. Proses-proses tersebut menunggu dengan cara spinlock atau non-spinlock tergantung
dari implementasi binary semaphore yang ada.
Perhatikan baris 03 dan 04. Baris ini berbeda dengan apa yang sudah dijabarkan pada
bagian sebelumnya. Karena baris ini maka memungkinkan nilai semafor untuk menjadi negatif.
Lalu apa artinya bagi kita? Ternyata nilai negatif mengandung informasi tambahan yang cukup
berarti bagi kita yaitu bila nilai semafor negatif, maka absolut dari nilai tersebut menunjukkan
banyaknya proses yang sedang menunggu atau wait.
Jadi arti baris 11 menyatakan bahwa bila ada proses yang menunggu maka bangunkan
mereka semua untuk berkompetisi. Mengapa pada baris 05 dilakukan signal untuk S1?
9. Alasannya karena seperti yang telah kita ketahui bahwa semaphore menjamin ketiga sifat dari
critical section.
Tetapi adalah tidak relevan bila pada saat waktu menunggu, waitC masih
mempertahankan mutual exclusivenya. Bila hal ini terjadi, proses lain tidak akan dapat masuk,
sedangkan proses yang berada di dalam menunggu proses yang lain untuk signal. Dengan kata
lain deadlock terjadi. Jadi, baris 05 perlu dilakukan untuk menghilangkan sifat mutual
exclusive pada saat suatu proses menunggu.
Pada baris 12 hanya menyatakan signal untuk S2 saja. Hal ini bukanlah merupakan
suatu masalah, karena jika signal S2 dipanggil, maka pasti ada proses yang menunggu akan
masuk dan meneruskan ke instruksi 07 kemudian ke instruksi 08 di mana proses ini akan
memanggil signal S1 yang akan mewakili kebutuhan di baris 12.
C. Fungsi Semaphore
Penyelesaian masalah critical section adalah suatu bagian yang berisi sejumlah variabel
yang akan dishare (dipengaruhi dan mempengaruhi ) proses yang lain.
Secara umum, penyelesaian critical section harus memenuhi 3 syarat :
a) Mutual exclusion. Jika suatu proses sedang mengerjakan critical section, maka tidak
boleh ada proses lain yang masuk (mengerjakan) critical section tersebut.
b) Progress. Jika tidak ada suatu proses yang megerjakan critical section, dan ada beberapa
proses yag akan masuk ke critical section, maka hanya proses-proses yang sedang
berada pada entry-section saja yang boleh berkompetisi untuk mengerjakan critical
section.
c) Bounded waiting. Besarnya waktu tunggu dari suatu proses yang akan memasuki
critical section sejak proses itu meminta ijin untuk mengerjakan critical section, hingga
permintaan itu dipenuhi. Untuk setiap proses yang akan masuk critical section harus
meminta ijin terlebih dahulu, dan proses yang mendapat izinlah yang akan masuk ke
critical section. Entry-section adalah daerah tempat proses menunggu untuk memasuki
critical section. Sedangkan Exit-section adalah daerah dimana suatu proses baru saja
keluar dari critical section.
Semafor menyelesaikan masalah sinkronisasi antar proses, kadangkala kita ingin
membuat suatu proses untuk menunggu proses yang lain untuk menjalankan suatu perintah.
Isu yang ada di sini adalah bagaimana caranya suatu proses mengetahui bahwa proses yang
lain telah menyelesaikan instruksi tertentu.
10. Oleh karena itu digunakanlah semafor karena semafor adalah solusi yang cukup baik
dan mudah untuk mengatasi hal tersebut. Nilai semaphore diset menjadi 0 Proses 1 Proses 2
56 print "satu" 17 wait(semaphoreVar) 57 signal(semaphoreVar) 18 print "dua" siapapun yang
berjalan lebih cepat, maka keluarannya pasti "satu" kemudian diikuti oleh "dua".
Hal ini disebabkan karena jika proses 2 berjalan terlebih dahulu, maka proses tersebut
akan menunggu (nilai semafor = 0) sampai proses 1 memanggil signal. Sebaliknya jika proses
1 berjalan terlebih dahulu, maka proses tersebut akan memanggil signal untuk memberikan
jalan terlebih dahulu kepada proses 2.
D. Implementasi Semaphore
a) Windows – Fungsi yg dipakai adalah CreateSemaphore – Biasanya digunakan untuk
membatasi jumlah thread yang memakai suatu resource secara bersamaan
b) Java – Semafor di Java™ bersifat transparan oleh programmer
c) Java™ menyembunyikan Semafor dibalik konsep monitor
d) Reserved Word yang dipakai Java™ adalah synchronized
E. Kelemahan Semaphore
Termasuk Low Level
Kesulitan dalam pemeliharaannya, karena tersebar dalam seluruh program.
Menghapus wait => dapat terjadi nonmutual exclusion.
Menghapus signal => dapat terjadi deadlock
Error yang terjadi sulit untuk dideteksi
Lebih baik menggunakan high level
11. KESIMPULAN
Semaphore adalah mekanisme efektif yang digunakan baik pada sistem uniprosesor
maupun sistem multiprosesor. Semaphore pada dasarnya adalah counter yang diasosiasikan
dengan struktur data.
Semaphore merupakan variable bertipe integer yang diakses oleh 2 operasi atomik
standar, yaitu wait dan signal. Perangkat sinkronisasi yang tidak membutuhkan busy waiting-
Semaphore S – integer variable. Dapat dijamin akses ke var. S oleh dua operasi atomik:
wait (S): while S ≤ 0 do no-op;
S := S – 1;
signal (S): S := S + 1;