Apa itu Semaphore? Menghitung, Tipe Biner dengan Contoh
โก Ringkasan Cerdas
Semaphore Dalam sistem operasi, `while` adalah variabel bilangan bulat non-negatif yang dibagi antara thread yang mengoordinasikan akses ke sumber daya bersama melalui dua operasi atomik, `wait` dan `signal`, mencegah kondisi persaingan (race condition) selama sinkronisasi proses.

Apa itu Semaphore?
Semaphore hanyalah sebuah variabel yang tidak negatif dan dibagi di antara thread. Semaphore adalah mekanisme pensinyalan, dan thread yang menunggu semaphore dapat diberi sinyal oleh thread lain. Ia menggunakan dua operasi atomik, 1) Menunggu, dan 2) Signal untuk sinkronisasi proses.
Semaphore mengizinkan atau melarang akses ke sumber daya, yang bergantung pada cara pengaturannya.
Karakter dari Semaphore
Berikut adalah karakteristik dari sebuah semafor:
- Ini adalah mekanisme yang dapat digunakan untuk menyediakan sinkronisasi tugas.
- Ini adalah mekanisme sinkronisasi tingkat rendah.
- Semaphore akan selalu memiliki nilai integer non-negatif.
- Semaphore dapat diimplementasikan menggunakan operasi pengujian dan interupsi, yang harus dieksekusi menggunakan deskriptor file.
Jenis dari Semaphores
Dua jenis semafor yang umum adalah:
- Menghitung semaphore
- Semafor biner
Perhitungan Semaphores
Jenis Semaphore menggunakan penghitung yang membantu suatu tugas untuk diperoleh atau dilepaskan beberapa kali. Jika hitungan awal = 0, semaphore penghitung harus dibuat dalam keadaan tidak tersedia.
Namun, jika hitungannya > 0, semaphore dibuat dalam keadaan tersedia, dan jumlah token yang dimilikinya sama dengan hitungannya.
Biner Semaphores
Semaphore biner cukup mirip dengan semaphore penghitung, tetapi nilainya dibatasi antara 0 dan 1. Pada jenis semaphore ini, operasi tunggu hanya berfungsi jika semaphore = 1, dan operasi sinyal berhasil ketika semaphore = 0. Implementasinya lebih mudah daripada semaphore penghitung.
Contoh Semaphore
Program di bawah ini adalah implementasi langkah demi langkah, yang melibatkan penggunaan dan deklarasi semaphore.
Shared var mutex: semaphore = 1;
Process i
begin
.
.
P(mutex);
execute CS;
V(mutex);
.
.
End;
Tunggu dan Signal Operation di Semaphores
Kedua operasi ini digunakan untuk mengimplementasikan sinkronisasi proses. Tujuan dari operasi semaphore ini adalah untuk mendapatkan saling pengecualian.
Tunggu sebentar Operaproduksi
Jenis operasi semafor ini membantu Anda mengontrol masuknya tugas ke bagian kritis. Namun, jika nilai wait positif, maka nilai argumen wait X akan dikurangi. Jika nilainya negatif atau nol, tidak ada operasi yang dijalankan. Ini juga disebut operasi P(S).
Setelah nilai semaphore diturunkan menjadi negatif, perintah ditahan hingga kondisi yang diperlukan terpenuhi.
P(S)
{
while (S<=0);
S--;
}
Signal operasi
Jenis Semaphore Operasi ini digunakan untuk mengontrol keluarnya tugas dari bagian kritis. Operasi ini membantu meningkatkan nilai argumen sebesar 1, yang dilambangkan sebagai V(S).
P(S)
{
while (S>=0);
S++;
}
Perhitungan Semaphore vs. Biner Semaphore
Berikut adalah beberapa perbedaan utama antara penghitungan dan semafor biner:
| Perhitungan Semaphore | Biner Semaphore |
| Tidak ada saling pengecualian | Saling mengecualikan |
| Nilai bilangan bulat apa pun | Nilainya hanya 0 dan 1 |
| Lebih dari satu slot | Hanya satu slot |
| Menyediakan serangkaian Proses | Ini memiliki mekanisme saling pengecualian. |
Perbedaan antara Semaphore vs.Mutex
Tabel di bawah ini membandingkan semafor dengan mutex berdasarkan beberapa parameter:
| Parameter Teknis | Semaphore | mutex |
| Mekanisme | Ini adalah jenis mekanisme pensinyalan. | Ini adalah mekanisme penguncian. |
| Data Type | Semaphore adalah variabel bilangan bulat. | Mutex hanyalah sebuah objek. |
| Modifikasi | Operasi tunggu dan sinyal dapat memodifikasi semaphore. | Itu dimodifikasi hanya oleh proses yang mungkin meminta atau melepaskan sumber daya. |
| Pengelolaan sumber daya | Jika tidak ada sumber daya yang bebas, maka proses tersebut memerlukan sumber daya yang harus menjalankan operasi tunggu. Proses tersebut harus menunggu hingga jumlah semaphore lebih besar dari 0. | Jika terkunci, prosesnya harus menunggu. Prosesnya harus disimpan dalam antrian. Ini perlu diakses hanya ketika mutex tidak terkunci. |
| Benang | Anda dapat memiliki beberapa rangkaian program. | Anda dapat memiliki beberapa untaian program dalam mutex tetapi tidak secara bersamaan. |
| Kepemilikan | Nilai dapat diubah dengan proses apa pun yang melepaskan atau memperoleh sumber daya. | Kunci objek dilepaskan hanya oleh proses yang telah memperoleh kunci tersebut. |
| jenis | Jenis dari Semaphore menghitung semaphore dan semaphore biner. | Mutex tidak memiliki subtipe. |
| Operaproduksi | Semaphore nilai dimodifikasi menggunakan operasi wait() dan signal() | Objek mutex terkunci atau tidak terkunci. |
| Hunian Sumber Daya | Dikatakan terisi apabila semua sumber daya sedang digunakan dan proses yang meminta sumber daya melakukan operasi wait() dan memblokir dirinya sendiri hingga jumlah semaphore menjadi >1. | Jika objek sudah dikunci, proses yang meminta sumber daya menunggu dan dimasukkan ke dalam antrean oleh sistem sebelum kunci dilepaskan. |
Keuntungan Semaphores
Inilah kelebihan/manfaat penggunaan Semaphore:
- Hal ini memungkinkan lebih dari satu thread untuk mengakses bagian kritis.
- Semaphores tidak bergantung pada mesin.
- Semaphores diimplementasikan dalam kode mikrokernel yang tidak bergantung pada mesin.
- Mereka tidak mengizinkan banyak proses memasuki bagian kritis.
- Karena ada kesibukan menunggu di semaphore, tidak pernah ada pemborosan waktu dan sumber daya proses.
- Mereka tidak bergantung pada mesin, yang harus dijalankan dalam kode mikrokernel yang tidak bergantung pada mesin.
- Mereka memungkinkan pengelolaan sumber daya yang fleksibel.
Kekurangan dari Semaphores
Berikut ini adalah kekurangan/kelemahan dari semafor:
- Salah satu batasan terbesar semaphore adalah inversi prioritas.
- Sistem operasi harus tetap track dari semua panggilan untuk menunggu dan memberi sinyal pada semaphore.
- Penggunaannya tidak pernah dipaksakan, namun hanya berdasarkan konvensi.
- Untuk menghindari kebuntuan di semaphore, Tunggu dan Signal Operasi harus dijalankan dalam urutan yang benar.
- Semaphore Pemrograman itu rumit, jadi ada kemungkinan tidak tercapainya eksklusi bersama.
- Ini juga bukan metode praktis untuk penggunaan skala besar karena penggunaannya menyebabkan hilangnya modularitas.
- Semaphore lebih rentan terhadap kesalahan programmer.
- Ini dapat menyebabkan jalan buntu atau pelanggaran saling pengecualian karena kesalahan programmer.


