क्या आपने स्पेस हार्डिंग से निपटा है?


62

मैं अंतरिक्ष के सख्त होने पर सर्वोत्तम प्रथाओं का अध्ययन करने के लिए बहुत उत्सुक हूं। उदाहरण के लिए, मैंने पढ़ा है (हालाँकि मैं अब कोई लेख नहीं ढूँढ सकता) कि मंगल रोवर्स के कुछ मुख्य भागों ने गतिशील मेमोरी आवंटन का उपयोग नहीं किया, वास्तव में यह निषिद्ध था। मैंने यह भी पढ़ा है कि पुराने जमाने की कोर मेमोरी अंतरिक्ष में बेहतर हो सकती है।

मैं Google लूनर चैलेंज से जुड़ी कुछ परियोजनाओं को देख रहा था और सोच रहा था कि चंद्रमा पर कोड प्राप्त करना कैसा लगेगा, या यहां तक ​​कि अंतरिक्ष में भी। मुझे पता है कि अंतरिक्ष कठोर बोर्ड ऐसे कठोर वातावरण में कुछ पवित्रता प्रदान करते हैं, हालांकि मैं सोच रहा हूं (एक सी प्रोग्रामर के रूप में) अगर मुझे अंतरिक्ष में चलने वाले कुछ लिख रहा था तो मुझे अपनी सोच और कोड को समायोजित करने की आवश्यकता कैसे होगी?

मुझे लगता है कि अगले कुछ वर्ष निजी अंतरिक्ष कंपनियों में अधिक वृद्धि दिखा सकते हैं, मैं वास्तव में कम से कम कुछ सर्वोत्तम प्रथाओं के बारे में जानकार होना चाहूंगा।

यदि विकिरण, ठंड या गर्मी के बोर्ड से किसी बोर्ड का क्या होता है जो उसके इन्सुलेशन को नुकसान पहुंचाता है? मुझे लगता है कि लक्ष्य मनुष्यों को एक अंतरिक्ष शिल्प के अंदर रख रहा है (जहाँ तक सामान को ठीक करना या स्वैप करना) और चीजों को ठीक करने के लिए मिशन से बचना है।

इसके अलावा, अगर बोर्ड कुछ महत्वपूर्ण प्रणाली बनाए रखता है, तो प्रारंभिक चेतावनी सर्वोपरि लगती है।

परीक्षण और परीक्षण और त्रुटि (अपने स्वयं के व्यक्तिगत उपग्रह के प्रक्षेपण पर रोक) के माध्यम से किसी को इसका अनुभव कैसे होता है?


3
मैंने स्पेस-एक्स और अन्य लोगों को ई-मेल भेजा है और उन्हें एसओ से जुड़ने और इसका जवाब देने में मदद करने के लिए कहा है। यदि कोई भी नासा में किसी को जानता है, तो अब उन्हें ई-मेल करने का समय है। इसी तरह, हो सकता है कि आप एक सेवानिवृत्त egineer को जानते हों? मैं जल्द ही इसे बंद नहीं करने जा रहा हूं।
टिम पोस्ट

7
ध्यान देने योग्य बात यह है कि "निषिद्ध गतिशील स्मृति आवंटन" अंतरिक्ष जांच के लिए अद्वितीय नहीं है, लेकिन वास्तव में किसी भी कसकर एम्बेडेड हार्डवेयर (यहां तक ​​कि हाथ में वीडियो गेम) के लिए काफी सामान्य है।
क्रैश फाइव


@ मार्क, क्या हास्य अब उत्तर को नष्ट करने के लिए पर्याप्त है?

5
यह इतना कठिन नहीं हो सकता, यह रॉकेट साइंस नहीं है। ओह रुको ...
मार्क रैनसम

जवाबों:


52

अंतरिक्ष सॉफ्टवेयर आर्कान जादू नहीं है। आप अभी भी 0 और 1 का उपयोग कर रहे हैं, 1 और 3 का नहीं। तो वहाँ शायद कोई वाह कारक क्या विकासशील सॉफ्टवेयर में चला जाता है का वर्णन करने में शामिल है।

