वास्तविक समय में सॉफ्टवेयर को कैसे संशोधित किया जाए? [बन्द है]


9

पहली बार मैं इस बात का उल्लेख करना चाहूंगा कि मैं रियल-टाइम सिस्टम प्रोग्रामिंग में नौसिखिया हूँ इसलिए मेरे प्रश्न सही होने पर मुझे यकीन नहीं है। इसके लिए क्षमा करें, लेकिन मुझे कुछ मदद चाहिए

संक्षेप में प्रश्न: यह सुनिश्चित करने के लिए कठिन वास्तविक समय सॉफ्टवेयर को लागू कैसे करें कि यह कठिन समय सीमा को पूरा करता है? कुछ QNX सुविधाओं का उपयोग करना आवश्यक है? या यह सिर्फ Linux, QNX के पोर्ट के लिए इसे लिखने के लिए पर्याप्त है और यह डिफ़ॉल्ट रूप से वास्तविक समय होगा?

पूर्ण प्रश्न: हमने लिनक्स, विंडोज, एंड्रॉइड और क्यूएनएक्स के लिए अंतर-प्रक्रिया सांप्रदायिकता के साथ कुछ जटिल क्रॉस-प्लेटफॉर्म मल्टीप्रोसेस सॉफ़्टवेयर को लागू किया है। प्रोग्रामिंग भाषा C ++ है, हम बूस्ट और अन्य लिबास का उपयोग करते हैं। हमारे सॉफ्टवेयर यह अच्छी तरह से और जल्दी से काम करता है, लेकिन यह अभी भी प्रोटोटाइप है। उत्पादन उद्देश्यों के लिए हमें इसे वास्तविक समय में करने की आवश्यकता है। हमारी कुछ विशेषताओं को वास्तविक समय और बहुत मजबूत होना चाहिए क्योंकि वे बहुत महत्वपूर्ण हैं और लोगों की सुरक्षा जो हमारे सॉफ़्टवेयर का उपयोग करते हैं, उन पर निर्भर हो सकते हैं। वे बहुत जल्दी काम करते हैं - सैकड़ों मिलीसेकंड तक। लेकिन मुझे यकीन नहीं है कि इस तथ्य के कारण हमारा सिस्टम वास्तव में वास्तविक समय है (क्या मैं सही हूं?)।

तो एक मुख्य सवाल है: हमारे सॉफ्टवेयर को वास्तविक समय में कैसे संशोधित किया जाए? मैं बहुत गुगली कर चुका हूं लेकिन मुझे अभी तक पता नहीं है कि यह कैसे करना है।

