Apa itu Semaphore? Menghitung, Tipe Biner dengan Contoh

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.

Ciri-ciri dari Semaphore

Berikut ciri-ciri semaphore:

  • 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 semaphore yang umum adalah

  • Menghitung semaphore
  • Semafor biner.

Perhitungan Semaphores

Jenis Semaphore menggunakan hitungan yang membantu tugas untuk diperoleh atau dilepaskan berkali-kali. Jika hitungan awal = 0, semaphore penghitungan harus dibuat dalam status tidak tersedia.

Perhitungan Semaphores
Perhitungan Semaphores

Namun, jika hitungannya > 0, semaphore dibuat dalam keadaan tersedia, dan jumlah token yang dimilikinya sama dengan hitungannya.

Biner Semaphores

Semafor biner sangat mirip dengan menghitung semafor, namun nilainya dibatasi pada 0 dan 1. Dalam jenis semafor ini, operasi tunggu hanya berfungsi jika semafor = 1, dan operasi sinyal berhasil bila semafor = 0. Sangat mudah untuk mengimplementasikan daripada menghitung semaphore.

Biner Semaphores

Biner Semaphores

Contoh Semaphore

Program yang diberikan 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.

Copy CodeP(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).

Copy CodeP(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

Parameters 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 dan 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:

  • 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.

Kerugian dari semaphore

Inilah kekurangan/kekurangan semaphore

  • Salah satu batasan terbesar semaphore adalah inversi prioritas.
  • Sistem operasi harus melacak semua panggilan untuk menunggu dan memberi sinyal 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 mencapai saling pengecualian.
  • 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.

Ringkasan

  • Semaphore didefinisikan sebagai variabel yang non-negatif dan dibagi antar thread.
  • Ini adalah mekanisme yang dapat digunakan untuk menyediakan sinkronisasi tugas.
  • Menghitung semaphore menggunakan penghitungan yang membantu tugas diperoleh atau dilepaskan berkali-kali.
  • Semafor biner sangat mirip dengan semafor penghitungan, namun nilainya dibatasi pada 0 dan 1.
  • Operasi tunggu membantu Anda mengontrol masuknya tugas ke bagian kritis
  • Signal operasi semaphore digunakan untuk mengontrol keluarnya tugas dari bagian kritis
  • Perhitungan Semaphore tidak memiliki saling pengecualian sedangkan Biner Semaphore memiliki Saling Pengecualian
  • Semaphore berarti mekanisme pensinyalan sedangkan Mutex adalah mekanisme penguncian
  • Semaphore memungkinkan lebih dari satu thread untuk mengakses bagian kritis
  • Salah satu batasan terbesar semaphore adalah inversi prioritas.

Buletin Harian Guru99

Awali hari Anda dengan berita AI terbaru dan terpenting yang disampaikan saat ini.