इस समय मन में आने वाले कुछ मामूली अंतर हैं:

  • अत्यधिक प्रक्रिया उन्मुख।
  • अंतरिक्ष सॉफ्टवेयर में हमेशा सॉफ्टवेयर और हार्डवेयर वॉचडॉग टाइमर होंगे।
  • मेरे द्वारा काम किया गया हर स्पेस सिस्टम एक हार्ड-टाइम सिस्टम था।
  • आप हर बाहरी अभिनेता को सिस्टम में (महान सटीकता के लिए) अनुकरण करते हैं। इसमें आमतौर पर बिल्डिंग (कभी-कभी महंगे) कस्टम हार्डवेयर शामिल होते हैं जो पूरी तरह से परीक्षण के लिए उपयोग किए जाते हैं।
  • आप औपचारिक परीक्षण करने में भारी मेहनत और खर्च करते हैं।
  • ग्राहक (आमतौर पर JPL) परीक्षण प्रक्रिया में बेहद शामिल होता है।
  • आप आम तौर पर नए के बजाय पुराने और ज्ञात संकलक और विकास वातावरण का उपयोग कर रहे हैं।
  • कोड समीक्षा, कोड समीक्षा और कोड समीक्षा।
  • आप बेहतर हार्डवेयर और सॉफ्टवेयर की दुनिया के बीच स्विच करना बेहतर समझते हैं। आपको यह पता नहीं है कि हार्डवेयर को कैसे डिज़ाइन किया जाता है, लेकिन आपको यह जानना होगा कि यह कैसे काम करता है।
  • परीक्षण उपकरणों का व्यापक उपयोग, जैसे कि ऑसीलोस्कोप, तर्क विश्लेषक, सिंथेसाइज़र और स्पेक्ट्रम विश्लेषक।
  • आवेदन कार्यक्रम के भंडारण के लिए कम से कम 3 स्थान। डिफ़ॉल्ट को ROM में जला दिया जाता है। यह कभी नहीं बदलेगा। अन्य 2 वर्तमान संस्करण और अगले / अंतिम संस्करण के लिए हैं।
  • विफलता विश्लेषण (MTBF) वास्तव में महत्वपूर्ण है।
  • अनावश्यक घटकों के लिए निरर्थक प्रणाली और विफलता योजना।

अब तक, लेकिन जब तक मेमोरर आ रहा था तब तक प्रतीक्षा करें!
lsalamon

आप कहते हैं कि वे तीन बार कोड की समीक्षा करते हैं जैसे वे एक नकारात्मक हैं।
कोर्तुक

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

100% सहमत हुए। आवश्यक बुराई एक स्वीकार्य विवरण है।
कोर्तुक

9
"अंतरिक्ष सॉफ्टवेयर रहस्यमय जादू नहीं है", लेकिन अगर यह पर्याप्त रूप से उन्नत अंतरिक्ष सॉफ्टवेयर है तो यह रहस्यमय जादू से अप्रभेद्य होगा।
रॉबर्ट

29

मैं आपके दिलचस्प सवाल पर अड़ गया।

मैं अपोलो के दौरान इंस्ट्रूमेंटेशन लैब में था, और फिर बाद में जब इसे "कोल्ड वॉर" के दौरान ड्रेपर लैब कहा जाता था।

अपोलो मार्गदर्शन कंप्यूटर के लिए, कोर का उपयोग रैम के लिए किया गया था, और रोम के लिए एक विशेष लट वाले कोर का उपयोग किया गया था। मशीन को केवल NOR गेट्स से पूरी तरह से बनाया गया था और विश्वसनीयता के लिए इसे काफी धीमा रखा गया था।

मैंने सीधे Minuteman मिसाइलों पर काम नहीं किया, लेकिन मुझे कुछ मुद्दों की जानकारी थी। यदि कुछ इलेक्ट्रॉनिक्स के आसपास के क्षेत्र में एक परमाणु वारहेड बंद हो जाता है, तो यह मूल रूप से इसे छोटा कर देता है। मार्गदर्शन कंप्यूटर में एक विकिरण सेंसर होता था जो तुरंत Vc को बंद कर देता था ताकि कुछ भी जल न जाए। तब कंप्यूटर फिर से चालू हो जाता, उसके रजिस्टर मिट जाते थे।

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


21

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

MISRA-C: ऑटोमोटिव C सबसेट। रवेन्सकर एडीए / जावा की तरह।

प्रहरी: सुनिश्चित करें कि कार्यक्रम लॉक नहीं है

ecc मेमोरी (कभी-कभी)

चेकसम: फ्लिपिंग बिट्स की तलाश में। मैंने इन तीनों को एक प्रणाली में देखा है:

1) प्रोग्राम को लगातार चेक करना (यह EPROM में था लेकिन फिर भी फ़्लिप बिट्स हो गया)।

2) चेकसम कुछ डेटा संरचनाओं को समय-समय पर।

3) CPU sanity समय-समय पर जाँच करता है।

4) आईओ रजिस्टरों की जांच करें कि उनमें क्या होना चाहिए।

4 बी) स्वतंत्र इनपुट पर वापस आउटपुट पढ़ें और सत्यापित करें।


और, सभी विफलता प्रतिक्रियाओं की पूरी तरह से योजना बनाई है, इस विश्वास पर कि उन्हें जरूरत होगी।
माइक डनलैवी

