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 Sistem Operasi (OS) ini, Anda akan mempelajari:
- Karakteristik Semaphore
- Apa itu Semaphore?
- Jenis Semaphores
- Contoh Semaphore
- Operasi Tunggu dan Sinyal di Semaphores
- Menghitung Semaphore vs. Binary Semaphore
- Perbedaan antara Semaphore vs. Mutex
- Keuntungan dari Semaphores
- Kerugian dari semaphores
Karakteristik Semaphore
Berikut ciri-ciri dari sebuah 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 uji dan interupsi, yang harus dijalankan menggunakan deskriptor file.
Jenis Semaphores
Dua jenis semaphore yang umum adalah
- Menghitung semaphore
- Semaphore biner.
Menghitung Semaphores
Jenis Semaphore ini menggunakan hitungan yang membantu tugas diperoleh atau dirilis berkali-kali. Jika hitungan awal = 0, semafor penghitungan harus dibuat dalam keadaan tidak tersedia.
Namun, jika hitungannya> 0, semaphore dibuat dalam keadaan tersedia, dan jumlah token yang dimilikinya sama dengan hitungannya.
Semaphores Biner
Semaphore biner sangat mirip dengan penghitungan semaphore, tetapi nilainya dibatasi ke 0 dan 1. Dalam jenis semaphore ini, operasi menunggu hanya berfungsi jika semaphore = 1, dan operasi sinyal berhasil ketika semaphore = 0. Sangat mudah untuk menerapkan daripada menghitung 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 ibegin… P(mutex);execute CS;V(mutex);… End;
Operasi Tunggu dan Sinyal di Semaphores
Kedua operasi ini digunakan untuk mengimplementasikan sinkronisasi proses. Tujuan dari operasi semaphore ini adalah untuk mendapatkan pengecualian timbal balik.
Tunggu Operasi
Jenis operasi semaphore membantu Anda mengontrol masuknya tugas ke bagian kritis. Namun, jika nilai menunggu positif, maka nilai argumen tunggu X dikurangi. Dalam kasus nilai negatif atau nol, tidak ada operasi yang dijalankan. Ini juga disebut operasi P (S).
Setelah nilai semaphore berkurang, yang menjadi negatif, perintah akan ditahan hingga kondisi yang diperlukan terpenuhi.
Copy CodeP(S){while (S<=0);S--;}
Operasi sinyal
Jenis operasi Semaphore digunakan untuk mengontrol keluarnya tugas dari bagian kritis. Ini membantu untuk meningkatkan nilai argumen dengan 1, yang dilambangkan sebagai V (S).
Copy CodeP(S){while (S>=0);S++;}
Menghitung Semaphore vs. Binary Semaphore
Berikut adalah beberapa perbedaan utama antara penghitungan dan semafor biner:
Menghitung Semaphore | Binary Semaphore |
Tidak ada pengecualian timbal balik | Pengecualian satu sama lain |
Nilai bilangan bulat apa pun | Nilai hanya 0 dan 1 |
Lebih dari satu slot | Hanya satu slot |
Sediakan satu set Proses | Ini memiliki mekanisme pengecualian timbal balik. |
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 dan | 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. |
Keuntungan dari Semaphores
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.
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 itu rumit, 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.
Ringkasan:
- Semaphore didefinisikan sebagai variabel yang non-negatif dan dibagi di antara utas.
- Ini adalah mekanisme yang dapat digunakan untuk menyediakan sinkronisasi tugas.
- Menghitung semaphore menggunakan hitungan yang membantu tugas diperoleh atau dilepaskan berkali-kali.
- Semaphore biner sangat mirip dengan penghitungan semaphore, tetapi nilainya dibatasi ke 0 dan 1.
- Operasi tunggu membantu Anda mengontrol masuknya tugas ke bagian kritis
- Operasi sinyal semaphore digunakan untuk mengontrol keluarnya tugas dari bagian kritis
- Menghitung Semaphore tidak memiliki pengecualian timbal balik sedangkan Binary Semaphore memiliki pengecualian Bersama
- Semaphore berarti mekanisme pensinyalan sedangkan Mutex adalah mekanisme penguncian
- Semaphore memungkinkan lebih dari satu utas mengakses bagian kritis
- Salah satu batasan terbesar dari semaphore adalah inversi prioritas.