शून्य-प्रतिलिपि: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 1: Line 1:
जीरो-कॉपी [[कंप्यूटर]] संचालन का वर्णन करता है जिसमें [[सेंट्रल प्रोसेसिंग यूनिट]] डेटा को रैम क्षेत्र से दूसरे में कॉपी करने का कार्य नहीं करता है या जिसमें अनावश्यक डेटा कॉपी से बचा जाता है। यह अक्सर कई समय लेने वाले कार्यों में सीपीयू चक्र और मेमोरी बैंडविड्थ को बचाने के लिए उपयोग किया जाता है, जैसे कि [[दूरसंचार नेटवर्क]] पर उच्च गति पर [[कम्प्यूटर फाइल]] को प्रसारित करते समय, आदि, इस प्रकार कंप्यूटर द्वारा निष्पादित [[कंप्यूटर प्रोग्[[ टक्कर मारना ]]]] ([[प्रक्रिया (कंप्यूटिंग)]]) के प्रदर्शन में सुधार होता है। कंप्यूटर।<ref name="lj-zerocopy" /><ref name="psu-edu-zerocopy" /><ref name="uidaho-edu-zerocopy" /><ref name="freebsd-tls-zerocopy" />
'''शून्य-प्रतिलिपि''' [[कंप्यूटर]] संचालन का वर्णन करता है जिसमें [[सेंट्रल प्रोसेसिंग यूनिट]] डेटा को रैम क्षेत्र से दूसरे में कॉपी करने का कार्य नहीं करता है या जिसमें अनावश्यक डेटा कॉपी से बचा जाता है। यह अधिकांशतः कई समय लेने वाले कार्यों में सीपीयू चक्र और मेमोरी बैंडविड्थ को बचाने के लिए उपयोग किया जाता है, जैसे कि [[दूरसंचार नेटवर्क]] पर उच्च गति पर [[कम्प्यूटर फाइल]] को प्रसारित करते समय आदि, इस प्रकार कंप्यूटर द्वारा निष्पादित कंप्यूटर प्रोग्राम ([[प्रक्रिया (कंप्यूटिंग)]]) के प्रदर्शन में सुधार होता है।<ref name="lj-zerocopy" /><ref name="psu-edu-zerocopy" /><ref name="uidaho-edu-zerocopy" /><ref name="freebsd-tls-zerocopy" />
 


== सिद्धांत ==
== सिद्धांत ==
जीरो-कॉपी [[कंप्यूटर प्रोग्रामिंग]] तकनीकों का उपयोग तब किया जा सकता है जब [[ उपयोक्ता स्थान |उपयोक्ता स्थान]] प्रक्रिया (यानी दो या अधिक [[थ्रेड (कंप्यूटिंग)]], आदि) के बीच डेटा का आदान-प्रदान किया जाता है और/या दो या दो से अधिक प्रक्रियाओं के बीच (निर्माता-उपभोक्ता समस्या भी देखें) और/या जब डेटा को कर्नेल स्पेस के अंदर या यूजर स्पेस प्रोसेस और [[ऑपरेटिंग सिस्टम]] (OS) के कर्नेल स्पेस भागों के बीच एक्सेस/कॉपी/स्थानांतरित किया जाना है।
शून्य-प्रतिलिपि [[कंप्यूटर प्रोग्रामिंग]] तकनीकों का उपयोग तब किया जा सकता है जब [[ उपयोक्ता स्थान |उपयोक्ता स्थान]] प्रक्रिया (अथार्त दो या अधिक [[थ्रेड (कंप्यूटिंग)]], आदि) के बीच डेटा का आदान-प्रदान किया जाता है और/या दो या दो से अधिक प्रक्रियाओं के बीच (निर्माता-उपभोक्ता समस्या भी देखें) और/या जब डेटा को कर्नेल स्पेस के अंदर या यूजर स्पेस प्रोसेस और [[ऑपरेटिंग सिस्टम]] (ओएस) के कर्नेल स्पेस भागों के बीच एक्सेस/कॉपी/स्थानांतरित किया जाना है।