हमारे प्लेटफार्मों के बारे में कुछ अतिरिक्त जानकारी: लिनक्स और विंडोज हम वर्तमान में केवल परीक्षण उद्देश्यों के लिए उपयोग करते हैं। Android - हमने अभी भी यह तय नहीं किया है कि हमें इसकी आवश्यकता है या नहीं। QNX - उत्पादन के लिए हमारा लक्ष्य OS है। मुझे लगता है कि मेरे अगले प्रश्न का उत्तर "NO" है: लेकिन क्या क्रॉस-प्लेटफ़ॉर्म रियल-टाइम सॉफ़्टवेयर (रीयल-टाइम OSes (RTOS) के साथ-साथ सामान्य प्रयोजन OSes (GPOS) के लिए भी संभव है?

संभवतः हमें केवल QNX के लिए सभी वास्तविक समय की विशेषताओं को लागू करने के लिए अपने प्रयास करने की आवश्यकता है? लेकिन मुझे अभी भी समझ नहीं आ रहा है कि यह कैसे किया जाए। क्या कोई इस सवाल पर प्रकाश डाल सकता है?


55
यदि आपकी परियोजना सुरक्षा-महत्वपूर्ण है, तो आपको वास्तव में किसी ऐसे व्यक्ति की आवश्यकता है जो आपके पेरोल पर वास्तविक समय प्रणाली को समझता है।
Blrfl

18
रियल-टाइम सिस्टम निष्पादन समय के मामले में आपका कोड कितना सटीक है, न कि यह तेज या धीमा।
पगोटी

22
मेरी भावना यह है कि आप वास्तविक समय के लिए एक मौजूदा सॉफ़्टवेयर को संशोधित नहीं करते हैं , आप एक नए सॉफ़्टवेयर को स्क्रैच से डिज़ाइन करते हैं और लिखते हैं , स्पष्ट वास्तविक समय की कमी को ध्यान में रखते हुए। और आपका प्रश्न बहुत व्यापक है: वास्तव में आपका सॉफ्टवेयर क्या कर रहा है? किस प्रकार की वास्तविक समय प्रणाली के बारे में, किस ठोस प्रकार के एम्बेडेड सिस्टम के लिए (क्या उद्देश्य: वाणिज्यिक विमानों में इनफ्लो इन्फोटेनमेंट परमाणु रिएक्टर नियंत्रण के समान नहीं है)? आपको अपने प्रश्न को अधिक ठोस, सटीक बनाने और उसे प्रेरित करने के लिए संपादित करने की आवश्यकता है ।
बेसिल स्टैरनेवविच

24
Reread @ Blrfl की टिप्पणी। और फिर इसे फिर से, और फिर से, और फिर से जब तक आप एक व्यक्ति को उचित अनुभव के साथ किराए पर न लें। या सुनिश्चित करें कि आपकी देयता बीमा का भुगतान किया गया है। क्योंकि यदि आप वास्तविक समय की आवश्यकताओं के साथ सुरक्षा-महत्वपूर्ण सॉफ़्टवेयर बना रहे हैं और आपके पास वह अनुभव नहीं है, तो आप आपराधिक रूप से लापरवाही बरत रहे हैं।
kdgregory

4
आपने पूछा: " क्या क्रॉस-प्लेटफ़ॉर्म रियल-टाइम सॉफ़्टवेयर (रीयल-टाइम OSes (RTOS) के साथ-साथ सामान्य प्रयोजन OSes (GPOS) के लिए भी इसे लागू करना संभव है? " मेरा अनुमान है कि नहीं, अन्यथा RTOS नहीं होंगे? मौजूद। "क्रॉस प्लेटफॉर्म" "पवित्र कंघी बनानेवाले की रेती" के समान है।

जवाबों:


38

उपवास का अर्थ वास्तविक समय नहीं है और वास्तविक समय का मतलब उपवास नहीं है।

वास्तविक समय का अर्थ है कि जब परिणाम वितरित किया जाता है तो उसका मूल्य उतना ही महत्वपूर्ण होता है। दूसरे शब्दों में, यदि परिणाम का एक सही मूल्य है, लेकिन बहुत जल्दी या बहुत देर से वितरित किया जाता है, तो समग्र परिणाम गलत है।

उदाहरण के लिए, एक वीडियो प्लेयर के बारे में सोचें। यदि वीडियो फ़्रेम सही दर पर प्रदर्शित नहीं होते हैं, तो उपयोगकर्ता संतुष्ट नहीं होंगे। इससे भी बदतर अगर छवि और ध्वनि सिंक में नहीं हैं।

यह उदाहरण दिखाता है कि कुछ वास्तविक समय के अनुप्रयोगों को वर्तमान सामान्य प्रयोजन OSes पर लागू किया जा सकता है।

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


श्री मौविसिल, मेरे प्रश्न का उत्तर देने के लिए धन्यवाद हमें कठिन वास्तविक समय के लिए कुछ विशेषताओं की आवश्यकता है एक और नरम हो सकता है वास्तविक समय मैं समझ नहीं पा रहा हूं कि समय सीमा की गारंटी देने के लिए सॉफ्टवेयर कैसे लिखें? क्या आप कृपया इस प्रश्न पर प्रकाश डाल सकते हैं?
user172825

7
@ user172825 - इस प्रश्न के उत्तर पुस्तकालयों के समतल हैं। शुरुआती बिंदु "रियल-टाइम प्रोग्रामिंग" से संबंधित हो सकते हैं, संबंधित विकिपीडिया लेख या क्यूएनएक्स या आरटीईएमएस जैसे आरटीओएस के ट्यूटोरियल।
मौवीसील

यह मेरे लिए सबसे जटिल प्रश्न था। मुझे इस विषय के बारे में बहुत बड़ी किताबें मिलीं। लेकिन मुझे आशा है कि इसे कुछ वाक्यों में समझाना संभव है। :)
उपयोगकर्ता 172825

