Apakah 2-proses algoritma pengecualian mutual Peterson bertanggung jawab atas proses sekarat?


9

Saya pikir dalam algoritma Peterson untuk saling pengecualian , jika proses pertama yang memasuki bagian kritis adalah mati atau dibatalkan, proses lain akan berulang selamanya, menunggu untuk memasuki bagian kritis.

Dalam gambar, jika proses 1 dihentikan, sisa proses di belakang proses 1 akan dieksekusi hingga di mana proses 1 adalah tetapi kemudian loop.

masukkan deskripsi gambar di sini

Apa yang terjadi jika proses yang mencapai bagian kritis lebih dulu mati sebelum meninggalkannya?


Saya mengedit pertanyaan Anda sesuai dengan itu. Karena Anda tidak berkomentar tentang cara memperluas algoritma ke lebih dari dua proses, saya mengubah bagian pertanyaan itu; Saya pikir masalahnya sudah ada dalam versi dua proses. Saya masih tidak mengerti gambarnya sama sekali.
Raphael

Jawaban:


1

Ini tergantung pada bagaimana kunci diterapkan. Jika Anda melakukannya seperti pada artikel Wikipedia, yaitu menjaga bagian penting dengan satu boolean per proses¹, Anda tentu dalam masalah. Jika satu proses mati, ia tidak pernah mengatur ulang benderanya sehingga proses lainnya berulang selamanya.

Dalam praktiknya, Anda dapat melindungi kode Anda dari banyak cara kematian. Misalnya, ambil implementasi gaya Java ini:

flag[1] = true;
turn = 1;
while ( flag[0] == true && turn == 1 ) { Thread.yield(); }
try {
  // critical section
}
finally {
  flag[1] = false;
}

Ini akan memastikan bendera disetel ulang apa pun yang terjadi di bagian kritis, selama sistem menangani kesalahan. Di Jawa, itu benar bahkan untuk stack dan heap overflow. Jadi, kecuali proses itu benar-benar hilang ( kill², kegagalan prosesor, putuskan jaringan, ...) Anda aman. Perhatikan bahwa sebagian besar perangkat lunak tidak penting gagal dalam kasus ini - bagaimana bisa menangani kesalahan itu tidak berjalan? - sehingga harus diterima dalam banyak kasus. Anda dapat menangani ketidakkonsistenan saat memulai ulang jika perlu.

Jika Anda menggunakan kunci tingkat bahasa yang tepat, sistem runtime dapat menangani menghilangnya pemilik kunci, yaitu melepaskan kunci dengan pemilik yang mati. Anda dapat mensimulasikan ini sendiri dengan memberikan setiap proses pergantian orang mati yang dapat dibaca orang lain, atau memeriksa secara langsung apakah proses kepemilikan kunci masih hidup (jika sistem mendukungnya).


  1. Lagipula itu tidak baik skala.
  2. Di Jawa, saya pikir finalizeharus mengeksekusi bahkan kill, tapi ini tidak dijamin oleh spek. kill -9mungkin merupakan hukuman mati untuk solusi apa pun yang membutuhkan proses sekarat untuk melakukan sesuatu.

1

Lihatlah asumsi-asumsi, khususnya bahwa tidak ada proses yang tetap di bagian kritis tanpa batas (yang tentu saja termasuk pergi begitu saja). Saya tidak berpikir ada cara untuk menyelesaikan masalah umum dengan mekanisme sinkronisasi apa pun.

Solusi ini juga hanya untuk dua proses, ada solusi untukn proses sekitar.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.