असफल प्रतिक्रियाओं को कोड में सबसे अच्छा रखा जाता है। यह चुनने के समय त्रुटि होती है। समय-समय पर बरामद होने पर, दोषों की रिपोर्ट करने की आवश्यकता होती है। मशीन को स्वयं के लिए सामना करना पड़ता है, उस बिंदु तक जब तक कि "कंप्यूटर विफल" एनाउन्सेटर बंद हो जाता है।
टिम विस्क्राफ्ट

9

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

इसके अलावा, निम्नलिखित दो घटनाएं अच्छी तरह से बताती हैं कि सॉफ्टवेयर इंजीनियरों को अंतरिक्ष में कुछ भेजते समय समस्याओं की गुणवत्ता का सामना करना पड़ता है:


मंगल पोलर लैंडर। (अपर्याप्त परीक्षण)
टिम विस्क्रॉफ्ट

1
मंगल ग्रह की परिक्रमा: इकाइयाँ भ्रम। बस एसआई का उपयोग करें और इसके साथ किया जाए।
टिम विस्क्राफ्ट

6

मुझे जेट प्रोपल्शन लेबोरेटरी की साइट पर प्रयोगशाला के लिए विश्वसनीय सॉफ्टवेयर (LaRS) पर C प्रोग्रामिंग लैंग्वेज के लिए JPL इंस्टीट्यूशनल कोडिंग स्टैंडर्ड के लिए यह दस्तावेज (लगभग 2009) मिला ।

यहाँ प्रलेखित नियमों का सारांश दिया गया है:

  1. भाषा का अनुपालन

    • भाषा की परिभाषा से बाहर मत भटकिए।
    • सक्षम सभी चेतावनियों के साथ संकलन; स्थैतिक स्रोत कोड analyzers का उपयोग करें।
  2. पूर्वनिर्धारित निष्पादन

    • सभी छोरों को समाप्त करने के लिए प्रयोग किए जाने वाले लूप सीमा का उपयोग करें।
    • प्रत्यक्ष या अप्रत्यक्ष पुनरावृत्ति का उपयोग न करें।
    • टास्क इनिशियलाइजेशन के बाद डायनामिक मेमोरी एलोकेशन का उपयोग न करें।
    • * कार्य संचार के लिए IPC संदेशों का उपयोग करें।
    • कार्य सिंक्रनाइज़ेशन के लिए कार्य विलंब का उपयोग न करें।
    • * साझा डेटा ऑब्जेक्ट के लिए स्पष्ट रूप से लेखन-अनुमति (स्वामित्व) स्थानांतरित करें।
    • सेमाफोर और ताले के उपयोग पर प्रतिबंध लगाएं।
    • मेमोरी प्रोटेक्शन, सेफ्टी मार्जिन, बैरियर पैटर्न का उपयोग करें।
    • गोटो, सेटजम्प या लॉन्गजम्प का प्रयोग न करें।
    • एक एनम सूची के तत्वों के लिए चयनात्मक मूल्य असाइनमेंट का उपयोग न करें।
  3. रक्षात्मक कोडिंग

    • छोटी वस्तुओं को गुंजाइश के सबसे छोटे संभव स्तर पर घोषित करें।
    • गैर-शून्य फ़ंक्शंस के वापसी मूल्य की जाँच करें, या (शून्य) में स्पष्ट रूप से डाली जाए।
    • फ़ंक्शन के लिए दिए गए मानों की वैधता की जाँच करें।
    • पवित्रता जाँच के रूप में स्थैतिक और गतिशील अभिकर्मकों का उपयोग करें।
    • * पूर्वनिर्धारित C ​​डेटा प्रकार जैसे कि int, short, आदि के बजाय U32, I16 आदि का उपयोग करें।
    • यौगिक अभिव्यक्तियों में मूल्यांकन का क्रम स्पष्ट करें।
    • साइड इफेक्ट के साथ भाव का उपयोग न करें।
  4. कोड स्पष्टता

    • C प्री-प्रोसेसर का केवल बहुत सीमित उपयोग करें।
    • किसी फ़ंक्शन या ब्लॉक के भीतर मैक्रोज़ को परिभाषित न करें।
    • अपरिभाषित या पुनर्परिभाषित मैक्रो न करें।
    • #Else, #elif, और #endif को एक ही फाइल में मिलान #if या #ifdef के रूप में रखें।
    • * पाठ की प्रति पंक्ति एक से अधिक कथन या घोषणा न रखें।
    • * सीमित संख्या में मापदंडों के साथ छोटे कार्यों का उपयोग करें।
    • * प्रति घोषणा में अप्रत्यक्ष के दो स्तरों से अधिक का उपयोग न करें।
    • * वस्तु संदर्भ के अनुसार दो स्तरों से अधिक नहीं का उपयोग करें।
    • * मैक्रोज़ या टाइपेडिफ्स के अंदर डेरेफेरेशन ऑपरेशन को न छुपाएं।
    • * गैर-स्थिर फ़ंक्शन पॉइंटर्स का उपयोग न करें।
    • फ़ंक्शन पॉइंटर्स को अन्य प्रकारों में न डालें।
    • कोड या घोषणाओं को एक # निर्देश के पहले न रखें।

