QNX RTOS: माइक्रोन्यूक्लियस, थ्रेड्स और प्रोसेस के बारे में थोड़ा सा

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

POSIX के बारे में थोड़ा सा


क्यूएनएक्स के प्रत्येक नए संस्करण की रिहाई के साथ (और यह ध्यान दिया जाना चाहिए कि क्यूएनएक्स आरटीओएस का पहला संस्करण अब 1981 में वापस दिखाई दिया), डेवलपर्स ने अपने पिछले अनुभव का इस्तेमाल किया और सिस्टम को बेहतर बनाया, जिसमें डेवलपर्स के लिए अधिक सुविधाजनक भी शामिल था। यही कारण है कि क्यूएनएक्स न्यूट्रिनो पीओएसआईएक्स 1003.1 मानकों का समर्थन करता है, जैसे कि थ्रेड मैनेजमेंट, रियलटाइम एक्सटेंशन, अतिरिक्त रियलटाइम एक्सटेंशन और एप्लिकेशन एनवायरनमेंट प्रोफाइल (AEP)।

मैं इस बारे में क्यों बात कर रहा हूं? बहुत सरल है। मैं उन दो चीजों पर ध्यान देना चाहूंगा जो QNX की विशेषता हैं और POSIX से संबंधित हैं। यह माना जाता है कि कोई भी POSIX ऑपरेटिंग सिस्टम UNIX को छुपाता है। और यदि ऐसा है, तो ऐसी प्रणाली बहुत बोझिल है और इसका उपयोग एम्बेडेड समाधानों में नहीं किया जा सकता है। हालाँकि, QNX के मामले में यह सच नहीं है। POSIX मानक एक इंटरफ़ेस का वर्णन करता है, कार्यान्वयन का नहीं। इसका मतलब यह है कि POSIX परत के तहत कुछ भी छिपाया जा सकता है, जिसमें माइक्रोकर्नल भी शामिल है।

दूसरा बिंदु जिस पर मैं ध्यान देना चाहूंगा वह शायद स्पष्ट है। ये, निश्चित रूप से, वे लाभ हैं जो POSIX QNX में प्रदान करते हैं:
तो, हम यह निष्कर्ष निकाल सकते हैं कि QNX में POSIX कई फायदे प्रदान करता है।

सच्चा कोर


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

मैंने जो ऊपर सूचीबद्ध किया है वह सब QNX माइक्रोकर्नेल करता है। नेटवर्क ड्राइवर या डिस्क समर्थन जैसी चीजें अलग-अलग मॉड्यूल में रखी जाती हैं जो सामान्य उपयोगकर्ता प्रक्रियाओं की तरह चलती हैं और काम करती हैं। सभी आगामी फायदे (एक अखंड कोर पर आधारित प्रणालियों पर) के साथ। और ये फायदे क्या हैं? बहुत सरल:

मिथक: असेंबलर में QNX माइक्रोकर्नेल लिखा जाता है


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

QNX में प्रक्रियाएं और सूत्र


POSIX विनिर्देश के अनुसार, QNX RTOS स्ट्रीम का समर्थन करता है। और इससे भी अधिक, QNX माइक्रोकर्नल केवल थ्रेड्स को नियंत्रित करता है, और यह थ्रेड्स हैं जिन्हें "निष्पादन की न्यूनतम इकाई" माना जा सकता है। QNX में प्रत्येक प्रक्रिया में एक या अधिक सूत्र हो सकते हैं। इस नस में, एक प्रक्रिया को थ्रेड्स के कंटेनर के रूप में देखा जा सकता है।

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

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

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

मिथक: QNX माइक्रोकर्ल धीरे-धीरे प्रक्रियाओं के बीच संदर्भों को बदल देता है


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

धारा कैसे रहती है


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

जबकि धागा चल रहा है, यह दो राज्यों में हो सकता है: तैयार (तैयार) या अवरुद्ध (अवरुद्ध)। लेकिन वास्तव में, कई कारण हैं कि एक थ्रेड को ब्लॉक क्यों किया जा सकता है और जब pidin ( ps यूटिलिटी का pidin -विशिष्ट संस्करण) का उपयोग करके प्रक्रियाओं और थ्रेड्स के बारे में जानकारी प्रदर्शित करते हैं, तो हम विभिन्न राज्यों का अवलोकन कर सकते हैं, उदाहरण के लिए, SEND, RECEIVE, SIGWAITINFO, NANOSLEEP और। अन्य शामिल हैं। उदाहरण के लिए, इस राज्य में, मेरे पास अब USB प्रबंधक सूत्र हैं:

 # pidin -P io-usb pid tid name prio STATE Blocked 4101 1 proc/boot/io-usb 10o SIGWAITINFO 4101 2 proc/boot/io-usb 21r RECEIVE 1 4101 3 proc/boot/io-usb 10o RECEIVE 4 4101 4 proc/boot/io-usb 10r NANOSLEEP 4101 5 proc/boot/io-usb 10o RECEIVE 4 

यहाँ pid सिस्टम में प्रोसेस आइडेंटिफायर (प्रक्रिया ID) है, tid इस प्रक्रिया में थ्रेड आइडेंटिफायर (थ्रेड आईडी) है, prio थ्रेड प्रायरिटी नंबर और शेड्यूलिंग डिसिप्लिन है, STATE थ्रेड स्टेटस है, ब्लॉक की गई वैल्यू ब्लॉक होने के कारण पर निर्भर करती है। उपरोक्त उदाहरण में, थ्रेड्स 2, 3, और 5 एक प्राप्तकर्ता-अवरुद्ध अवस्था में हैं (यानी, वे अन्य थ्रेड्स से संदेश प्राप्त करने के लिए तैयार हैं)।

उपसंहार


मैंने POSIX के लाभों के बारे में बात करने की कोशिश की और QNX माइक्रोकर्नेल की भूमिका के बारे में थोड़ा। उम्मीद है कि यह दिलचस्प था। वास्तव में, अंतर-कार्य अंतःक्रिया के विषयों और तंत्र की योजना के बारे में बात करना अच्छा होगा, लेकिन मुझे लगा कि अलग-अलग विषयों में ऐसा करना बेहतर है ताकि यह सारी जानकारी गड़बड़ न हो जाए। मैं वादा करता हूं कि अगली बार यह अधिक दिलचस्प होगा।

और अधिक। अगर किसी को QNX में दिलचस्पी है, तो मैंने जो कुछ भी वर्णित किया है और उससे भी अधिक QNX न्यूट्रिनो के सिस्टम आर्किटेक्चर में पढ़ा जा सकता है। यह दस्तावेज़ इलेक्ट्रॉनिक रूप में वेबसाइट www.qnx.com (अंग्रेजी में) पर उपलब्ध है, और प्रिंट में एक रूसी अनुवाद भी है:
  1. वास्तविक समय ऑपरेटिंग सिस्टम QNX न्यूट्रिनो 6.3। सिस्टम आर्किटेक्चर। आईएसबीएन 5-94157-827-एक्स
  2. वास्तविक समय ऑपरेटिंग सिस्टम QNX न्यूट्रिनो 6.3। उपयोगकर्ता मैनुअल। आईएसबीएन 978-5-9775-0370-9

Source: https://habr.com/ru/post/In125243/


All Articles