आमतौर पर जब उपयोगकर्ता स्थान प्रक्रिया को अपने उच्च स्तरीय [[इंटरफ़ेस (कंप्यूटिंग)]] के माध्यम से या [[ परिधीय उपकरण |परिधीय उपकरण]] (यानी [[ डिस्क भंडारण |डिस्क भंडारण]] , [[नेटवर्क इंटरफ़ेस नियंत्रक]], आदि) से डेटा पढ़ने या लिखने जैसे सिस्टम ऑपरेशंस को निष्पादित करना होता है या से डेटा ले जाना होता है। डिवाइस से दूसरे डिवाइस, आदि, इसे या से अधिक [[सिस्टम कॉल]] करने होते हैं जो कि ऑपरेटिंग सिस्टम द्वारा कर्नेल स्पेस में निष्पादित किए जाते हैं।
सामान्यतः जब किसी उपयोगकर्ता स्पेस प्रक्रिया को अपने उच्च स्तरीय सॉफ़्टवेयर इंटरफ़ेस के माध्यम से किसी उपकरण (अथार्त डिस्क, एनआईसी इत्यादि) से डेटा पढ़ना या लिखना या एक उपकरण  से दूसरे उपकरण  में डेटा ले जाना आदि जैसे सिस्टम संचालन निष्पादित करना होता है। इसे एक या अधिक सिस्टम कॉल निष्पादित करनी होती है जिन्हें ऑपरेटिंग सिस्टम द्वारा कर्नेल स्पेस में निष्पादित किया जाता है।


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


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


एक उदाहरण के रूप में, फ़ाइल को पढ़ने और फिर इसे नेटवर्क पर पारंपरिक तरीके से भेजने के लिए 2 अतिरिक्त डेटा प्रतियों की आवश्यकता होती है (कर्नेल से उपयोगकर्ता स्थान पर पढ़ने के लिए + 1 उपयोगकर्ता से कर्नेल स्थान पर लिखने के लिए) और प्रति पढ़ने/लिखने के चक्र में 4 संदर्भ स्विच . वे अतिरिक्त डेटा प्रतियां CPU का उपयोग करती हैं। उस फ़ाइल को फ़ाइल डेटा के एमएमएपी और राइट कॉल के चक्र का उपयोग करके भेजना, संदर्भ स्विच को प्रति राइट कॉल 2 तक कम कर देता है और उन पिछली 2 अतिरिक्त उपयोगकर्ता डेटा प्रतियों से बचता है। ही फाइल को जीरो कॉपी के जरिए भेजने से संदर्भ स्विच 2 प्रति सेंडफाइल कॉल में कम हो जाता है और सभी सीपीयू अतिरिक्त डेटा प्रतियां (उपयोगकर्ता और कर्नेल स्थान दोनों में) समाप्त हो जाती हैं।<ref name="lj-zerocopy" /><ref name="psu-edu-zerocopy" /><ref name="uidaho-edu-zerocopy" /><ref name="freebsd-tls-zerocopy" />
'''एक उदाहरण के रूप में, फ़ाइल को पढ़ने और''' फिर इसे नेटवर्क पर पारंपरिक तरीके से भेजने के लिए 2 अतिरिक्त डेटा प्रतियों की आवश्यकता होती है (कर्नेल से उपयोगकर्ता स्थान पर पढ़ने के लिए + 1 उपयोगकर्ता से कर्नेल स्थान पर लिखने के लिए) और प्रति पढ़ने/लिखने के चक्र में 4 संदर्भ स्विच . वे अतिरिक्त डेटा प्रतियां CPU का उपयोग करती हैं। उस फ़ाइल को फ़ाइल डेटा के एमएमएपी और राइट कॉल के चक्र का उपयोग करके भेजना, संदर्भ स्विच को प्रति राइट कॉल 2 तक कम कर देता है और उन पिछली 2 अतिरिक्त उपयोगकर्ता डेटा प्रतियों से बचता है। ही फाइल को जीरो कॉपी के जरिए भेजने से संदर्भ स्विच 2 प्रति सेंडफाइल कॉल में कम हो जाता है और सभी सीपीयू अतिरिक्त डेटा प्रतियां (उपयोगकर्ता और कर्नेल स्थान दोनों में) समाप्त हो जाती हैं।<ref name="lj-zerocopy" /><ref name="psu-edu-zerocopy" /><ref name="uidaho-edu-zerocopy" /><ref name="freebsd-tls-zerocopy" />


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


