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

From Vigyanwiki
No edit summary
No edit summary
 
(5 intermediate revisions by 3 users not shown)
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" />


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


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


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


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


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


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


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


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


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




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


[[DR-DOS]] के कुछ संस्करणों में आंतरिक DOS कमांड COPY (DOS कमांड) कमांड 1992 से जब COMMAND.COM यह पता लगाता है कि प्रतिलिपि की जाने वाली फ़ाइलें नेटवेयर फ़ाइल सर्वर पर संग्रहीत हैं, तो यह इसे भी आरंभ करता है,<ref name="Caldera_1997_DOSSRC" />अन्यथा यह सामान्य फ़ाइल प्रतिलिपि पर वापस आ जाता है।
[[DR-DOS|डीआर-डॉस]] के कुछ संस्करणों में आंतरिक डॉस कमांड कॉपी (डॉस कमांड) कमांड 1992 से जब कमांड .कॉम यह पता लगाता है कि प्रतिलिपि की जाने वाली फ़ाइलें नेटवेयर फ़ाइल सर्वर पर संग्रहीत हैं, तो यह इसे भी आरंभ करता है,<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" />
 
डीआर डॉस 6.0 (1991) और एमएस-डॉस 6.0 (1993) के बाद से बाहरी डॉस कमांड मूव (डॉस कमांड) कमांड आंतरिक रूप से रीनेम (डॉस कमांड) करता है (जिसके कारण फ़ाइल सिस्टम में केवल [[निर्देशिका प्रविष्टि]] को भौतिक रूप से कॉपी करने के अतिरिक्त संशोधित किया जा सकता है) फ़ाइल डेटा) जब स्रोत और गंतव्य ही लॉजिकल वॉल्यूम पर स्थित होते हैं।<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" />
*प्रक्रिया_वीएम_रीडव् ;<ref name="man_process_vm_readv" />
*प्रोसेस_वीएम_राइटव;<ref name="man7_process_vm_writev" />
*कॉपी_फाइल_रेंज;<ref name="man7_copy_file_range" />
*पैकेट [[mmap|एमएमएपी]]<ref name="kernel_PACKET_MMAP" /> या एएफ_एक्सडीपी के साथ कच्चे सॉकेट।


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


