दौड़ की स्थिति का क्या अर्थ है?


10

मैं एक नया विद्युत अभियंता हूं जो मेरे साथ है। मैं कुछ अन्य इंजीनियरों के बारे में सुनता हूं जो एक रेस की स्थिति के बारे में बात करते हैं जो हमारे सर्किट में मौजूद हैं।

इसका क्या मतलब है?


यदि आप एक विशिष्ट उदाहरण को देखना चाहते हैं, तो "डी-ग्लिचिंग रैम राइट्स" और दो निम्नलिखित लेखों में बग के बारे में एक लंबी चर्चा है, जहां तक ​​मैं बता सकता हूं, एक दौड़ की स्थिति द्वारा ट्रिगर किया गया था।
दाविदरी

जवाबों:


16

इसका मतलब है, परिणाम के लिए एक ही समय में दो चीजें "दौड़"।

एक उदाहरण एक रीसेट और सेट पिन के साथ एक सर्किट है, यदि आप रीसेट को ट्रिगर करते हैं, तो आउटपुट 0. हो जाता है। यदि आप सेट को ट्रिगर करते हैं, तो आउटपुट 1 हो जाता है। यदि आप पहले ट्रिगर सेट करते हैं और फिर बहुत रीसेट हो जाते हैं, तो इसके तुरंत बाद रीसेट करें देखा जाएगा, इसलिए आउटपुट 0 है।

लेकिन, अगर वे दोनों एक ही समय में ट्रिगर होते हैं, तो क्या होता है?

यदि सर्किट डिजाइनर ने ध्यान दिया, तो एक जवाब होना चाहिए, अगर यह फ़ंक्शन के लिए महत्वपूर्ण है। यदि उस प्रश्न का कोई निश्चित उत्तर नहीं है, तो सर्किट में एक दौड़ की स्थिति होती है, जहां सेट से संकेत और एक दूसरे को "रेस" रीसेट करने के लिए यह देखने के लिए कि कौन सा आउटपुट निर्धारित करने के लिए जीतता है।

कम से कम देरी के साथ रास्ता आमतौर पर जीत जाएगा, लेकिन फिर आप दौड़ की स्थिति को सटीक ट्रिगर के रूप में देख सकते हैं जिसमें सबसे विलंबित पथ को तेज एक से पहले बिल्कुल ट्रिगर किया जाता है।

IC के अंदर लॉजिक बिल्डिंग ब्लॉक्स सहित कई सर्किट में दौड़ की कुछ शर्तें होती हैं, लेकिन आमतौर पर वे ऐसी होती हैं, जब आप सर्किट का उपयोग उस तरह से करते हैं जैसा कि आप का इरादा है, कि आप ध्यान नहीं देंगे। इसलिए अक्सर जब इंजीनियर कहते हैं कि "रेस कंडीशन" एक दो बार जोर से सुनाई देती है, तो इसका मतलब है कि यह भी एक है जो सामान्य उपयोग में हो सकता है, जो एक समस्या होगी, क्योंकि एक दौड़ की स्थिति में सामान्य ऑपरेशन की भविष्यवाणी नहीं की जा सकती है।

सॉफ्टवेयर में इस शब्द का उपयोग भी किया जाता है, लेकिन अक्सर समय संबंधी समस्याओं या लॉक-अप को इंगित करने के लिए। यह एक समान सिद्धांत है, यद्यपि। अक्सर जब आपके पास स्वतंत्र रूप से चलने वाले कंप्यूटर में दो प्रक्रियाएं होती हैं, लेकिन उसी मेमोरी का उपयोग करके आप उस मेमोरी को एक द्वारा लिखे जाने से बचाते हैं, जबकि दूसरा इसका उपयोग कर रहा होता है। यदि आप यह नहीं कहते हैं कि एक संभावित दौड़ की स्थिति: एक प्रक्रिया एक मूल्य को पढ़ सकती है जो अद्यतन होने की प्रक्रिया में है, या दोनों एक ही समय में इसे लिख सकते हैं और फिर आप नहीं जानते कि क्या होगा होता है।