== हार्डवेयर कार्यान्वयन ==
== हार्डवेयर कार्यान्वयन ==
एक प्रारंभिक कार्यान्वयन [[IBM]] OS/360 था जहां प्रोग्राम चैनल I/O को फ़ाइल या डिवाइस से डेटा के ब्लॉक को [[डेटा बफर]] में पढ़ने और डेटा को स्थानांतरित किए बिना उसी बफर से दूसरे को लिखने का निर्देश दे सकता है।
एक प्रारंभिक कार्यान्वयन [[IBM]] OS/360 था जहां प्रोग्राम चैनल I/O को फ़ाइल या उपकरण से डेटा के ब्लॉक को [[डेटा बफर]] में पढ़ने और डेटा को स्थानांतरित किए बिना उसी बफर से दूसरे को लिखने का निर्देश दे सकता है।


जीरो-कॉपी सॉफ़्टवेयर बनाने की तकनीकों में [[ स्मृति प्रबंधन इकाई |स्मृति प्रबंधन इकाई]] (MMU) के माध्यम से [[ प्रत्यक्ष मेमोरी एक्सेस |प्रत्यक्ष मेमोरी एक्सेस]] (DMA)-आधारित कॉपी और मेमोरी-मैपिंग का उपयोग शामिल है। इन सुविधाओं के लिए विशिष्ट हार्डवेयर समर्थन की आवश्यकता होती है और आमतौर पर विशेष मेमोरी संरेखण आवश्यकताओं को शामिल किया जाता है।
शून्य-प्रतिलिपि सॉफ़्टवेयर बनाने की तकनीकों में [[ स्मृति प्रबंधन इकाई |स्मृति प्रबंधन इकाई]] (MMU) के माध्यम से [[ प्रत्यक्ष मेमोरी एक्सेस |प्रत्यक्ष मेमोरी एक्सेस]] (DMA)-आधारित कॉपी और मेमोरी-मैपिंग का उपयोग शामिल है। इन सुविधाओं के लिए विशिष्ट हार्डवेयर समर्थन की आवश्यकता होती है और सामान्यतः विशेष मेमोरी संरेखण आवश्यकताओं को शामिल किया जाता है।


[[विषम प्रणाली वास्तुकला]] (HSA) द्वारा उपयोग किया जाने वाला नया दृष्टिकोण सेंट्रल प्रोसेसिंग यूनिट और [[ ग्राफ़िक्स प्रोसेसिंग युनिट |ग्राफ़िक्स प्रोसेसिंग युनिट]] और अन्य प्रोसेसर के बीच [[ सूचक (कंप्यूटर प्रोग्रामिंग) |सूचक (कंप्यूटर प्रोग्रामिंग)]] को पास करने की सुविधा प्रदान करता है। इसके लिए CPU और GPU के लिए [[समान मेमोरी एक्सेस]] की आवश्यकता होती है।<ref name="APU" /><ref name="AMD_HSA" />
[[विषम प्रणाली वास्तुकला]] (HSA) द्वारा उपयोग किया जाने वाला नया दृष्टिकोण सेंट्रल प्रोसेसिंग यूनिट और [[ ग्राफ़िक्स प्रोसेसिंग युनिट |ग्राफ़िक्स प्रोसेसिंग युनिट]] और अन्य प्रोसेसर के बीच [[ सूचक (कंप्यूटर प्रोग्रामिंग) |सूचक (कंप्यूटर प्रोग्रामिंग)]] को पास करने की सुविधा प्रदान करता है। इसके लिए CPU और GPU के लिए [[समान मेमोरी एक्सेस]] की आवश्यकता होती है।<ref name="APU" /><ref name="AMD_HSA" />
Line 28: Line 27:
यहां सबसे लोकप्रिय ओएस में उपलब्ध कुछ प्रसिद्ध सिस्टम कॉल/एपीआई सूचीबद्ध हैं।
यहां सबसे लोकप्रिय ओएस में उपलब्ध कुछ प्रसिद्ध सिस्टम कॉल/एपीआई सूचीबद्ध हैं।


