क्यों यूनिक्स बाल प्रक्रियाओं को विरासत में मिली [सबसे] मूल प्रक्रिया विशेषताएँ


1

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

फिर मुझे Node.js में सैंडबॉक्स वातावरण के बारे में पता है , जिसमें यह आपको अनिवार्य रूप से खाली स्लेट प्रदान करता है, और आप बच्चे की प्रक्रिया के संदर्भ में चर और "सुविधाएँ" जोड़ते हैं।

मैं जो सोच रहा हूं वह यह है कि एक बच्चे की प्रक्रिया को प्राप्त करने के लिए विभिन्न प्रकार के कॉन्फ़िगरेशन क्या हैं, और सभी मूल विशेषताओं को प्राप्त करने के लिए यूनिक्स में बच्चे की प्रक्रिया "चूक" क्यों होती है। आश्चर्य है कि इसके बजाय इसकी मेमोरी स्पेस और व्हाट्सएप क्यों नहीं होगा।

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

यह जानने के लिए दिलचस्पी होगी कि क्या इस तरह के "कॉन्फ़िगरेशन सुविधाओं" में पास होने का एक तरीका है, जब एक बच्चे की प्रक्रिया बनाते हैं, या तो यूनिक्स या किसी अन्य ऑपरेटिंग सिस्टम पर। उदाहरण के लिए, "माता-पिता के पते के स्थान का आधा, 2 के पते के स्थान का 1 / 4th, 1/8 के 1 स्थान का 1/8 का उपयोग करते हुए, बच्चे की प्रक्रिया बनाएं और 1 के 8 वें स्थान का पता लगाएं, और शेष 1/8 मेरे अपने स्थानीय पते के स्थान का उपयोग करें। इसके अलावा, पहुंच प्रदान करें। टू, बी और सी डिवाइस ड्राइवर, और अन्यथा बिना नेटवर्क एक्सेस की अनुमति के। " कुछ मनमाना, जहां यह मूल रूप से बाल प्रक्रिया के "फीचर सेट" को ठीक-ठाक स्तर तक कॉन्फ़िगर कर रहा है।

आश्चर्य है कि अगर यूनिक्स या अन्य ऑपरेटिंग सिस्टम में ऐसा कुछ होता है, और यदि नहीं, तो क्यों नहीं। मुझे समझ में नहीं आ रहा है कि प्रक्रियाओं को अनुमति देने / विनियमित करने के इन 2 मामलों के लिए निर्णय क्यों किया गया था।

ऐसा लगता है कि यह सुरक्षा रिंग अवधारणा के साथ किसी तरह से ओवरलैप करता है । आप कुछ सुविधाओं तक पहुँचने से उपयोगकर्ता प्रक्रियाओं (बाल प्रक्रियाओं) को रोकते हैं। आश्चर्य है कि यह उच्च स्तर पर, इससे अधिक विन्यास क्यों नहीं है।


बाल प्रक्रियाओं को अपना स्वयं का (गाय) मेमोरी स्पेस मिलता है, और थ्रेड्स साझा होते हैं। एक बच्चे की "सुविधा सेट" को माता-पिता की प्रक्रिया के बाद fork()और उससे पहले कॉन्फ़िगर किया गया है exec..()
dsstorefile1

1
क्या आप यूनिक्स प्रक्रियाओं के बारे में पूछ रहे हैं, लिनक्स प्रक्रियाओं के बारे में, फ्रीबीएसडी प्रक्रियाओं के बारे में ...? पारंपरिक यूनिक्स कांटा / vfork और उदाहरण के लिए Linux क्लोन / अनिश्चित, या FreeBSD rfork के बीच एक बड़ा अंतर है।
ग्रेविटी

1
इस प्रश्न के साथ समस्या- जिसका उत्तर यहाँ दिया गया है - यह मानता है कि "माता-पिता" और "बच्चा" एक प्रणाली में सिर्फ सार्वभौमिक हैं और यह कि एक नोड "बच्चे" की प्रक्रिया ओएस-स्तरीय "बच्चे" प्रक्रिया के समान है। । यह नहीं है। Node.js बस एक प्रोग्रामिंग भाषा है जो एक OS पर मौजूद है और यह स्वयं की प्रक्रिया संरचना के भीतर काम करती है। ओएस आइटम एक पूरी तरह से अलग जानवर हैं। इसके अलावा, यह सवाल कुछ हद तक " XY समस्या " जैसा है, इसलिए मैं मूल पोस्टर को स्पष्ट करने के लिए प्रोत्साहित करता हूं कि क्या वास्तविक मुद्दा है।
जेकगोल्ड

जवाबों:


-1

आप यहां सेब और संतरे और अंगूर का मिश्रण कर रहे हैं।

  • उदाहरण के लिए, "node.js," जावास्क्रिप्ट उच्च-स्तरीय भाषा है, जिसका ऑपरेटिंग-सिस्टम प्रक्रियाओं से कोई लेना-देना नहीं है। (जावास्क्रिप्ट के सभी एक प्रक्रिया या अपने मेजबान द्वारा सुसज्जित धागा के भीतर चलाता है।)

  • "रिंग्स," या अधिक आम तौर पर "सीपीयू विशेषाधिकार स्तर" माइक्रोप्रोसेसर चिप की भौतिक विशेषताएं हैं , यह निर्धारित करने के लिए उपयोग किया जाता है कि सीपीयू निर्देश किस कार्यक्रम को जारी करने की अनुमति देता है और यह किन संसाधनों तक पहुंच सकता है।

  • यूनिक्स / लिनक्स सॉफ्टवेयर आर्किटेक्चर, जो इन ऑपरेटिंग सिस्टमों के लिए काफी विशिष्ट है , " निकटता " की धारणा से निकटता से जुड़ा हुआ है , जो इस तरह दिखता है:

    if (pid = fork()) {
        ... you are the parent, and 'pid' is the child's process-id ...
    } else {
        ... 'pid' is zero, so you are the child ...
    }
    

इस साफ-सुथरे विचार के लिए काम करने के लिए, माता-पिता के अधिकांश संदर्भ को बच्चे को कॉपी करना होगा।

exec()सिस्टम कॉल (एक बच्चे द्वारा) इस्तेमाल किया जा सकता माता पिता से सभी "विरासत" के कारण विच्छेद होने के लिए कुछ नई प्रक्रिया के साथ अपने पूरे संदर्भ को बदलने के लिए,।


1
exec()सभी उत्तराधिकार को नहीं हटाता है। यह ज्यादातर प्रक्रिया मेमोरी को बदल देता है, लेकिन अन्य संसाधनों को बनाए रखा जाता है। जब तक उनके पास close-on-execध्वज सेट न हो, उदाहरण के लिए फ़ाइल डेस्ट्रिपर्स संरक्षित होते हैं ; यह किसी बाहरी प्रोग्राम को निष्पादित करने से पहले शेल को I / O पुनर्निर्देशन करने की अनुमति देता है।
बरमार
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.