2
इस अच्छे उत्तर के अतिरिक्त, मैं इंगित करता हूं कि हार्डवेयर इन स्थितियों में बहुत खराब व्यवहार कर सकता है। वास्तविक हार्डवेयर कभी भी 0 से 1 तक तुरंत स्विच नहीं करता है। यह हमेशा उन दोनों के बीच कम अवधि में उठना होता है। अधिकांश तर्क यह मानते हैं कि इस तरह के संक्रमण के बाद से पर्याप्त समय बीत चुका है कि ग्राहकों ने "वास्तव में 0 के करीब" या "वास्तव में 1 के करीब" का समाधान किया है। यदि समय है ... दुर्भाग्यपूर्ण है, यह 0.5 के करीब हो सकता है। इस स्थिति में कई सर्किट "मेटास्टेबल" बन जाते हैं, जिसका अर्थ है कि वे संक्रमण के लिए एक अनिर्धारित मात्रा ले सकते हैं, पूरे सर्किट को अस्थिर कर सकते हैं
Cort Ammon

1
यहां तक ​​कि अगर आपके सर्किट को उस मामले को संभालने के लिए डिज़ाइन किया गया है जहां सेट और रीसेट एक साथ सक्रिय हैं, तो आप मज़बूती से उन्हें एक साथ सक्रिय नहीं कर सकते हैं, इसलिए आपको पता नहीं चलेगा कि कौन सा पहले सक्रिय है।
user253751

गैर-परमाणु संचालन सॉफ्टवेयर में दौड़ की स्थिति का एक बेहतर उदाहरण है। एक प्रोग्राम सी का उपयोग करके एक नई फ़ाइल बना सकता fopen()है, fclose()इसे डेटा लिख ​​सकता है, इसे, फिर chmod()इसे सुरक्षित करने के लिए। उस संक्षिप्त विंडो के बीच fopen()और chmod()एक संभावित दौड़ की स्थिति को खोलता है जहां डिफ़ॉल्ट फ़ाइल मोड एक अवांछित बाहरी व्यक्ति को chmod()कॉल के बाद अस्वीकृत तरीके से फ़ाइल के साथ काम करने की अनुमति दे सकता है । समाधान open()इसके बजाय फ़ाइल बनाने के लिए है , जो फ़ाइल निर्माण ऑपरेशन के भाग के रूप में मोड को सेट करने की अनुमति देता है।
वॉरेन यंग

6

शब्द "रेस कंडीशन" से तात्पर्य यह है कि (1) दो या दो से अधिक संकेत किसी भी क्रम में आ सकते हैं, मनमाने ढंग से एक-दूसरे के करीब, और (2) यह विश्लेषणात्मक रूप से दिखाना संभव नहीं है कि आगमन के किसी भी संभावित संयोजन की अनिवार्य रूप से शून्य संभावना है कई बार समस्या खड़ी करना।

एकल फ्लिप फ्लॉप के दृष्टिकोण से जिसका डेटा इनपुट घड़ी के संबंध में किसी भी समय बदल सकता है, घड़ी पर डेटा के साथ-साथ संक्रमण और डेटा इनपुट एक दौड़ की स्थिति पैदा कर सकते हैं। समग्र सर्किट व्यवहार के दृष्टिकोण से, हालांकि, वे एक दौड़ की स्थिति पैदा नहीं करेंगे यदि वे केवल उस समय हो सकते हैं जब कोई डाउनस्ट्रीम सर्कुलेशन इस बात की परवाह नहीं करेगा कि कुंडी क्या है, और कोई डाउनस्ट्रीम सर्किटरी इस बात की परवाह नहीं करना शुरू करेगी कि कुंडी क्या है। क्लॉक पल्स के आने के बाद तक जो डेटा इनपुट पर किसी भी संक्रमण के पास कहीं भी नहीं हो सकता है।