5
" कंप्यूटर साइंस में केवल दो कठिन चीजें हैं: कैश अमान्य और नामकरण की चीजें। " - फिल कार्लटन ओके, और वास्तविक समय। वहाँ, एक वाक्य बताता है कि इसे दो वाक्यों में क्यों नहीं समझाया जा सकता है। अब हम आपको आपके नियमित रूप से शेड्यूल किए गए प्रोग्रामिंग पर लौटाते हैं।

1
मुझे लगता है कि "कठिन वास्तविक समय" "नियतात्मक समय" कॉलिंग आमतौर पर लोगों को इस बिंदु को प्राप्त करने में मदद करता है।
whatsisname

15

जैसा कि @mouviciel ने पहले ही कहा था, वास्तविक समय और उपवास वास्तव में दो स्वतंत्र गुण हैं, भले ही कई वास्तविक समय की समय सीमा का मतलब है कि अपेक्षाकृत तेजी से प्रतिक्रिया की आवश्यकता है।

रियल-टाइम सॉफ़्टवेयर लिखते समय, एक सही प्रतिक्रिया के बगल में सबसे महत्वपूर्ण संपत्ति यह है कि आप सटीक अनुमान लगा सकते हैं कि प्रतिक्रिया कितनी तेजी से दी जाएगी। कठिन वास्तविक समय की विशेषताओं के लिए, आपको यह भी सुनिश्चित करने में सक्षम होना चाहिए कि समय सीमा पूरी शक्ति विफलता के सभी संभावित परिस्थितियों के तहत पूरी की जाएगी।

अप्रत्याशितता के विशिष्ट स्रोतों में पाया जा सकता है

  • गतिशील मेमोरी आवंटन और कचरा संग्रह
  • (उच्च प्राथमिकता) में रुकावट आती है
  • ओएस में अनुसूचक
  • वस्तुओं का गतिशील निर्माण और विनाश
  • सशर्त-निष्पादित कोड की बड़ी मात्रा

मैं यह नहीं कह रहा हूं कि आपको उन क्षेत्रों से बचना चाहिए (जैसा कि आप सबसे अधिक संभावना नहीं कर सकते हैं), लेकिन आपको पता होना चाहिए कि वे कैसे आसानी से प्रभावित कर सकते हैं जिसके साथ आप अनुमान लगा सकते हैं कि आप प्रासंगिक सुविधाओं के लिए वास्तविक समय सीमा को पूरा करेंगे।


4
सशर्त रूप से निष्पादित कोड में परिशोधित एल्गोरिदम से सावधान रहना चाहिए, जहां अधिकांश समय ऑपरेशन सस्ता होता है, लेकिन कभी-कभी बहुत अधिक महंगा ऑपरेशन में बदल सकता है, उदाहरण के लिए जब वेक्टर वास्तविक समय की आवश्यकता होती है तो जोड़ते हैं।
शाफ़्ट

2
कुछ मामलों में, आपको WCET विश्लेषण करने की आवश्यकता हो सकती है , मिलीसेकंड के निष्पादन के समय की भविष्यवाणी
बेसिल स्टायरनेविच

3
@ user172825: प्रोफाइलिंग मदद कर सकता है, लेकिन इसका अनुभव और भाषा और पुस्तकालयों को वास्तव में अच्छी तरह से जानने के लिए नीचे आता है।
बार्ट वैन इनगेन शनाउ

