Bir yarış koşulu ne anlama geliyor?


10

Ben yeni bir elektrik mühendisiyim, bu yüzden bana katlan. Birlikte çalıştığım bazı mühendislerin devrelerimizden birinde var olan bir yarış durumu hakkında konuştuğunu duyuyorum.

Bu ne anlama geliyor?


Belirli bir örneğe bakmak isterseniz, "De-Glitching RAM Writes" ve aşağıdaki iki makale, anlayabildiğim kadarıyla bir yarış koşulu tarafından tetiklenen bir hata hakkında uzun bir tartışmaya sahiptir.
davidcary

Yanıtlar:


16

Yani, çok basit bir şekilde aynı anda iki şey sonuç için "yarış".

Bir örnek, Sıfırlama ve Ayar pimine sahip bir devre olup, sıfırlamayı tetiklerseniz çıkış 0 olur. Ayarı tetiklerseniz, çıkış 1 olur. İlk önce seti tetikler ve sonra çok, çok hızlı bir şekilde sıfırlarsanız, sıfırlayın görünür, böylece çıktı 0 olur.

Ancak, ikisi de aynı anda tetiklenirse ne olur?

Devre tasarımcısı dikkat ettiyse, bu işlev için önemliyse bir cevap olmalıdır. Bu soruya kesin bir cevap yoksa, devrenin bir küme koşulu vardır, burada setten gelen sinyal ve reset sıfırlama birbirini "yarışır".

En az gecikmeli yol genellikle kazanır, ancak daha sonra yarış koşulunu, en gecikmeli yolun daha hızlı olandan tam olarak önce tetiklendiği kesin tetikleyici olarak görebilirsiniz.

IC'lerin içindeki mantık yapı taşları da dahil olmak üzere birçok devrenin belirli yarış koşulları vardır, ancak genellikle devreyi amaçlandığı şekilde kullandığınızda fark etmeyeceğiniz şekildedir. Çoğu zaman mühendisler "yarış koşulu" nu birkaç kez yüksek sesle söylediğinde, bunun normal kullanımda da olabileceği anlamına gelir, bu da bir sorun olurdu, çünkü bir yarış durumunda normal çalışma tahmin edilemez.

Yazılımda terim de kullanılır, ancak genellikle zamanlama sorunlarını veya kilitlenmeleri belirtmek için kullanılır. Yine de benzer bir prensiptir. Genellikle bir bilgisayarda bağımsız olarak çalışan iki işleminiz olduğunda, ancak aynı belleği kullandığınızda, diğerini kullanırken bu belleği biri tarafından yazılmasını önlersiniz. Olası bir yarış koşulu olarak adlandırmazlarsa: Bir süreç, sadece güncellenme sürecinde olan bir değeri okumak olabilir veya her ikisi de aynı anda ona yazıyor olabilir ve o zaman ne olacağını bilmiyorsunuz olmak.


2
Bu iyi cevaba ek olarak, donanımın bu durumlarda çok kötü davranabileceğine dikkat çekerim. Gerçek donanım hiçbir zaman 0'dan 1'e geçmez. Her zaman aralarında kısa bir süre yükselmesi gerekir. Çoğu mantık, geçişlerin "gerçekten 0'a yakın" ya da "1'e gerçekten yakın" olarak çözüldüğü böyle bir geçişten bu yana yeterince zaman geçtiğini varsayar. Zamanlama ... talihsiz ise, 0,5'e yakın olabilir. Birçok devreleri, bunlar geçiş süresi belirsiz bir miktar alabilir anlamı bütün devreyi istikrarı bozan bu durumda "yarı kararlı" haline
Cort Ammon

1
Devreniz, Ayarla ve Sıfırla'nın aynı anda etkinleştirildiği kasayı ele alacak şekilde tasarlanmış olsa bile, bunları aynı anda güvenilir bir şekilde etkinleştiremezsiniz, böylece hangisinin önce etkinleştirildiğini bilemezsiniz.
user253751

Atomik olmayan işlemler yazılımdaki yarış koşullarına daha iyi bir örnektir. Bir program C'leri kullanarak yeni bir dosya oluşturabilir fopen(), fclose()ona veri yazabilir , sonra chmod()güvenliğini sağlayabilir . Bu kısa pencere arasında fopen()ve chmod()varsayılan dosya modunun istenmeyen bir yabancının dosyadan chmod()çağrıdan sonra reddedildiği şekilde çalışmasına izin verebileceği olası bir yarış koşulu açılır . Çözüm, open()bunun yerine dosyayı oluşturmaktır , bu da modu dosya oluşturma işleminin bir parçası olarak ayarlamaya izin verir.
Warren Young