[[नोवेल नेटवेयर]] इवेंट कंट्रोल ब्लॉक्स (ईसीबी) के माध्यम से जीरो-कॉपी के फार्म का समर्थन करता है, [[एनसीओपीवाई]] देखें।
[[नोवेल नेटवेयर]] इवेंट कंट्रोल ब्लॉक्स (ईसीबी) के माध्यम से शून्य-प्रतिलिपि के फार्म का समर्थन करता है, [[एनसीओपीवाई]] देखें।


[[DR-DOS]] के कुछ संस्करणों में आंतरिक DOS कमांड COPY (DOS कमांड) कमांड 1992 से जब COMMAND.COM यह पता लगाता है कि प्रतिलिपि की जाने वाली फ़ाइलें नेटवेयर फ़ाइल सर्वर पर संग्रहीत हैं, तो यह इसे भी आरंभ करता है,<ref name="Caldera_1997_DOSSRC" />अन्यथा यह सामान्य फ़ाइल प्रतिलिपि पर वापस आ जाता है।
[[DR-DOS]] के कुछ संस्करणों में आंतरिक DOS कमांड COPY (DOS कमांड) कमांड 1992 से जब COMMAND.COM यह पता लगाता है कि प्रतिलिपि की जाने वाली फ़ाइलें नेटवेयर फ़ाइल सर्वर पर संग्रहीत हैं, तो यह इसे भी आरंभ करता है,<ref name="Caldera_1997_DOSSRC" />अन्यथा यह सामान्य फ़ाइल प्रतिलिपि पर वापस आ जाता है।
DR DOS 6.0 (1991) और MS-DOS 6.0 (1993) के बाद से बाहरी DOS कमांड MOVE (DOS कमांड) कमांड आंतरिक रूप से RENAME (DOS कमांड) करता है (जिसके कारण फ़ाइल सिस्टम में केवल [[निर्देशिका प्रविष्टि]] को भौतिक रूप से कॉपी करने के बजाय संशोधित किया जा सकता है) फ़ाइल डेटा) जब स्रोत और गंतव्य ही लॉजिकल वॉल्यूम पर स्थित होते हैं।<ref name="Paul_1997_NWDOSTIP" />
DR DOS 6.0 (1991) और MS-DOS 6.0 (1993) के बाद से बाहरी DOS कमांड MOVE (DOS कमांड) कमांड आंतरिक रूप से RENAME (DOS कमांड) करता है (जिसके कारण फ़ाइल सिस्टम में केवल [[निर्देशिका प्रविष्टि]] को भौतिक रूप से कॉपी करने के बजाय संशोधित किया जा सकता है) फ़ाइल डेटा) जब स्रोत और गंतव्य ही लॉजिकल वॉल्यूम पर स्थित होते हैं।<ref name="Paul_1997_NWDOSTIP" />


[[लिनक्स कर्नेल]] विभिन्न सिस्टम कॉल्स के माध्यम से जीरो-कॉपी का समर्थन करता है, जैसे:
[[लिनक्स कर्नेल]] विभिन्न सिस्टम कॉल्स के माध्यम से शून्य-प्रतिलिपि का समर्थन करता है, जैसे:
* सेंडफाइल, सेंडफाइल64;<ref name="man7_sendfile" />* [[ब्याह (सिस्टम कॉल)]];<ref name="man7_splice" />* टी;<ref name="man7_tee" />* वीएमएसप्लिस;<ref name="man7_vmsplice" />* प्रक्रिया_vm_readv;<ref name="man_process_vm_readv" />* प्रोसेस_वीएम_राइटव;<ref name="man7_process_vm_writev" />* कॉपी_फाइल_रेंज;<ref name="man7_copy_file_range" />* पैकेट [[mmap]] के साथ कच्चे सॉकेट<ref name="kernel_PACKET_MMAP" />या एक्सप्रेस डेटा पाथ#AF XDP|AF_XDP.
* सेंडफाइल, सेंडफाइल64;<ref name="man7_sendfile" />* [[ब्याह (सिस्टम कॉल)]];<ref name="man7_splice" />* टी;<ref name="man7_tee" />* वीएमएसप्लिस;<ref name="man7_vmsplice" />* प्रक्रिया_vm_readv;<ref name="man_process_vm_readv" />* प्रोसेस_वीएम_राइटव;<ref name="man7_process_vm_writev" />* कॉपी_फाइल_रेंज;<ref name="man7_copy_file_range" />* पैकेट [[mmap]] के साथ कच्चे सॉकेट<ref name="kernel_PACKET_MMAP" />या एक्सप्रेस डेटा पाथ#AF XDP|AF_XDP.


