शून्य-प्रतिलिपि
शून्य-प्रतिलिपि कंप्यूटर संचालन का वर्णन करता है जिसमें सेंट्रल प्रोसेसिंग यूनिट डेटा को रैम क्षेत्र से दूसरे में कॉपी करने का कार्य नहीं करता है या जिसमें अनावश्यक डेटा कॉपी से बचा जाता है। यह अधिकांशतः कई समय लेने वाले कार्यों में सीपीयू चक्र और मेमोरी बैंडविड्थ को बचाने के लिए उपयोग किया जाता है, जैसे कि दूरसंचार नेटवर्क पर उच्च गति पर कम्प्यूटर फाइल को प्रसारित करते समय आदि, इस प्रकार कंप्यूटर द्वारा निष्पादित कंप्यूटर प्रोग्राम (प्रक्रिया (कंप्यूटिंग)) के प्रदर्शन में सुधार होता है।[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]
लिनक्स कर्नेल विभिन्न सिस्टम कॉल्स के माध्यम से शून्य-प्रतिलिपि का समर्थन करता है, जैसे:
- सेंडफाइल, सेंडफाइल64;[9]
- स्प्लिस (सिस्टम कॉल);[10]
- टी;[11]
- वीएमएसप्लिस;[12]
- प्रक्रिया_वीएम_रीडव् ;[13]
- प्रोसेस_वीएम_राइटव;[14]
- कॉपी_फाइल_रेंज;[15]
- पैकेट एमएमएपी[16] या एएफ_एक्सडीपी के साथ कच्चे सॉकेट।
उनमें से कुछ पॉज़िक्स में निर्दिष्ट हैं और इस प्रकार बर्कले सॉफ्टवेयर वितरण कर्नेल या आईबीएम एईएक्स में भी उपस्थित हैं, कुछ लिनक्स कर्नेल एपीआई के लिए अद्वितीय हैं।
फ्रीबीएसडी, नेटबीएसडी, ओपनबीएसडी, ड्रैगनफ्लाई बीएसडी, आदि कम से कम इन सिस्टम कॉल्स के माध्यम से शून्य-प्रतिलिपि का समर्थन करते हैं:
मैक ओएस को कर्नेल के फ्रीबीएसडी भाग के माध्यम से शून्य-प्रतिलिपि का समर्थन करना चाहिए क्योंकि यह समान सिस्टम कॉल प्रदान करता है (और इसके मैनुअल पृष्ठ अभी भी बीएसडी टैग किए गए हैं) जैसे:
- सेंडफाइल।[21]
ओरेकल सोलारिस कम से कम इन सिस्टम कॉल के माध्यम से शून्य-प्रतिलिपि का समर्थन करता है:
माइक्रोसॉफ़्ट विंडोज़ कम से कम इस सिस्टम कॉल के माध्यम से शून्य-प्रतिलिपि का समर्थन करता है:
- ट्रांसमिटफाइल।[27]
जावा (प्रोग्रामिंग भाषा) इनपुट स्ट्रीम जावा.एनआईओ.चैनल.फ़ाइलचैनल स्थानांतरण() विधि के माध्यम से शून्य-कॉपी का समर्थन कर सकती है यदि अंतर्निहित ऑपरेटिंग सिस्टम भी शून्य कॉपी का समर्थन करता है।[28]
रिमोट डायरेक्ट मेमोरी एक्सेस (रिमोट डायरेक्ट मेमोरी एक्सेस) प्रोटोकॉल जीरो-कॉपी तकनीकों पर गहराई से निर्भर करते हैं।
यह भी देखें
- एएफ एक्सडीपी
- संदर्भ द्वारा कॉल करें
- उपकरण ड्राइवर
- अंतः स्थापित प्रणाली
- इन्फिनिबैंड
- संदर्भ का स्थान
- एनसीओपीवाई
- नेटस्निफ़ -एनजी
- क्रमादेशित इनपुट / आउटपुट
- सॉकेट डायरेक्ट प्रोटोकॉल
- स्कैटर/गैदर I/O
संदर्भ
- ↑ 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.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.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.0 4.1 Baldwin, John (2020-05-01). "TLS offload in the kernel" (PDF). freebsdfoundation.org (in English). Retrieved 2021-10-14.
- ↑ "The programmer's guide to the APU galaxy" (PDF).
- ↑ "AMD Outlines HSA Roadmap: Unified Memory for CPU/GPU". 2012-02-02.
- ↑ "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.)
- ↑ 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 largerMPDOSTIP.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 theNWDOSTIP.TXT
file.) [2] - ↑ "sendfile(2) - Linux manual page". man7.org (in English). 2021-03-22. Retrieved 2021-10-13.
- ↑ "splice(2) - Linux manual page". man7.org (in English). 2021-03-22. Retrieved 2021-10-13.
- ↑ "tee(2) - Linux manual page". man7.org (in English). 2021-03-22. Retrieved 2021-10-13.
- ↑ "vmsplice(2) - Linux manual page". man7.org (in English). 2021-03-22. Retrieved 2021-10-13.
- ↑ "process_vm_readv(2) - Linux manual page". man7.org (in English). 2021-03-22. Retrieved 2021-10-13.
- ↑ "process_vm_writev(2) - Linux manual page". man7.org (in English). 2021-03-22. Retrieved 2021-10-13.
- ↑ "copy_file_range(2) - Linux manual page". man7.org (in English). 2021-03-22. Retrieved 2021-10-13.
- ↑ "Linux PACKET_MMAP documentation". kernel.org.
- ↑ "sendfile(2) - FreeBSD manual pages". www.freebsd.org (in English). 2020-04-30. Retrieved 2021-10-13.
- ↑ "write(2) - FreeBSD manual pages". www.freebsd.org (in English). 2020-04-30. Retrieved 2021-10-13.
- ↑ "writev(2) - FreeBSD manual pages". www.freebsd.org (in English). 2020-04-30. Retrieved 2021-10-13.
- ↑ "mmap(2) - FreeBSD manual pages". www.freebsd.org (in English). 2020-04-30. Retrieved 2021-10-13.
- ↑ "sendfile(2) - Mac OS X Manual Page". developer.apple.com (in English). 2006-03-31. Retrieved 2021-10-13.
- ↑ "sendfile(3C) - Solaris manual pages". docs.oracle.com (in English). 2021-08-13. Retrieved 2021-10-13.
- ↑ "sendfilev(3C) - Solaris manual pages". docs.oracle.com (in English). 2021-08-13. Retrieved 2021-10-13.
- ↑ "write(2) - Solaris manual pages". docs.oracle.com (in English). 2021-08-13. Retrieved 2021-10-13.
- ↑ "writev(2) - Solaris manual pages". docs.oracle.com (in English). 2021-08-13. Retrieved 2021-10-13.
- ↑ "mmap(2) - Solaris manual pages". docs.oracle.com (in English). 2021-08-13. Retrieved 2021-10-13.
- ↑ "TransmitFile function (Win32)". docs.microsoft.com (in English). 2021-05-10. Retrieved 2021-10-13.
- ↑ Palaniappan, Sathish K.; Nagaraja, Pramod B. (2008-09-02). "Java zero-copy". developer.ibm.com (in English). Retrieved 2021-10-13.