"Kötü elma" algoritması veya işlem paylaşılan sanal alanı kilitliyor


9

Ben (şimdilik) "kötü elma" algoritması çağırıyorum aşağıdaki sorunu işlemek için bir algoritma arıyorum.

Sorun

  • M sanal alanlarında çalışan N işlemleri var, burada N >> M.
  • Her işleme kendi korumalı alanını vermek pratik değildir.
  • Bu işlemlerden en az biri kötü davranıyor ve tüm sanal alanı indiriyor, böylece aynı sanal alandaki diğer tüm işlemleri öldürüyor.

Tek bir kötü davranış süreci olsaydı, o zaman süreçlerin yarısını bir sandbox'a, yarısını başka bir sandbox'a koymak için basit bir ikiliyi kullanabilirdim.

Soru

Birden fazla süreç kötü davranıyorsa - hepsinin kötü davranmış olma olasılığı da dahil olmak üzere - bu saf algoritma "işe yarar" mı? Bazı mantıklı sınırlar içinde çalışacağı garanti ediliyor mu?

basitleştirmeler

Tartışma uğruna, diyelim ki kötü bir süreç kum havuzunu anında indiriyor ve iyi bir süreç asla yapmıyor.


Nasıl garanti kötü efendi süreç olmasıdır edecektir sandbox aşağı getirmek? Yani - verilen sanal alanın çökmediği için sadece "temiz" süreçler yürüttüğünden emin olduğumuz zaman sınırlı bir süre alabilir miyiz?
SF.

Ne yazık ki değil: bir sanal alanın 5 dakika boyunca çökmemesi, tüm süreçlerin iyi davrandığı anlamına gelmez, ancak bize bu gerçeğe daha fazla güven verir.
Roger Lipscombe

... ama bu sorunun amaçları için, sınırlı bir zamana izin vererek tahmin edebiliriz.
Roger Lipscombe

"Başarılı" ve "başarısız" bir süreç olduğunu düşündüğünüz şeyi atomize etmeniz gerekir. Başarısız olmadan 5 dakika sürerse, teknik olarak kötü bir elma olabilir, ancak durma problemi gibi, kumda bazı sert çizgiler yapmadan geçtiğinde asla% 100 kesinlik elde edemezsiniz.
Neil

Sanki doğru yoldasın. Birçok işlem ve birden fazla kötü elma varsa, bilinen iyi elmaları izole edebilmeniz, daha sonra bilinen-iyi olanı bir kum havuzunda tutabilmeniz ve bilinmeyen süreçleri bölmeye devam edebilmeniz için büyük bir M değeri veya düzensiz gruplar kullanmanız gerekebilir. bireyleri tanımlayana kadar diğer sanal alanlarınız. Ne kadar çok sanal alanınız olursa, o kadar hızlı gidecektir. @Neil'in işaret ettiği gibi, bu N algoritmasının log tabanı M'nin büyük bir O'sudur, bu nedenle artan M denemelerinizi kesecektir.
GlenPeterson

Yanıtlar:


2

Kötü bir elma buluyorsanız, algoritmayı uygulayabilirsiniz:

  1. N'yi M gruplarına ayır
  2. Testi her grupta gerçekleştirin.
  3. Grup boyutu 1'den büyükse, N'yi bozuk gruptaki öğe sayısı ile değiştirerek 1. adıma dönün.

Aynı şekilde, bir "iyi" elmayı buluyorsanız, aynı algoritma uygulanır, ancak daha iyi grubu bulur.

Bu algoritma O (log_M (N)) performans oranına sahiptir, ancak sadece bir kötü elma olması gerçeğine bağlıdır.

Kaç tane iyi / kötü elmanın olduğunu bilmiyorsanız, aşağıdaki algoritmayı kullanabilirsiniz:

For each M processes in N
  Test M processes

Bu en kötü durum senaryosudur, ancak O(N/M)zamanla çalışır (veya O(N)tek bir geçişi tek bir test olarak veya paralel olarak yapılan testlerin bir koleksiyonu olarak değerlendirmenize bağlı olarak). Her şey düşünüldüğünde, bu hiçbir şekilde kötü bir yaklaşım değildir .

Bundan daha iyi performans gösteren algoritmalar olabilir, ancak toplu işte kaç kötü elma / iyi elma olduğunu bilmenizi gerektirir. Bu faktörü bilmemekle birlikte, kanıtlayamıyorum, ancak yukarıda listelenen ikinci algoritmadan daha iyisini yapamayacağınıza bahse girmeye hazırım.

Umarım yardımcı olur!

Düzenleme : Pratik bir bakış açısıyla, bu işlemlerin bazılarının kolayca gerçekleştirilmediğini anlıyorum. Ancak bu doğru değil, talihsiz gerçeklik, süreçleri en azından etkinleştirmek veya devre dışı bırakmak zorunda kalmadan, o anda çalışmakta olan sanal alanda hangi işlemlerin çalıştığını kesinlikle belirleyemediğinizdir. Eğer soru algoritma ile ilgiliyse, buna cevap verdiğimi düşünüyorum. Soru böyle bir durumla nasıl başa çıkılacağı ile ilgiliyse, belki de soru süper kullanıcı SE için daha uygun olacaktır.


1
Ne yazık ki, süreçleri "test edemiyorum"; Tek bildiğim, sandbox'lardan birinin çökmesi ve buna bir veya daha fazla işlemin neden olduğu.
Roger Lipscombe

1
Sorun şu ki, seti ikiye böldükten sonra, her iki bölümün içinde kötü elma olabilir. Bu da beni basit bir bölümden daha fazlasına ihtiyacım olduğunu düşündürüyor ...
Roger Lipscombe

@RogerLipscombe Gerçek dünya senaryosuna bir algoritma uygulamaya çalışıyorsunuz. Elbette süreçleri birer birer test edemezsiniz ve bu süreçleri farklı makinelerde test etmek zor olabilir, ancak bunun altına girmek istiyorsanız, şu ya da bu şekilde bir yol bulmak zorunda. Çözülemeyen değişkenler eklerseniz, kötü elma (lar) ı kesin olarak saptayabilecek bir algoritma bulamazsınız.
Neil

Tamam, yani "test" ile, sadece "onları güvende olacak kadar uzun süre çalışır halde bırak" demek istiyorsun ...?
Roger Lipscombe

@RogerLipscombe Sanırım. Daha fazla zaman alabilir, ancak ne kadar bekleyeceğinizi anlamanız gereken kişi sizsiniz. Bunu bilerek ve bu algoritmayı takip ederek, tüm kötü elmaları teknik olarak bulabilirsiniz. Ancak, kilitlenmeler için yalnızca Windows olay günlüğüne bakmak daha hızlı olabilir.
Neil
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.