Apa perbedaan mendasar antara penguncian putaran dan semafor dalam aksi?
Apa perbedaan mendasar antara penguncian putaran dan semafor dalam aksi?
Jawaban:
Keduanya mengelola sumber daya yang terbatas. Pertama saya akan menjelaskan perbedaan antara binary semaphore (mutex) dan spin lock.
Putar kunci menjalankan menunggu sibuk - yaitu itu terus berjalan:
while (try_acquire_resource ());
...
release();
Ini melakukan penguncian / penguncian yang sangat ringan tetapi jika utas penguncian akan didahului oleh yang lain yang akan mencoba untuk mengakses sumber daya yang sama, yang kedua hanya akan mencoba untuk mengambil sumber daya sampai kehabisan CPU kuanta.
Di sisi lain, perilaku mutex lebih seperti:
if (!try_lock()) {
add_to_waiting_queue ();
wait();
}
...
process *p = get_next_process_from_waiting_queue ();
p->wakeUp ();
Karenanya, jika utas akan mencoba memperoleh sumber daya yang diblokir, ia akan ditangguhkan hingga tersedia. Mengunci / membuka kunci jauh lebih berat tetapi penantiannya 'gratis' dan 'adil'.
Semaphore adalah kunci yang diizinkan untuk digunakan berkali-kali (diketahui dari inisialisasi) beberapa kali - misalnya 3 utas diizinkan untuk secara bersamaan memegang sumber daya tetapi tidak lebih. Ini digunakan misalnya dalam masalah produsen / konsumen atau secara umum dalam antrian:
P(resources_sem)
resource = resources.pop()
...
resources.push(resources)
V(resources_sem)
Spinlocks digunakan dalam konteks interupsi, di mana tidur tidak diperbolehkan. Mereka melakukan jajak pendapat dalam lingkaran yang ketat, tidak melakukan apa-apa lagi sampai sumber daya diperoleh. Paling banyak digunakan dalam ISR, dan lebih aman dan efisien.
Semafor dapat digunakan dalam konteks proses, di mana tidur ok.
Inilah jawaban cepat saya pada jawaban: kunci pengunci dan semaphore biner (yang mengelola sumber daya yang hanya dapat digunakan oleh satu hal) hampir identik. Perbedaan mereka adalah bahwa kunci kunci mengelola kode yang akan dijalankan sementara semaphore biner mengelola beberapa jenis sumber daya tunggal (misalnya waktu cpu, menampilkan output)
Semafor biasa, namun mampu mengelola beberapa utas mengakses sumber daya yang dapat dibagi di antara beberapa, tetapi terbatas (misalnya memori, bandwidth jaringan)
Singkatnya, spin-lock kemungkinan akan terus menanyakan semafor jika dapat menggunakan sumber daya. (Bayangkan seorang anak harus menggunakan kamar mandi dan menunggu orang lain selesai.)
Sumber: Pengantar Pemrograman Sistem, Sistem Operasi, dan wikipedia