Peterson'ın 2 işlemli karşılıklı dışlama algoritması, ölmekte olan işlemleri açıklıyor mu?


9

Ben de düşünüyorum Peterson algoritması için karşılıklı dışlama işlemi ilk kritik bölümüne girmek için eğer ölmek veya diğer süreç döngü sonsuza kadar kritik bölümünü girmek için bekleyen olurdu iptal edildi.

Resimde, işlem 1 durdurulursa, işlem 1'in arkasındaki işlemlerin geri kalanı, işlem 1'in bulunduğu yere kadar yürütülür, ancak daha sonra döngü oluşturur.

resim açıklamasını buraya girin

Kritik bölüme ulaşan süreç, ayrılmadan önce ölürse ne olur?


Sorunuzu buna göre düzenledim. Algoritmayı ikiden fazla sürece nasıl genişleteceğiniz hakkında yorum yapmadığınız için, sorunun o kısmını değiştirdim; Sorunun iki işlem versiyonunda zaten mevcut olduğunu düşünüyorum. Yine de resmi hiç anlamıyorum.
Raphael

Yanıtlar:


1

Bu, kilitlerin nasıl uygulandığına bağlıdır. Wikipedia makalesinde olduğu gibi yaparsanız, yani kritik bölümü işlem başına bir boole ile korumak¹, kesinlikle sorun yaşarsınız. Bir işlem ölürse, bayrağını asla sıfırlamaz, böylece diğer süreç sonsuza kadar döngüye girer.

Uygulamada, kodunuzu birçok ölüme karşı koruyabilirsiniz. Örneğin, şu Java tarzı uygulamayı alın:

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

Bu, sistem hatayı ele aldığı sürece kritik bölümde ne olursa olsun bayrağın sıfırlandığından emin olur. Java'da, yığın ve yığın taşmaları için bile geçerlidir. İşlem tam anlamıyla kaybolmadıkça ( kill², işlemci arızası, ağ bağlantısının kesilmesi, ...) güvendesiniz. Kritik olmayan yazılımların çoğunun bu durumlarda başarısız olduğunu unutmayın - çalışmadığı bir hatayı nasıl işleyebilir? - bu yüzden birçok durumda kabul edilmelidir. Gerekirse yeniden başlatma sırasında tutarsızlıkları kaldırabilirsiniz.

Dil düzeyinde uygun kilitler kullanırsanız, çalışma zamanı sistemi kaybolan kilit sahiplerini işleyebilir, yani ölü sahiplerle kilitleri serbest bırakabilir. Bunu, her bir sürece diğerlerinin okuyabileceği ölü bir adam anahtarı vererek kendiniz simüle edebilir veya kilit sahip olma sürecinin hala hayatta olup olmadığını doğrudan kontrol edebilirsiniz (sistem destekliyorsa).


  1. Bu zaten iyi ölçeklenmiyor.
  2. Java, ben finalizebile yürütmek gerektiğini düşünüyorum kill, ama bu spec tarafından garanti değildir. kill -9muhtemelen ölme sürecinin bir şey yapmasını gerektiren herhangi bir çözüm için ölüm cezasıdır.

1

Varsayımlara, özellikle kritik bölümde süresiz olarak hiçbir sürecin kalmadığı (kesinlikle uzaklaşmayı da içeren) varsayımlarına bakın. Bu genel problemi herhangi bir senkronizasyon mekanizması ile çözmenin bir yolu olduğunu düşünmüyorum.

Bu çözüm sadece iki işlem içindir,n süreçleri.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.