उनमें से कुछ [[POSIX]] में निर्दिष्ट हैं और इस प्रकार [[बर्कले सॉफ्टवेयर वितरण]] कर्नेल या [[IBM AIX]] में भी मौजूद हैं, कुछ Linux कर्नेल API के लिए अद्वितीय हैं।
उनमें से कुछ [[POSIX]] में निर्दिष्ट हैं और इस प्रकार [[बर्कले सॉफ्टवेयर वितरण]] कर्नेल या [[IBM AIX]] में भी मौजूद हैं, कुछ Linux कर्नेल API के लिए अद्वितीय हैं।


[[FreeBSD]], [[NetBSD]], [[OpenBSD]], [[DragonFly BSD]], आदि कम से कम इन सिस्टम कॉल्स के माध्यम से जीरो-कॉपी का समर्थन करते हैं:
[[FreeBSD]], [[NetBSD]], [[OpenBSD]], [[DragonFly BSD]], आदि कम से कम इन सिस्टम कॉल्स के माध्यम से शून्य-प्रतिलिपि का समर्थन करते हैं:
* लेख्यपत्र भेज दें;<ref name="freebsd_sendfile" />* लिखना,<ref name="freebsd_write" />राईटव <ref name="freebsd_writev" />+ एमएमएपी <ref name="freebsd_mmap" />नेटवर्क सॉकेट में डेटा लिखते समय।
* लेख्यपत्र भेज दें;<ref name="freebsd_sendfile" />* लिखना,<ref name="freebsd_write" />राईटव <ref name="freebsd_writev" />+ एमएमएपी <ref name="freebsd_mmap" />नेटवर्क सॉकेट में डेटा लिखते समय।


Line 52: Line 51:
[[ जावा (प्रोग्रामिंग भाषा) | जावा (प्रोग्रामिंग भाषा)]] इनपुट स्ट्रीम java.nio.channels.FileChannel's transferTo() विधि के माध्यम से शून्य-कॉपी का समर्थन कर सकती है यदि अंतर्निहित ऑपरेटिंग सिस्टम भी शून्य कॉपी का समर्थन करता है।<ref name="IBM_Java" />
[[ जावा (प्रोग्रामिंग भाषा) | जावा (प्रोग्रामिंग भाषा)]] इनपुट स्ट्रीम java.nio.channels.FileChannel's transferTo() विधि के माध्यम से शून्य-कॉपी का समर्थन कर सकती है यदि अंतर्निहित ऑपरेटिंग सिस्टम भी शून्य कॉपी का समर्थन करता है।<ref name="IBM_Java" />


[[रिमोट डायरेक्ट मेमोरी एक्सेस]] (रिमोट डायरेक्ट मेमोरी एक्सेस) प्रोटोकॉल जीरो-कॉपी तकनीकों पर गहराई से भरोसा करते हैं।
[[रिमोट डायरेक्ट मेमोरी एक्सेस]] (रिमोट डायरेक्ट मेमोरी एक्सेस) प्रोटोकॉल शून्य-प्रतिलिपि तकनीकों पर गहराई से भरोसा करते हैं।


== यह भी देखें ==
== यह भी देखें ==
* [[ एएफ पीडीपी ]]
* [[ एएफ पीडीपी ]]
* [[संदर्भ द्वारा कॉल करें]]
* [[संदर्भ द्वारा कॉल करें]]
* डिवाइस ड्राइवर
* उपकरण ड्राइवर
* [[अंतः स्थापित प्रणाली]]
* [[अंतः स्थापित प्रणाली]]
* [[इन्फिनिबैंड]]
* [[इन्फिनिबैंड]]

Revision as of 22:01, 26 June 2023

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

सिद्धांत

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

