Apa itu Semaphore?
Semaphore hanyalah variabel yang non-negatif dan dibagikan di antara utas. Semafor adalah mekanisme pensinyalan, dan utas yang menunggu di semafor dapat ditandai oleh utas lain. Ini menggunakan dua operasi atom, 1) menunggu, dan 2) sinyal untuk sinkronisasi proses.
Semaphore mengizinkan atau tidak mengizinkan akses ke resource, yang bergantung pada cara penyiapannya.
Dalam tutorial ini, Anda akan mempelajari:
- Apa Mutex?
- Penggunaan Semaphore
- Penggunaan Mutex
- Perbedaan antara Semaphore vs. Mutex
- Kesalahpahaman Umum tentang Mutex dan Semaphore
- Keuntungan Semaphore
- Keuntungan Mutex
- Kerugian dari Semaphores
- Kekurangan Mutex
Apa Mutex?
Bentuk lengkap Mutex adalah Mutual Exclusion Object. Ini adalah jenis semaphore biner khusus yang digunakan untuk mengontrol akses ke sumber daya bersama. Ini mencakup mekanisme pewarisan prioritas untuk menghindari masalah inversi prioritas yang diperpanjang. Ini memungkinkan tugas-tugas dengan prioritas lebih tinggi saat ini disimpan dalam keadaan diblokir untuk waktu sesingkat mungkin. Namun, pewarisan prioritas tidak memperbaiki pembalikan prioritas tetapi hanya meminimalkan efeknya.
PERBEDAAN UTAMA
- Mutex adalah mekanisme penguncian sedangkan Semaphore adalah mekanisme pensinyalan
- Mutex hanyalah sebuah objek sedangkan Semaphore adalah integer
- Mutex tidak memiliki subtipe sedangkan Semaphore memiliki dua jenis, yaitu menghitung semaphore dan binary semaphore.
- Semaphore mendukung modifikasi operasi menunggu dan sinyal, sedangkan Mutex hanya dimodifikasi oleh proses yang dapat meminta atau melepaskan sumber daya.
- Nilai semaphore dimodifikasi menggunakan operasi wait () dan signal (), di sisi lain, operasi Mutex dikunci atau dibuka kuncinya.
Penggunaan Semaphore
Dalam kasus buffer tunggal, kita dapat memisahkan buffer 4 KB menjadi empat buffer 1 KB. Semaphore dapat dikaitkan dengan empat buffer ini. Hal ini memungkinkan pengguna dan produsen untuk mengerjakan buffer yang berbeda pada waktu yang bersamaan.
Penggunaan Mutex
Mutex memberikan pengecualian timbal balik, yang dapat berupa produsen atau konsumen yang dapat memiliki kunci (mutex) dan melanjutkan pekerjaan mereka. Selama produsen mengisi buffer, pengguna harus menunggu, dan sebaliknya. Di kunci Mutex, sepanjang waktu, hanya satu utas yang dapat bekerja dengan seluruh buffer.
Perbedaan antara Semaphore vs. Mutex
Parameter | Tiang sinyal | Mutex |
---|---|---|
Mekanisme | Ini adalah jenis mekanisme pensinyalan. | Ini adalah mekanisme penguncian. |
Tipe data | Semaphore adalah variabel integer. | Mutex hanyalah sebuah objek. |
Modifikasi | Operasi menunggu dan sinyal dapat mengubah semaphore. | Itu diubah hanya oleh proses yang mungkin meminta atau melepaskan sumber daya. |
Pengelolaan sumber daya | Jika tidak ada sumber daya yang gratis, maka proses tersebut memerlukan sumber daya yang harus menjalankan operasi tunggu. Ini harus menunggu sampai hitungan semafor lebih besar dari 0. | Jika terkunci, prosesnya harus menunggu. Prosesnya harus disimpan dalam antrian. Ini perlu diakses hanya ketika mutex dibuka kuncinya. |
Benang | Anda dapat memiliki beberapa utas program. | Anda dapat memiliki beberapa utas program di mutex tetapi tidak secara bersamaan. |
Kepemilikan | Nilai dapat diubah dengan proses apa pun yang melepaskan atau mendapatkan sumber daya. | Kunci objek dilepaskan hanya dengan proses, yang telah mendapatkan kunci di atasnya. |
Jenis | Jenis Semaphore menghitung semaphore dan binary semaphore. | Mutex tidak memiliki subtipe. |
Operasi | Nilai semaphore dimodifikasi menggunakan operasi wait () dan signal (). | Objek Mutex dikunci atau dibuka kuncinya. |
Hunian Sumber Daya | Ini ditempati jika 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 terkunci, proses yang meminta sumber daya menunggu dan dimasukkan ke dalam antrian oleh sistem sebelum kunci dilepaskan. |
Fakta Umum tentang Mutex dan Semaphore
Berikut, beberapa fakta umum tentang Mutex dan Semaphore:
- Hanya satu tugas yang dapat memperoleh mutex. Jadi, ada kepemilikan yang terkait dengan mutex, dan hanya pemilik yang dapat melepaskan mutex tersebut.
- Alasan menggunakan mutex dan semaphore berbeda mungkin karena kesamaan dalam implementasinya, mutex akan disebut sebagai binary semaphore.
- Salah satu kesalahpahaman yang terkenal adalah bahwa Mutex dan Semaphores hampir sama, dengan satu-satunya perbedaan adalah bahwa Mutex mampu menghitung hingga 1, sedangkan Semaphores mampu menghitung dari 0 hingga N.
- Selalu ada ketidakpastian antara biner semaphore dan mutex. Anda mungkin mendengar bahwa mutex adalah semaphore biner, yang sebenarnya salah.
Keuntungan Semaphore
Berikut, kelebihan / manfaat menggunakan Semaphore:
- Ini memungkinkan lebih dari satu utas mengakses bagian kritis
- Semaphore tidak bergantung pada mesin.
- Semaphore diimplementasikan dalam kode mikrokernel yang tidak bergantung mesin.
- Mereka tidak mengizinkan banyak proses untuk memasuki bagian kritis.
- Karena ada kesibukan menunggu di semaphore, tidak pernah ada pemborosan waktu dan sumber daya proses.
- Mereka tidak tergantung mesin, yang harus dijalankan dalam kode mikrokernel yang tidak tergantung mesin.
- Mereka memungkinkan pengelolaan sumber daya yang fleksibel.
Keuntungan Mutex
Di sini, adalah pro / manfaat penting dari Mutex
- Mutex hanyalah kunci sederhana yang diperoleh sebelum memasuki bagian kritisnya dan kemudian melepaskannya.
- Karena hanya satu utas yang berada di bagian kritisnya pada waktu tertentu, tidak ada ketentuan balapan, dan datanya selalu konsisten.
Kerugian dari Semaphores
Di sini, adalah kekurangan / kekurangan dari semaphore
- Salah satu batasan terbesar dari semaphore adalah inversi prioritas.
- Sistem operasi harus melacak semua panggilan untuk menunggu dan memberi sinyal semaphore.
- Penggunaannya tidak pernah dipaksakan, tetapi hanya berdasarkan konvensi.
- Untuk menghindari kebuntuan di semaphore, operasi Tunggu dan Sinyal perlu dijalankan dalam urutan yang benar.
- Pemrograman semaphore adalah metode yang kompleks, jadi ada kemungkinan tidak mencapai pengecualian timbal balik.
- Ini juga bukan metode praktis untuk penggunaan skala besar karena penggunaannya menyebabkan hilangnya modularitas.
- Semaphore lebih rentan terhadap kesalahan programmer.
- Ini dapat menyebabkan kebuntuan atau pelanggaran pengecualian timbal balik karena kesalahan programmer.
Kekurangan Mutex
Inilah kekurangan / kekurangan dari Mutex
- Jika utas mendapatkan kunci dan beralih ke mode tidur atau didahului, utas lainnya mungkin tidak dapat bergerak maju. Ini bisa menyebabkan kelaparan.
- Itu tidak dapat dikunci atau dibuka kuncinya dari konteks yang berbeda dari yang diperolehnya.
- Hanya satu utas yang diizinkan di bagian kritis dalam satu waktu.
- Implementasi normal dapat menyebabkan status tunggu sibuk, yang menghabiskan waktu CPU.