6

"Yarış koşulu" terimi, (1) iki veya daha fazla sinyalin keyfi olarak birbirine yakın herhangi bir sırada gelebileceğini ve (2) analitik olarak olası herhangi bir olası kombinasyon kombinasyonunun sıfır olasılığının olduğunu göstermenin mümkün olmadığını ima eder. kez bir sorun poz.

Veri girişi saate göre herhangi bir zamanda değişebilen tek bir flip flop açısından, saate yakın eşzamanlı geçişler ve veri girişleri bir yarış durumu oluşturabilir. Bununla birlikte, genel devre davranışı açısından, sadece aşağı akış devresinin mandalın ne tuttuğunu umursamadığı ve aşağı akış devresinin mandalın tuttuğu şeyle ilgilenmeye başlayamayacağı zamanlarda ortaya çıkabildikleri takdirde bir yarış durumu oluşturmazlar. veri girişindeki herhangi bir geçişin yakınında hiçbir yerde bulunamayan bir saat darbesinin gelmesinden sonraya kadar.

Ayrıca, sorunlu giriş zamanlamalarının tüm olasılığını tamamen tamamen ortadan kaldırmak çoğu zaman mümkün olmadığından, yarış koşullarının birçok analizi, bir kaydın çıktısı aynı saat tarafından kontrol edilen bir diğerine beslenirse, ikinci kaydın her zaman mandallanacağını söyleyecektir. ilk kayıt girişleri anahtarlama eşiğinde olan giriş seviyesini yakalamasına neden olsa bile "temiz" yüksek veya "temiz" düşük. Teorik olarak, ilk mandalın, bir sonraki saat darbesi geldiğinde çıkış seviyesinin tam olarak değişeceği tam anahtarlama eşiğinin hemen üstünde veya altında bir seviyeyi yakalaması mümkün olacaktır.

Sonuç olarak, örneğin bir girdi alıp üç flip flop dizisine geçirmek ve ikinci flop yüksek, ancak üçüncü flop düşük olduğunda yüksek çıkış yapan bir devreye sahip olsaydı, o zaman ortaya çıkan yükselen kenar öncesinde düşük zaman değerinde bir tam saat periyodu ve ardından yüksek bir tam zaman periyodu ile gelen veri girişinin, devrenin çıkışının tam bir saat periyodu için yüksek olmasına neden olması esasen garanti edilecektir.

şematik

bu devreyi simüle et - CircuitLab kullanılarak oluşturulan şematik

Bu şemada, biraz düzensiz zamanlamaya sahip bir sinyal, her yükselen kenardan sonra bir saat döngüsü için yüksek bir çıktı üretecek şekilde üç şekilde bir saate normalleştirilir. Sinyali normalleştirme ilk denemesi, giriş ve saat aynı anda değişirse, kötü görünen ve belirgin bir yarış durumuna sahip bir çıkış üretir. İkinci yaklaşım çok daha iyidir, ancak saatin ve verilerin zamanlaması ilk kaydın bir ara değer yakalamasına neden oluyorsa yine de (simülatörün tetikleyemediği) bir yarış durumu vardır. Üçüncü yaklaşım ortak uygulamayı temsil eder ve genellikle güvenli kabul edilir, çünkü ilk kayıt temiz bir yüksek veya temiz düşük yakalayamasa bile, ilk kayıttan elde edilen çıktının, ikinci kaydın temiz bir şekilde tutulmamasına neden olacak doğru davranışa sahip olması pek olası değildir. Veriler saate çok yakın değişirse, mevcut döngüde yakalanabilir veya bir sonrakine kadar yakalanamaz, ancak her iki durum da kabul edilebilir olursa, yarış durumu yoktur.


"... kötü görünen bir çıktı" dedin. Bu, "ölçülebilir devlet" demenin başka bir yolu mu?
Solomon Slow

@jameslarge: Simülatör yarıiletken durumları işlemez. İlk çıkışı çirkin olarak tanımlıyorum çünkü minimum darbe genişliği yok, ikinci çıktı da yarıiletken durumların olasılığı nedeniyle riskli.
supercat

2

Kısacası, bir işlemin sonucunun iki girişin geliş dizisinden etkileneceği ve bu dizinin belirsiz olduğu (garanti edilemez) anlamına gelir.

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.