सामान्यतः जब किसी उपयोगकर्ता स्पेस प्रक्रिया को अपने उच्च स्तरीय सॉफ़्टवेयर इंटरफ़ेस के माध्यम से किसी उपकरण (अथार्त डिस्क, एनआईसी इत्यादि) से डेटा पढ़ना या लिखना या एक उपकरण से दूसरे उपकरण में डेटा ले जाना आदि जैसे सिस्टम संचालन निष्पादित करना होता है। इसे एक या अधिक सिस्टम कॉल निष्पादित करनी होती है जिन्हें ऑपरेटिंग सिस्टम द्वारा कर्नेल स्पेस में निष्पादित किया जाता है।

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

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

एक उदाहरण के रूप में, फ़ाइल को पढ़ने और फिर इसे नेटवर्क पर पारंपरिक तरीके से भेजने के लिए 2 अतिरिक्त डेटा प्रतियों की आवश्यकता होती है (कर्नेल से उपयोगकर्ता स्थान पर पढ़ने के लिए + 1 उपयोगकर्ता से कर्नेल स्थान पर लिखने के लिए) और प्रति पढ़ने/लिखने के चक्र में 4 संदर्भ स्विच . वे अतिरिक्त डेटा प्रतियां CPU का उपयोग करती हैं। उस फ़ाइल को फ़ाइल डेटा के एमएमएपी और राइट कॉल के चक्र का उपयोग करके भेजना, संदर्भ स्विच को प्रति राइट कॉल 2 तक कम कर देता है और उन पिछली 2 अतिरिक्त उपयोगकर्ता डेटा प्रतियों से बचता है। ही फाइल को जीरो कॉपी के जरिए भेजने से संदर्भ स्विच 2 प्रति सेंडफाइल कॉल में कम हो जाता है और सभी सीपीयू अतिरिक्त डेटा प्रतियां (उपयोगकर्ता और कर्नेल स्थान दोनों में) समाप्त हो जाती हैं।[1][2][3][4]

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

हार्डवेयर कार्यान्वयन

एक प्रारंभिक कार्यान्वयन IBM OS/360 था जहां प्रोग्राम चैनल I/O को फ़ाइल या उपकरण से डेटा के ब्लॉक को डेटा बफर में पढ़ने और डेटा को स्थानांतरित किए बिना उसी बफर से दूसरे को लिखने का निर्देश दे सकता है।

शून्य-प्रतिलिपि सॉफ़्टवेयर बनाने की तकनीकों में स्मृति प्रबंधन इकाई (MMU) के माध्यम से प्रत्यक्ष मेमोरी एक्सेस (DMA)-आधारित कॉपी और मेमोरी-मैपिंग का उपयोग शामिल है। इन सुविधाओं के लिए विशिष्ट हार्डवेयर समर्थन की आवश्यकता होती है और सामान्यतः विशेष मेमोरी संरेखण आवश्यकताओं को शामिल किया जाता है।

विषम प्रणाली वास्तुकला (HSA) द्वारा उपयोग किया जाने वाला नया दृष्टिकोण सेंट्रल प्रोसेसिंग यूनिट और ग्राफ़िक्स प्रोसेसिंग युनिट और अन्य प्रोसेसर के बीच सूचक (कंप्यूटर प्रोग्रामिंग) को पास करने की सुविधा प्रदान करता है। इसके लिए CPU और GPU के लिए समान मेमोरी एक्सेस की आवश्यकता होती है।[5][6]


प्रोग्राम इंटरफेस

कई ऑपरेटिंग सिस्टम विशिष्ट एपीआई के माध्यम से उपयोगकर्ता डेटा और फ़ाइल सामग्री की शून्य-प्रतिलिपि का समर्थन करते हैं।

यहां सबसे लोकप्रिय ओएस में उपलब्ध कुछ प्रसिद्ध सिस्टम कॉल/एपीआई सूचीबद्ध हैं।

नोवेल नेटवेयर इवेंट कंट्रोल ब्लॉक्स (ईसीबी) के माध्यम से शून्य-प्रतिलिपि के फार्म का समर्थन करता है, एनसीओपीवाई देखें।