[[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" /> [18] राइटव <ref name="freebsd_writev" />+ एमएमएपी <ref name="freebsd_mmap" />


[[MacOS]] को कर्नेल के FreeBSD भाग के माध्यम से शून्य-प्रतिलिपि का समर्थन करना चाहिए क्योंकि यह समान सिस्टम कॉल प्रदान करता है (और इसके मैनुअल पृष्ठ अभी भी BSD टैग किए गए हैं) जैसे:
[[MacOS|मैक ओएस]] को कर्नेल के फ्रीबीएसडी भाग के माध्यम से शून्य-प्रतिलिपि का समर्थन करना चाहिए क्योंकि यह समान सिस्टम कॉल प्रदान करता है (और इसके मैनुअल पृष्ठ अभी भी बीएसडी टैग किए गए हैं) जैसे:
* लेख्यपत्र भेज दें।<ref name="Apple_sendfile" />
* सेंडफाइल।<ref name="Apple_sendfile" />


[[Oracle Solaris]] कम से कम इन सिस्टम कॉल के माध्यम से शून्य-प्रतिलिपि का समर्थन करता है:
[[Oracle Solaris|ओरेकल सोलारिस]] कम से कम इन सिस्टम कॉल के माध्यम से शून्य-प्रतिलिपि का समर्थन करता है:
* लेख्यपत्र भेज दें;<ref name="Oracle_sendfile" />* सेंडफाइलव;<ref name="Oracle_sendfilev" />* लिखना,<ref name="Oracle_write" />राईटव <ref name="Oracle_writev" />+ एमएमएपी।<ref name="Oracle_mmap" />
* सेंडफाइल;<ref name="Oracle_sendfile" />
*सेंडफाइलव;<ref name="Oracle_sendfilev" />
*लिखना,<ref name="Oracle_write" />राईटव <ref name="Oracle_writev" />+ एमएमएपी।<ref name="Oracle_mmap" />


[[Microsoft Windows]] कम से कम इस सिस्टम कॉल के माध्यम से शून्य-प्रतिलिपि का समर्थन करता है:
[[Microsoft Windows|माइक्रोसॉफ़्ट विंडोज़]] कम से कम इस सिस्टम कॉल के माध्यम से शून्य-प्रतिलिपि का समर्थन करता है:
* ट्रांसमिटफाइल।<ref name="microsoft_TransmitFile" />
* ट्रांसमिटफाइल।<ref name="microsoft_TransmitFile" />


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


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


== यह भी देखें ==
== यह भी देखें ==
* [[ एएफ पीडीपी ]]
* [[ एएफ पीडीपी | एएफ एक्सडीपी]]
* [[संदर्भ द्वारा कॉल करें]]
* [[संदर्भ द्वारा कॉल करें]]
* उपकरण ड्राइवर
* उपकरण ड्राइवर
Line 61: Line 71:
* [[संदर्भ का स्थान]]
* [[संदर्भ का स्थान]]
* एनसीओपीवाई
* एनसीओपीवाई
* [[netsniff-एनजी]]
* [[netsniff-एनजी|नेटस्निफ़ -एनजी]]
* क्रमादेशित इनपुट / आउटपुट
* क्रमादेशित इनपुट / आउटपुट
* [[सॉकेट डायरेक्ट प्रोटोकॉल]]
* [[सॉकेट डायरेक्ट प्रोटोकॉल]]
* स्कैटर/इकट्ठा I/O
* स्कैटर/गैदर I/O


== संदर्भ ==
== संदर्भ ==
Line 97: Line 107:
<ref name="Paul_1997_NWDOSTIP">{{cite book |title=NWDOS-TIPs &mdash; Tips & Tricks rund um Novell DOS 7, mit Blick auf undokumentierte Details, Bugs und Workarounds |chapter=II.4. Undokumentierte Eigenschaften externer Kommandos: MOVE.EXE |work=MPDOSTIP |author-first=Matthias R. |author-last=Paul |date=1997-07-30 |orig-date=1994-05-01 |edition=3 |version=Release 157 |language=de |url=http://www.antonis.de/dos/dos-tuts/mpdostip/html/nwdostip.htm |access-date=2014-08-06 |url-status=live |archive-url=https://web.archive.org/web/20170910194752/http://www.antonis.de/dos/dos-tuts/mpdostip/html/nwdostip.htm |archive-date=2017-09-10}} (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 <code>MPDOSTIP.ZIP</code><!-- still named TIPS_MP.ZIP between 1991 and 1996-11 --> 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 <code>NWDOSTIP.TXT</code> file.) [https://web.archive.org/web/20190601152204/https://www.sac.sk/download/text/mpdostip.zip<!-- A yet older version 155 from 1997-05-13 of the 1997-07-15 distribution archive. -->]</ref>
<ref name="Paul_1997_NWDOSTIP">{{cite book |title=NWDOS-TIPs &mdash; Tips & Tricks rund um Novell DOS 7, mit Blick auf undokumentierte Details, Bugs und Workarounds |chapter=II.4. Undokumentierte Eigenschaften externer Kommandos: MOVE.EXE |work=MPDOSTIP |author-first=Matthias R. |author-last=Paul |date=1997-07-30 |orig-date=1994-05-01 |edition=3 |version=Release 157 |language=de |url=http://www.antonis.de/dos/dos-tuts/mpdostip/html/nwdostip.htm |access-date=2014-08-06 |url-status=live |archive-url=https://web.archive.org/web/20170910194752/http://www.antonis.de/dos/dos-tuts/mpdostip/html/nwdostip.htm |archive-date=2017-09-10}} (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 <code>MPDOSTIP.ZIP</code><!-- still named TIPS_MP.ZIP between 1991 and 1996-11 --> 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 <code>NWDOSTIP.TXT</code> file.) [https://web.archive.org/web/20190601152204/https://www.sac.sk/download/text/mpdostip.zip<!-- A yet older version 155 from 1997-05-13 of the 1997-07-15 distribution archive. -->]</ref>
}}
}}
[[Category: सॉफ्टवेयर अनुकूलन]]


[[Category: Machine Translated Page]]
[[Category:CS1 Deutsch-language sources (de)]]
[[Category:CS1 English-language sources (en)]]
[[Category:CS1 errors]]
[[Category:Created On 16/06/2023]]
[[Category:Created On 16/06/2023]]
[[Category:Machine Translated Page]]
[[Category:Pages with script errors]]
[[Category:Templates Vigyan Ready]]
[[Category:सॉफ्टवेयर अनुकूलन]]

Latest revision as of 19:01, 3 July 2023

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

सिद्धांत

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

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

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

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

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

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

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

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

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

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


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

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

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

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

डीआर-डॉस के कुछ संस्करणों में आंतरिक डॉस कमांड कॉपी (डॉस कमांड) कमांड 1992 से जब कमांड .कॉम यह पता लगाता है कि प्रतिलिपि की जाने वाली फ़ाइलें नेटवेयर फ़ाइल सर्वर पर संग्रहीत हैं, तो यह इसे भी आरंभ करता है,[7]अन्यथा यह सामान्य फ़ाइल प्रतिलिपि पर वापस आ जाता है।

डीआर डॉस 6.0 (1991) और एमएस-डॉस 6.0 (1993) के बाद से बाहरी डॉस कमांड मूव (डॉस कमांड) कमांड आंतरिक रूप से रीनेम (डॉस कमांड) करता है (जिसके कारण फ़ाइल सिस्टम में केवल निर्देशिका प्रविष्टि को भौतिक रूप से कॉपी करने के अतिरिक्त संशोधित किया जा सकता है) फ़ाइल डेटा) जब स्रोत और गंतव्य ही लॉजिकल वॉल्यूम पर स्थित होते हैं।[8]

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

उनमें से कुछ पॉज़िक्स में निर्दिष्ट हैं और इस प्रकार बर्कले सॉफ्टवेयर वितरण कर्नेल या आईबीएम एईएक्स में भी उपस्थित हैं, कुछ लिनक्स कर्नेल एपीआई के लिए अद्वितीय हैं।

फ्रीबीएसडी, नेटबीएसडी, ओपनबीएसडी, ड्रैगनफ्लाई बीएसडी, आदि कम से कम इन सिस्टम कॉल्स के माध्यम से शून्य-प्रतिलिपि का समर्थन करते हैं:

  • नेटवर्क सॉकेट पर डेटा लिखते समय लिखें[17],[18] [18] राइटव [19]+ एमएमएपी [20]

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

  • सेंडफाइल।[21]

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

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

माइक्रोसॉफ़्ट विंडोज़ कम से कम इस सिस्टम कॉल के माध्यम से शून्य-प्रतिलिपि का समर्थन करता है:

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

जावा (प्रोग्रामिंग भाषा) इनपुट स्ट्रीम जावा.एनआईओ.चैनल.फ़ाइलचैनल स्थानांतरण() विधि के माध्यम से शून्य-कॉपी का समर्थन कर सकती है यदि अंतर्निहित ऑपरेटिंग सिस्टम भी शून्य कॉपी का समर्थन करता है।[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.