3
यदि आपके पास कठिन वास्तविक समय की आवश्यकता है, तो रूपरेखा पर्याप्त नहीं हो सकती है। यदि रन टाइम पूरी तरह से नियतात्मक नहीं है, तो प्रोफाइलिंग आपको यह आभास दे सकती है कि यह हमेशा समय सीमा तक पूरा होगा, जब वास्तव में यह केवल 100 में से 99 बार समय सीमा को पूरा करता है। यदि आपको एक वास्तविक वास्तविक समय की आवश्यकता है, तो 100 में से 100 बार इसे पूरा करने की जरूरत है।
जेम्स_पिक

2
@ user172825 वास्तविक समय सॉफ्टवेयर के लिए है कि मस्तिष्क शल्य चिकित्सा के लिए क्या है - इसे सही ढंग से खींचने के लिए आपको बहुत अनुभव और कौशल की आवश्यकता होती है और आपको वास्तव में होना चाहिए, जो आप कर रहे हैं। उन परियोजनाओं को क्षेत्र के एक कुशल पेशेवर की देखरेख में बेहतर बनाया जाता है। वे ऐसी कोई चीज़ नहीं हैं जिसे आप एक नियमित डेवलपर के लिए फेंक सकते हैं और कह सकते हैं कि "इस चीज़ को एक वास्तविक समय प्रणाली के रूप में काम करें"।
टी। सर

8

मुझे लगता है कि वास्तविक समय में दो-वाक्य व्याख्या यह है कि एक वास्तविक समय प्रणाली के लिए डिज़ाइन किया गया है समझते हैं और नियंत्रित कर बुरी से बुरी हालत को बदलने के आउटपुट से बदल रहा है इनपुट से प्रतिक्रिया समय है।

इसके लिए एक विश्लेषण की आवश्यकता होती है जो पूरे सिस्टम को कवर करता है। मान लें कि आपके पास एक तुच्छ प्रणाली है जिसमें एक यूएसबी कीबोर्ड और एक ब्रेक सर्वो है। इस प्रणाली के साथ आप क्या जवाबदेही प्राप्त कर सकते हैं? आपको इस पर विचार करना होगा:

  • इनपुट मतदान आवृत्ति, और इसमें कितना समय लगता है
  • इनपुट रुकावट विलंबता
  • आपके पास इनपुट ईवेंट होने के बाद ऑपरेटिंग सिस्टम संदर्भ स्विच समय
  • ऑपरेटिंग सिस्टम कार्यों का प्राथमिकताकरण
  • अप्रत्याशित प्रतिक्रिया देरी या OOM घटनाओं से बचने के लिए कार्यक्रम में गतिशील आवंटन या आभासी स्मृति के उपयोग से बचें
  • कचरा संग्रहण के उपयोग से बचें
  • उच्च या अप्रत्याशित एन के साथ ओ (एन) या बदतर एल्गोरिदम के उपयोग से बचना (क्या आपकी कार की मनोरंजन प्रणाली में एक बहुत बड़ी प्लेलिस्ट लोड करना इसकी ब्रेकिंग प्रतिक्रिया को धीमा कर देती है?)
  • डिस्क या नेटवर्क विलंबता पर विचार करें (जैसे कारों में CAN बस का उपयोग)
  • उत्पादन नियंत्रण विलंबता

इस तरह के वातावरण में विश्वसनीयता के लिए भी विशेष रूप से विचार किया जाता है, जैसे कि मीसा सी मानकों।


क्या यह भी सच है कि वास्तविक समय में इस बात पर विचार करना शामिल है कि क्या एक ऑपरेशन नियतात्मक है, संभवतः पुनरावर्ती, या कुछ मामलों में बिल्कुल भी कम्प्यूटेशनल है?

हां, वे सभी "अनबाउंड" होंगे। पुनरावर्ती एल्गोरिदम की अनुमति दी जा सकती है बशर्ते उनके स्टैक उपयोग पर ऊपरी सीमा लगाई गई हो।
pjc50

5
avoiding use of garbage collection- यह होना चाहिए avoiding use of non-deterministic memory management। कचरा संग्रह वास्तविक समय में किया जा सकता है और मैन्युअल मेमोरी प्रबंधन आवश्यक रूप से नियतात्मक नहीं है ( mallocसी के लिए विशिष्ट कार्यान्वयन देखें )।
8bittree
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.