DR-DOS के कुछ संस्करणों में आंतरिक DOS कमांड COPY (DOS कमांड) कमांड 1992 से जब COMMAND.COM यह पता लगाता है कि प्रतिलिपि की जाने वाली फ़ाइलें नेटवेयर फ़ाइल सर्वर पर संग्रहीत हैं, तो यह इसे भी आरंभ करता है,[7]अन्यथा यह सामान्य फ़ाइल प्रतिलिपि पर वापस आ जाता है। DR DOS 6.0 (1991) और MS-DOS 6.0 (1993) के बाद से बाहरी DOS कमांड MOVE (DOS कमांड) कमांड आंतरिक रूप से RENAME (DOS कमांड) करता है (जिसके कारण फ़ाइल सिस्टम में केवल निर्देशिका प्रविष्टि को भौतिक रूप से कॉपी करने के बजाय संशोधित किया जा सकता है) फ़ाइल डेटा) जब स्रोत और गंतव्य ही लॉजिकल वॉल्यूम पर स्थित होते हैं।[8]

लिनक्स कर्नेल विभिन्न सिस्टम कॉल्स के माध्यम से शून्य-प्रतिलिपि का समर्थन करता है, जैसे:

  • सेंडफाइल, सेंडफाइल64;[9]* ब्याह (सिस्टम कॉल);[10]* टी;[11]* वीएमएसप्लिस;[12]* प्रक्रिया_vm_readv;[13]* प्रोसेस_वीएम_राइटव;[14]* कॉपी_फाइल_रेंज;[15]* पैकेट mmap के साथ कच्चे सॉकेट[16]या एक्सप्रेस डेटा पाथ#AF XDP|AF_XDP.

उनमें से कुछ POSIX में निर्दिष्ट हैं और इस प्रकार बर्कले सॉफ्टवेयर वितरण कर्नेल या IBM AIX में भी मौजूद हैं, कुछ Linux कर्नेल API के लिए अद्वितीय हैं।

FreeBSD, NetBSD, OpenBSD, DragonFly BSD, आदि कम से कम इन सिस्टम कॉल्स के माध्यम से शून्य-प्रतिलिपि का समर्थन करते हैं:

  • लेख्यपत्र भेज दें;[17]* लिखना,[18]राईटव [19]+ एमएमएपी [20]नेटवर्क सॉकेट में डेटा लिखते समय।

MacOS को कर्नेल के FreeBSD भाग के माध्यम से शून्य-प्रतिलिपि का समर्थन करना चाहिए क्योंकि यह समान सिस्टम कॉल प्रदान करता है (और इसके मैनुअल पृष्ठ अभी भी BSD टैग किए गए हैं) जैसे:

  • लेख्यपत्र भेज दें।[21]

Oracle Solaris कम से कम इन सिस्टम कॉल के माध्यम से शून्य-प्रतिलिपि का समर्थन करता है:

  • लेख्यपत्र भेज दें;[22]* सेंडफाइलव;[23]* लिखना,[24]राईटव [25]+ एमएमएपी।[26]

Microsoft Windows कम से कम इस सिस्टम कॉल के माध्यम से शून्य-प्रतिलिपि का समर्थन करता है:

  • ट्रांसमिटफाइल।[27]

जावा (प्रोग्रामिंग भाषा) इनपुट स्ट्रीम java.nio.channels.FileChannel's transferTo() विधि के माध्यम से शून्य-कॉपी का समर्थन कर सकती है यदि अंतर्निहित ऑपरेटिंग सिस्टम भी शून्य कॉपी का समर्थन करता है।[28]

रिमोट डायरेक्ट मेमोरी एक्सेस (रिमोट डायरेक्ट मेमोरी एक्सेस) प्रोटोकॉल शून्य-प्रतिलिपि तकनीकों पर गहराई से भरोसा करते हैं।

यह भी देखें

