जावा / लिनक्स स्टैक "वास्तविक समय" होने में विफल होने के क्या कारण हैं?


20

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

मैं समझने की कोशिश कर रहा हूं कि क्यों । मेरा SWAG मुझे बताता है कि यह संभवतः जावा के गारबेज कलेक्टर के कारण है, जो किसी भी समय चल सकता है और सिस्टम को पूरी तरह से रोक सकता है। और यद्यपि वहाँ तथाकथित "रुके हुए जीसी" हैं, मैं जरूरी नहीं कि उनके विज्ञापन पर विश्वास करता हूं, और एक शौक परियोजना के लिए कांटे पर $ 80K-प्रति-जेवीएम-उदाहरण भी नहीं है!

मैं इस लेख को लिनक्स पर ड्रोन सॉफ्टवेयर चलाने के बारे में भी पढ़ रहा था । उस लेख में, लेखक एक परिदृश्य का वर्णन करता है जहां लिनक्स लगभग उसके ड्रोन को उसकी कार में दुर्घटनाग्रस्त कर देता है:

मैंने पाई पर निम्न स्तर के नियंत्रण लूप (पीआईडी) करने का चयन करने के बाद एक कठिन सबक सीखा - चतुर होने की कोशिश करते हुए मैंने डिबगिंग के लिए लूप के बीच में एक लॉग राइट लिखने का फैसला किया - शुरू में क्वाड ठीक ठीक निकला, लेकिन फिर लिनक्स ने फैसला किया एक लॉग प्रविष्टि लिखने के लिए 2seconds लेने के लिए और क्वाड लगभग मेरी कार में दुर्घटनाग्रस्त हो गया!

अब हालांकि उस लेखक ने सी + + में अपना ड्रोन सॉफ्टवेयर लिखा था, मुझे लगता है कि लिनक्स पर चलने वाले एक जावा ऐप बहुत अच्छी तरह से उसी भाग्य को पीड़ित कर सकता है।

विकिपीडिया के अनुसार:

एक प्रणाली को वास्तविक समय कहा जाता है यदि किसी ऑपरेशन की कुल शुद्धता न केवल इसकी तार्किक शुद्धता पर निर्भर करती है, बल्कि उस समय पर भी होती है जिसमें यह किया जाता है।

तो मेरे लिए, इसका मतलब है " आपके पास वास्तविक समय नहीं है अगर कुल शुद्धता के लिए तार्किक शुद्धता और समयबद्धता की आवश्यकता होती है। "

आइए दिखाते हैं कि मैंने सुपर प्रदर्शन करने के लिए जावा ऐप लिखा है, और यह कि मैंने बोलने के लिए "नींबू निचोड़" लिया है, और यह यथोचित नहीं लिखा जा सकता है (जावा में) किसी भी तेजी से होने के लिए।

सब के सब, मेरा सवाल यह है: मैं किसी के लिए मुझे सभी को समझाने के लिए देख रहा हूँ / अधिकांश कारणों के लिए क्यों एक जावा ऐप चल रहा है n लिनक्स एक "वास्तविक समय ऐप" विफल हो जाएगा। मतलब, जावा / लिनक्स स्टैक पर सभी चीजें क्या हैं जो इसे "समय पर" होने से रोकती हैं, और इसलिए, " सही सही " होने से? जैसा कि उल्लेख किया गया है, ऐसा लगता है कि जीसी और लिनक्स लॉग-फ्लशिंग निष्पादन को रोक सकते हैं, लेकिन मुझे यकीन है कि जावा ऐप के बाहर और भी चीजें हैं जो खराब समय / प्रदर्शन का कारण बन सकती हैं, और यह कठिन समय सीमा को पूरा करने का कारण बनती हैं। वे क्या हैं?


3
देखें JSR001
coredump

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

@ दुर्भाग्य से, जहाँ तक मैं jsr-1 के कार्यान्वयन की सूची में देख सकता हूँ, वहाँ अभी तक केवल चार कार्यान्वयन हुए हैं, जिनमें से दो वर्तमान में उपलब्ध नहीं हैं, और अन्य दो काफी महंगे वाणिज्यिक प्रसाद प्रतीत होते हैं जिनकी संभावना है पूछने वाले की कीमत सीमा।
जूल्स

जवाबों:


28

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

एक कठिन वास्तविक समय प्रणाली में, हमारे पास ऐसी स्वतंत्रता नहीं है। एक उड़ान नियंत्रण सॉफ्टवेयर को कुछ समय सीमा के भीतर प्रतिक्रिया करनी चाहिए, या वाहन दुर्घटनाग्रस्त हो सकता है। और हार्डवेयर, ओएस और सॉफ्टवेयर को वास्तविक समय का समर्थन करने के लिए एक साथ काम करना चाहिए।

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

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

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


4

से विकिपीडिया :

आरटीओएस की एक प्रमुख विशेषता इसकी निरंतरता का स्तर है जो किसी एप्लिकेशन के कार्य को स्वीकार करने और पूरा करने में जितना समय लगता है; परिवर्तनशीलता घबराना है।

महत्वपूर्ण बात यह है कि सिस्टम को वास्तविक समय माना जाने के लिए घबराना निर्धारित है । लेख में कहा गया है कि यदि घबराना आमतौर पर बाध्य होता है, तो सिस्टम नरम वास्तविक समय है । यदि घबराहट हमेशा बंधी रहती है, तो सिस्टम कठिन वास्तविक समय है

जब तक आपके द्वारा उपयोग किए जाने वाले जावा और लिनक्स के संस्करणों को घबराना के संदर्भ में निर्धारित नहीं किया जाता है, वे वास्तविक समय नहीं होते हैं । कचरा संग्रह और लॉग-राइटिंग निश्चित रूप से घबराना के स्रोत हैं, लेकिन यहां तक ​​कि अगर यह आपकी प्रक्रियाओं में घबराहट का परिचय देता है, तो स्वायत्त प्रसंस्करण (जैसे) नेटवर्क पैकेट गिना जाता है।


1

स्टार्टर के लिए, वेनिला लिनक्स स्वयं वास्तविक समय नहीं कर सकता है। यही कारण है कि RTLinux विकसित किया गया था।

कहते हैं कि आप RTLinux पर कुछ जावा प्रक्रियाएँ चलाते हैं, फिर भी उन्हें वास्तविक समय माना जाएगा क्योंकि उन सभी प्रक्रियाओं को कर्नेल द्वारा निर्धारित किया जाता है, अर्थात यदि एक प्रक्रिया देर से होती है, तो अन्य प्रक्रियाएँ अभी भी उनके सीपीयू के समय की गारंटी हो सकती हैं।

अब, यदि जावा प्रोसेस ग्रीन थ्रेड चलाते हैं , तो इन थ्रेड्स का निष्पादन वास्तविक समय नहीं होगा क्योंकि JVM वास्तविक समय निर्धारण नहीं करता है।

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