कॉपी-ऑन-राइट (सीओडब्लू)

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

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

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

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

कॉपी-ऑन-राइट पेज का उपयोग लिनक्स कर्नेल के कर्नेल समान-पृष्ठ विलय|समान-पेज मर्जिंग फीचर में भी किया जाता है।

सॉफ्टवेयर में
COW का उपयोग लाइब्रेरी (कंप्यूटर साइंस), अनुप्रयोग प्रक्रिया सामग्री और सिस्टम सॉफ्ट्वेयर  कोड में भी किया जाता है।

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

कंप्यूटर स्टोरेज में
स्नैपशॉट (कंप्यूटर स्टोरेज) के लिए गाय का उपयोग अंतर्निहित तंत्र के रूप में भी किया जा सकता है, जैसे कि लॉजिकल वॉल्यूम प्रबंधन, फ़ाइल सिस्टम जैसे Btrfs और ZFS द्वारा प्रदान किया गया, और डेटाबेस सर्वर जैसे Microsoft SQL Server#Replication Services। आमतौर पर, स्नैपशॉट केवल संशोधित डेटा को संग्रहीत करते हैं, और मूल के करीब संग्रहीत होते हैं, इसलिए वे केवल वृद्धिशील बैकअप का एक कमजोर रूप हैं और पूर्ण बैकअप के लिए स्थानापन्न नहीं कर सकते हैं।

यह भी देखें

 * आवंटित-ऑन-फ्लश
 * डर्टी काउ - लिनक्स कर्नेल के लिए एक कंप्यूटर सुरक्षा भेद्यता
 * फ्लाईवेट पैटर्न
 * स्मृति प्रबंधन
 * लगातार डेटा संरचना
 * रेफ्स
 * समतलन पुराना होना