*) सभी नियम हैं करेगा नियम, एक तारक से चिह्नित को छोड़कर।


5

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

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

अंतरिक्ष कंप्यूटिंग की चुनौतियों की व्यावहारिक समझ देने के लिए:

  • अंतरिक्ष में चरम स्थिति: सूर्य के लिए उन्मुख होने पर बहुत गर्म, दूसरी तरफ बहुत ठंडी, कई ब्रह्मांडीय किरणें जो स्मृति में बिट्स को उल्टा कर सकती हैं, जिसकी प्रशंसा होने पर भारी त्वरण और कंपन होता है, ... अंतरिक्ष के लिए हार्डवेयर हार्डवेयर की तुलना में कहीं अधिक मजबूत होना चाहिए सेना के लिए।

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


3

एक परियोजना के रूप में मैंने जो सीखा वह एक प्रशिक्षु के रूप में शामिल था:

आपका हार्डवेयर चश्मा बदल जाएगा, आमतौर पर बदतर के लिए!

उदाहरण के लिए, डिज़ाइन में उपयोग किए जा रहे सीपीयू को अंतरिक्ष में कठोर बनाया गया था, वादा किया गया था, आपको लगता है कि यह 20 मेगाहर्ट्ज पर चलेगा।

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

इसलिए, मूल डिज़ाइन में उपलब्ध कुछ अतिरिक्त संसाधनों को छोड़ने का प्रयास करें और सभी उपलब्ध सीपीयू और मेमोरी का उपयोग न करने का प्रयास करें।


3

एक सॉफ़्टवेयर परिप्रेक्ष्य के लिए, एक विशेषाधिकार प्राप्त कार्य लिखें जो कभी-कभी, यादृच्छिक रूप से, आपके कोड में बिट्स को फ़्लिप करता है, और देखें कि यह कैसे व्यवहार करता है। वह आपका सिम्युलेटर है।

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


2

मैंने एक सुरक्षा महत्वपूर्ण उपकरण पर काम किया और हमें कुछ समान हुप्स से गुजरना पड़ा।

हमारे पास सुरक्षा महत्वपूर्ण चर थे। चर के व्युत्क्रम की एक प्रति थी। प्रत्येक लूप के बाद, चर को इसके व्युत्क्रम के खिलाफ जांचा गया।

हमारे पास सभी रजिस्टरों का एक चलने वाला और शून्य परीक्षण था। जिसमें प्रोग्राम काउंटर शामिल था!

हमारे पास माइक्रो इंस्ट्रक्शन सेट के सभी ऑपकोड्स का टेस्ट था। हमें यह सुनिश्चित करना था कि यदि आपने 2 रजिस्टर जोड़े हैं, तो रजिस्टर जोड़े गए थे।

इसमें से कुछ संभवतः अंतरिक्ष में कार्यक्रमों से संबंधित नहीं हैं, लेकिन यह आपको जाँच की भयावहता का एहसास दिलाता है जो संभव है।


1

मेरा मानना ​​है कि खराब वातावरण एक अधिक त्रुटि सुधार कोड का उपयोग किया जाता है, और ईसीसी यादें हैं जो कुछ हद तक उपयोग की जा सकती हैं।

यदि कोई त्रुटियों के स्तर का अनुमान लगा सकता है तो एक त्रुटि सुधार कोड का निर्माण कर सकता है जो कि प्रस्तुत त्रुटियों को संभाल सकता है।


0
  • हां, कोर मेमोरी रिसर्च बोर्डों पर है।
  • डायनामिक मेमोरी एम्बेडेड सिस्टम के लिए अच्छा नहीं है। विश्वसनीयता के मुद्दे।

मुझे लगता है कि सॉफ्टवेयर ECC डेटा और सूचना सिद्धांत का उपयोग करते हुए और स्मृति विफलताओं का प्रबंधन करने के लिए सिस्टम के चारों ओर डेटा फैलाने के लिए एक कस्टम लॉकर एक शुरुआत होगी। लेकिन, मैं रेड-हार्ड सॉफ़्टवेयर का अध्ययन नहीं करता हूं, इसलिए मैं इससे परिचित नहीं हूं, यह सिर्फ एक अनुमान है।

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