Sistem Operasi Semaphore

BAB I
PENDAHULUAN
A. Latar Belakang
Teknologi berkembang dengan pesat sesuai dengan kebutuhan zaman. Komputer
merupakan hasil dari teknologi yang mengalami perkembangan begitu pesat karena
hampir setiap orang menggunakan komputer sebagai alat bantu dalam menyelesaikan
segala urusan dalam kehidupannya. Seiring dengan berkembangnya komputer berkembanglah sebuah program yang bernama semaphore.
Semaphore itu sendiri adalah program yang dibangun oleh E. W. Dijkstra pada akhir tahun 1960 seorang ilmuwan dari Rotterdam, Belanda . Dalam format paling sederhana semaphore adalah lokasi di dalam memori yang nilainya dapat diuji dan di set oleh lebih dari satu proses. Tes dan operasi yang dapat diset adalah, selama masing-masing proses tekait, atomik atau uninterrupable; sekali dijalankan tidak dapat dihentikan. Hasil dari operasi tes dan set operasi merupakan penambahan nilai semaphore dan set nilai, yang dapat bernilai positif maupun negatif. Hasil test dan set operasi sebuah proses akan berhenti sampai nilai semaphore diubah oleh proses yang lain. Semaphore biasanya digunakan untuk memonitor dan mengontrol ketersediaan sumberdaya sistem, seperti pembagian segmen memori.











BAB II
PEMBAHASAN

A. Pengertian Semaphore
Semaphore adalah mekanisme efektif yang digunakan baik pada sistem uniprosesor
maupun sistem multiprosesor. Semaphore pada dasarnya adalah counter yang
diasosiasikan dengan struktur data. Semaphore diperiksa oleh semua kernel thread
sebelum kernel thread tersebut mencoba untuk mengakses struktur data. Setiap
semaphore dapat dipandang sebagai objek yang terdiri atas Variable integer List proses yang sedang menunggu (waiting) Dua metode atomik : down() atau up()
Metode down() mengurangi nilai dari semaphore. Jika nilai yang baru kurang dari 0,
metode ini menambahkan proses yang sedang berjalan ke list semaphore dan mem-
block proses tersebut. Metode up() menambah nilai dari semaphore dan jika nilai
barunya sama dengan atau lebih dari 0, mengaktivasi kembali proses dalam
semaphore list.
Tiap stuktur data yang diproteksi memiliki semaphorenya masing-masing yang
diinisiasi dari 1. Ketika sebuah kernel control path akan mengakses struktrur data
tersebut, control path mengeksekusi metode down() pada semaphore bersangkutan.
Jika nilai baru semaphore tidak negatif, akses ke data dapat dilakukan. Sebaliknya
jika nilai baru negatif, proses yang mengeksekusi kernel control path ditambahkan ke
dalam list semaphore dan di-block. Ketika proses lain mengeksekusi metode up()
pada semaphore tersebut, salah satu dari proses dalam list diperbolehkan untuk
dilanjutkan.
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;
Misalkan ada 2 proses yang sedang berjalan secara konkure, yaitu P1 denga 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.
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:
1. Binary semaphore
2. 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.
Solusi Pembuatan Counting Semaphore dari Binary Semaphore.
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 waitC dapat dilihat di bawah ini:
02 wait (S1);
03 C--;
04 if ( C < 0 ) { 05 signal (S1); 06 wait (S2); 07 } 08 signal (S1); subrutin signalC 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. zPerhatikan 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? 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 a. Menyelesaikan Masalah Critical Section. 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 : 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 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. 3. 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. Gambar dibawah ini menunjukkan struktur untuk proses Pi. 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.\ b. 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. 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 1. Windows – Fungsi yg dipakai adalah CreateSemaphore – Biasanya digunakan untuk membatasi jumlah thread yang memakai suatu resource secara bersamaan 2. Java – Semafor di Java™ bersifat transparan oleh programmer 3. Java™ menyembunyikan Semafor dibalik konsep monitor 4. 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 construct

























BAB III
PENUTUP

A. Kesimpulan
1. Semaphore adalah mekanisme efektif yang digunakan baik pada sistem uniprosesor
maupun sistem multiprosesor. Semaphore pada dasarnya adalah counter yang
diasosiasikan dengan struktur data.
2. Semaphore merupakan variable bertipe integer yang diakses oleh 2 operasi atomik standar,
yaitu wait dan signal.
3. 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;

3 komentar:

Unknown mengatakan...

thanks gan lanjutkan :)
kunjungi

Kurniawanto mengatakan...

mantap bung
My blog

adminimalis mengatakan...

makasih bahannya bang

Posting Komentar

 
Powered by Blogger