संदर्भ

  1. 1.0 1.1 Stancevic, Dragan (2003-01-01). "Zero Copy I: User-Mode Perspective". www.linuxjournal.com (in English). Retrieved 2021-10-14.
  2. 2.0 2.1 Bröse, Eduard (2012-01-01). "ZeroCopy: Techniques, Benefits and Pitfalls" (in English). CiteSeerX 10.1.1.93.9589. {{cite journal}}: Cite journal requires |journal= (help)
  3. 3.0 3.1 Song, Jia; Alves-Foss, Jim (2012-01-01). "Performance Review of Zero Copy Techniques" (PDF). www.uidaho.edu (in English). Retrieved 2021-10-14.
  4. 4.0 4.1 Baldwin, John (2020-05-01). "TLS offload in the kernel" (PDF). freebsdfoundation.org (in English). Retrieved 2021-10-14.
  5. "The programmer's guide to the APU galaxy" (PDF).
  6. "AMD Outlines HSA Roadmap: Unified Memory for CPU/GPU". 2012-02-02.
  7. "Caldera OpenDOS Machine Readable Source Kit (M.R.S) 7.01". Caldera, Inc. 1997-05-01. Archived from the original on 2021-08-07. Retrieved 2022-01-02. [1] (NB. Actually implemented since DR DOS "Panther" on 1992-06-22, see COMCPY.C/DOSIF.ASM in the COMMAND.COM sources of OpenDOS 7.01.)
  8. Paul, Matthias R. (1997-07-30) [1994-05-01]. "II.4. Undokumentierte Eigenschaften externer Kommandos: MOVE.EXE". NWDOS-TIPs — Tips & Tricks rund um Novell DOS 7, mit Blick auf undokumentierte Details, Bugs und Workarounds. Archived from the original on 2017-09-10. Retrieved 2014-08-06. {{cite book}}: |work= ignored (help) (NB. NWDOSTIP.TXT is a comprehensive work on Novell DOS 7 and OpenDOS 7.01, including the description of many undocumented features and internals. It is part of the author's yet larger MPDOSTIP.ZIP collection maintained up to 2001 and distributed on many sites at the time. The provided link points to a HTML-converted older version of the NWDOSTIP.TXT file.) [2]
  9. "sendfile(2) - Linux manual page". man7.org (in English). 2021-03-22. Retrieved 2021-10-13.
  10. "splice(2) - Linux manual page". man7.org (in English). 2021-03-22. Retrieved 2021-10-13.
  11. "tee(2) - Linux manual page". man7.org (in English). 2021-03-22. Retrieved 2021-10-13.
  12. "vmsplice(2) - Linux manual page". man7.org (in English). 2021-03-22. Retrieved 2021-10-13.
  13. "process_vm_readv(2) - Linux manual page". man7.org (in English). 2021-03-22. Retrieved 2021-10-13.
  14. "process_vm_writev(2) - Linux manual page". man7.org (in English). 2021-03-22. Retrieved 2021-10-13.
  15. "copy_file_range(2) - Linux manual page". man7.org (in English). 2021-03-22. Retrieved 2021-10-13.
  16. "Linux PACKET_MMAP documentation". kernel.org.
  17. "sendfile(2) - FreeBSD manual pages". www.freebsd.org (in English). 2020-04-30. Retrieved 2021-10-13.
  18. "write(2) - FreeBSD manual pages". www.freebsd.org (in English). 2020-04-30. Retrieved 2021-10-13.
  19. "writev(2) - FreeBSD manual pages". www.freebsd.org (in English). 2020-04-30. Retrieved 2021-10-13.
  20. "mmap(2) - FreeBSD manual pages". www.freebsd.org (in English). 2020-04-30. Retrieved 2021-10-13.
  21. "sendfile(2) - Mac OS X Manual Page". developer.apple.com (in English). 2006-03-31. Retrieved 2021-10-13.
  22. "sendfile(3C) - Solaris manual pages". docs.oracle.com (in English). 2021-08-13. Retrieved 2021-10-13.
  23. "sendfilev(3C) - Solaris manual pages". docs.oracle.com (in English). 2021-08-13. Retrieved 2021-10-13.
  24. "write(2) - Solaris manual pages". docs.oracle.com (in English). 2021-08-13. Retrieved 2021-10-13.
  25. "writev(2) - Solaris manual pages". docs.oracle.com (in English). 2021-08-13. Retrieved 2021-10-13.
  26. "mmap(2) - Solaris manual pages". docs.oracle.com (in English). 2021-08-13. Retrieved 2021-10-13.
  27. "TransmitFile function (Win32)". docs.microsoft.com (in English). 2021-05-10. Retrieved 2021-10-13.
  28. Palaniappan, Sathish K.; Nagaraja, Pramod B. (2008-09-02). "Java zero-copy". developer.ibm.com (in English). Retrieved 2021-10-13.