• Fungsi Semaphore
Seperti telah disebutkan sebelumnya, semaphore berfungsi untuk menangani masalah
sinkronisasi secara umum, yaitu:
1. Mutual Exclusion. Sesuai dengan prinsip mutual exclusion, jika suatu thread
sedang berada dalam critical section-nya, thread lain harus menunggu thread
tersebut keluar dari critical section-nya sebelum dapat memasuki critical section-
nya sendiri. Di sinilah semaphore digunakan, thread yang akan memasuki critical
section-nya akan memanggil fungsi kunci terlebih dahulu. Jika tidak ada thread
lain yang sedang berada dalam critical section, thread ini akan memasuki critical
section-nya. Jika terdapat thread lain yang sedang berada dalam critical section-
nya, thread ini harus menunggu.Setelah thread keluar dari critical section-nya,
thread tersebut akan memanggil fungsi buka sehingga sem_value akan naik
menjadi lebih dari 0, dan satu (dari beberapa) thread yang sedang menunggu
akan mendapatkan giliran untuk memasuki critical section-nya.
2. Resource Controller. Bayangkan sebuah restoran yang setiap
malamnya ramai dikunjungi pelanggan. Kapasitas restoran terbatas,
tetapi pemilik restoran memiliki kebijakan bahwa semua pengunjung
yang datang akan mendapatkan kesempatan untuk makan, dengan
konsekuensi yaitu pelanggan harus sabar menunggu gilirannya. Oleh
karena itu, dikerahkanlah pegawai restoran untuk menahan tamu di
luar jika restoran penuh lalu mempersilahkan tamu masuk jika tempat
telah tersedia.Dari analogi di atas, pelanggan adalah thread, kapasitas
restoran adalah resource, dan pegawai restoran adalah semaphore.
Semaphore menyimpan banyaknya resource yang tersedia. Saat thread
ingin memakai resource ia akan memanggil fungsi kunci. Jika resource
masih tersedia, thread bisa langsung menggunakannya, sebaliknya jika
semua resource sedang dipakai, thread tersebut harus menunggu.
Setelah resource selesai dipakai thread akan memanggil fungsi buka
sehingga resource yang bebas bertambah.
3. Sinkronisasi Antar-Proses. Ada kalanya suatu thread memerlukan
resource yang dihasilkan oleh thread lainnya. Oleh karena itu
dibutuhkan suatu mekanisme untuk mengatur urutan eksekusi thread.
Mekanisme ini dilakukan dengan memanfaatkan semaphore.
• Keuntungan menggunakan semaphore:
1. Dari segi programming, penanganan masalah
sinkronisasi dengan semaphore umumnya rapi dan
teratur, sehingga mudah untuk dibuktikan
kebenarannya.
2. Semaphore diimplementasikan dalam hard code
sehingga penggunaannya bersifat portabel.
• Beberapa skenario dapat terjadi bila mutual exclusion tidak terjamin yaitu :
1) Program aplikasi Bandung menulis ke rekening A secara cepat sehingga dihasilkan saldo
Rp6.000.000,_ Setelah itu , program aplikasi kantor cabang jakarta menimpa hsil itu dengan saldo
Rp4.000.000,- hasil akhir yang diperoleh adalah Rp4.000.000,- bukan Rp10.000.000,- (yang
seharusnya).
2) Program aplikasi Jakarta dilakukan menulis rekening A secara cepat sehingga dihasilkan
saldo Rp4.000.000,- Setelah itu program aplikasi di kantor Bandung menimpa hasil itu dengan
saldo Rp6.000.000,- hasil yang lebih baik dibandingkan skenario pertama tetapi masih di bawah
yang seharusnya yaitu Rp10.000.000,-
• Kriteria Penyelesaian mutual exclusion
Kemampuan menjamin mutual exclusion harus memeuhi kriteria-
kriteria berikut :
1. Mutual exclusion harus dijamin.
2. Hanya satu proses pada satu saat yang diizinkan masuk critical
section. Proses-proses lain dilarang masuk critical section yang
sama pada saat telah ada proses yang masuk critical section itu.
3. Proses yang berada di noncritical section , dilarang memblock
proses-proses lain yang ingin masuk critical section.
4. Harus dijamin proses yang ingin masuk critical section tidak
menunggu selama waktu yang tidak terhingga . Atau tak boleh
terdapat deadlock atau starvation .
5. Ketika tidak ada proses di critical section maka proses yang ingin
masuk critical section harus diizinkan segera masuk tanpa waktu
tunda.
6. Tidak ada asumsi mengenai kecepatan relatif proses atau jumlah
proses yang ada.
• Bagian program yang sedang mengakses memori atau
sumberdaya yang dipakai bersama disebut critical section /
region. Kesuksesan proses-proses kongkuren memerlukan
pendefinisian critical section dan memaksakan mutual
exclusion diantara proses-proses kongkuren yang sedang
berjalan. Pemaksaan mutual exclusion merupakan landasan
pemrosesan kongkuren, namun pemaksaan mutual
exclusion dapat menimbulkan 2 masalah yaitu :
1. Deadlock
Adalah banyak proses yang saling menunggu hasil dari proses
yang lain untuk dapat melanjutkan atau menyelesaikan
tugasnya.
2. Startvation
Adalah suatu proses akan menunggu suatu kejadian atau hasil
suatu proses lain supaya dapat menyelesaikan tugasnya,
tetapi kejadian yang ditunggu tidak pernah terjadi karena
selalu diambil lebih dulu oleh proses yang lain.
• Pengertian DeadLock
Deadlock secara harfiah adalah kebuntuan. Sedangkan dalam sistem
operasi berarti suatu kondisi di mana sekumpulan proses tidak dapat berjalan kembali
atau tidak adanya komunikasi antar proses. Definisi lainnya yaitu sekumpulan proses
yang terblok yang tiap proses tersebut memegang sumber daya dan menunggu untuk
mendapatkan sumber daya yang dipegang oleh proses di dalam kumpulan tersebut.
Penyebab utama terjadinya deadlock adalah terbatasnya sumber daya yang
akan digunakan oleh proses-proses. Tiap proses berkompetisi untuk memperebutkan
sumber daya yang ada. Jadi deadlock berhubungan erat dengan tersedianya sumber
daya dari komputer.
• Pengertian Startvation
Perkembangan sistem komputer mendatang adalah menuju ke sistem multi-
processing, multiprogramming, terdistribusi dan paralel yang mengharuskan adanya
proses-proses yang berjalan bersama dalam waktu yang bersamaan. Hal demikian
merupakan masalah yang perlu perhatian dari perancang sistem operasi. Kondisi
dimana pada saat yang bersamaan terdapat lebih dari satu proses disebut dengan
kongkurensi (proses-proses yang kongkuren). Dan dalam kongruensi ini pasti ada
masalah yang salah satunya adalah STARVATION. Starvation adalah kondisi yang
biasanya terjadi setelah deadlock. Proses yang kekurangan resource (karena terjadi
deadlock) tidak akan pernah mendapat resource yang dibutuhkan sehingga mengalami
starvation (kelaparan).