इसके अलावा, क्योंकि यह अक्सर समस्याग्रस्त इनपुट समय की पूरी तरह से पूरी तरह से समाप्त करने के लिए संभव नहीं है, दौड़ की स्थिति के कई विश्लेषण कहेंगे कि यदि एक रजिस्टर का आउटपुट उसी घड़ी द्वारा नियंत्रित किया जाता है, तो दूसरा रजिस्टर हमेशा कुंडी लगाएगा "क्लीन" हाई या "क्लीन" लो भले ही पहले रजिस्टर में इनपुट इनपुट थ्रेशोल्ड को सही करने के लिए इसका कारण बनता है। सिद्धांत रूप में, यह पहली कुंडी के लिए एक स्तर पर कब्जा करने के लिए संभव होगा जो कि इसके सटीक स्विचिंग सीमा से ठीक ऊपर या नीचे पर्याप्त था कि उत्पादन स्तर ठीक उसी तरह स्विच होगा जैसे कि अगली घड़ी पल्स आती है।

परिणामस्वरूप, यदि कोई एक इनपुट लेना चाहता था और इसे तीन फ्लिप फ्लॉप के अनुक्रम में पास करता है, और एक सर्किट होता है, जो तब आउटपुट होता है जब भी दूसरा फ्लॉप अधिक होता है, लेकिन तीसरा कम था, फिर कोई भी उठने वाला किनारा डेटा इनपुट जो कम समय की पूर्ण घड़ी की अवधि से पहले होता है, और उच्च समय की पूर्ण घड़ी अवधि के बाद, अनिवार्य रूप से एक घड़ी की अवधि के लिए सर्किट के आउटपुट उच्च होने का कारण होगा।

ढांच के रूप में

इस सर्किट का अनुकरण करें - सर्किटलैब का उपयोग करके बनाई गई योजनाबद्ध

इस योजनाबद्ध में, कुछ अनियमित समय के साथ एक संकेत को इस तरह से एक फैशन में तीन तरीकों से एक घड़ी के लिए सामान्यीकृत किया जाता है ताकि एक आउटपुट उत्पन्न किया जा सके जो प्रत्येक बढ़ते किनारे के बाद एक घड़ी चक्र के लिए उच्च होता है। सिग्नल को सामान्य करने का पहला प्रयास एक आउटपुट उत्पन्न करता है जो बुरा लग रहा है, और एक स्पष्ट दौड़ की स्थिति है अगर इनपुट और घड़ी एक साथ बदलते हैं। दूसरा दृष्टिकोण बहुत बेहतर है, लेकिन अभी भी एक दौड़ की स्थिति है (जो सिम्युलेटर को ट्रिगर नहीं कर सकता है) अगर घड़ी और डेटा का समय पहले रजिस्टर को एक मध्यवर्ती मूल्य पर कब्जा करने का कारण बनता है। तीसरा दृष्टिकोण सामान्य अभ्यास का प्रतिनिधित्व करता है, और आम तौर पर सुरक्षित माना जाएगा, भले ही पहला रजिस्टर एक स्वच्छ उच्च या स्वच्छ कम पर कब्जा करने में विफल हो, यह बहुत कम संभावना है कि पहले रजिस्टर से आउटपुट बिल्कुल सही व्यवहार होगा, जिससे दूसरा रजिस्टर साफ-सुथरा न हो सके। यदि डेटा घड़ी के बहुत करीब बदल जाता है, तो इसे वर्तमान चक्र पर पकड़ा जा सकता है, या अगले तक पकड़ा नहीं जा सकता है, लेकिन यदि कोई स्थिति स्वीकार्य होगी तो कोई दौड़ की स्थिति नहीं है।


आपने कहा, "... एक आउटपुट जो बुरा लग रहा है।" यह कहने का एक और तरीका है "मेटास्टेबल राज्य?"
सोलोमन स्लो

@jameslarge: सिम्युलेटर मेटास्टेबल स्टेट्स को हैंडल नहीं करता है। मैं पहले आउटपुट को बदसूरत बताता हूं क्योंकि कोई न्यूनतम पल्स चौड़ाई नहीं है, और मेटास्टेबल राज्यों की संभावना के कारण दूसरा आउटपुट जोखिम भरा है।
सुपरकैट

2

संक्षेप में, इसका मतलब है कि एक प्रक्रिया का परिणाम दो आदानों के आगमन के अनुक्रम से प्रभावित होगा, और यह अनुक्रम अनिश्चित है (गारंटी नहीं दी जा सकती)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.