data structures - कॉपी-ऑन-राइट क्या है?




data-structures copy-on-write (4)

मैं जानना चाहता हूं कि कॉपी-ऑन-राइट क्या है और इसके लिए क्या उपयोग किया जाता है? सन जेडीके ट्यूटोरियल्स में 'कॉपी-ऑन-राइट सरणी' शब्द का कई बार उल्लेख किया गया है लेकिन मुझे समझ में नहीं आया कि इसका क्या अर्थ है।


"लिखने पर प्रतिलिपि" का मतलब है कि यह उतना ही कम है जितना लगता है: प्रत्येक व्यक्ति के पास एक ही डेटा की एक साझा प्रतिलिपि है जब तक कि यह लिखा न जाए , और फिर एक प्रतिलिपि बनाई जाती है। आम तौर पर, समस्याओं के समेकन प्रकार को हल करने के लिए प्रतिलिपि पर प्रतिलिपि का उपयोग किया जाता है। जेएफएस में, उदाहरण के लिए, डिस्क पर डेटा ब्लॉक आवंटित प्रतिलिपि आवंटित किए जाते हैं; जब तक कोई बदलाव नहीं होता है, तब तक आप मूल ब्लॉक रखते हैं; एक बदलाव केवल प्रभावित ब्लॉक बदल गया। इसका मतलब है कि नए ब्लॉक की न्यूनतम संख्या आवंटित की जाती है।

इन परिवर्तनों को आमतौर पर लेनदेन के लिए लागू किया जाता है, यानी, उनके पास एसीआईडी ​​गुण होते हैं। यह कुछ समवर्ती मुद्दों को समाप्त करता है, क्योंकि तब आप गारंटी देते हैं कि सभी अपडेट परमाणु हैं।


बस एक और उदाहरण प्रदान करने के लिए, Mercurial क्लोनिंग स्थानीय रिपॉजिटरीज़ को वास्तव में "सस्ता" ऑपरेशन करने के लिए कॉपी-ऑन-राइट का उपयोग करता है

सिद्धांत अन्य उदाहरणों के समान है, सिवाय इसके कि आप स्मृति में वस्तुओं की बजाय भौतिक फाइलों के बारे में बात कर रहे हैं। प्रारंभ में, एक क्लोन एक डुप्लिकेट नहीं है बल्कि मूल के लिए एक कठिन लिंक है। जैसे ही आप क्लोन में फ़ाइलों को बदलते हैं, नए संस्करण का प्रतिनिधित्व करने के लिए प्रतियां लिखी जाती हैं।


मैं अपनी खुद की स्पष्टीकरण लिखने जा रहा था लेकिन यह विकिपीडिया लेख बहुत अधिक बताता है।

बुनियादी अवधारणा यहां दी गई है:

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

यहां गाय के सामान्य उपयोग का एक आवेदन भी है:

गाय अवधारणा का उपयोग माइक्रोसॉफ्ट एसक्यूएल सर्वर 2005 जैसे डेटाबेस सर्वर पर तत्काल स्नैपशॉट के रखरखाव में भी किया जाता है। तत्काल स्नैपशॉट डेटा को पूर्वरेखा करते समय डेटा की पूर्व-संशोधन प्रतिलिपि संग्रहीत करके डेटाबेस के स्थिर दृश्य को संरक्षित करते हैं। तत्काल स्नैपशॉट का उपयोग परीक्षणों या पल-निर्भर रिपोर्टों के परीक्षण के लिए किया जाता है और बैकअप को प्रतिस्थापित करने के लिए उपयोग नहीं किया जाना चाहिए।


मैं प्रतिलिपि पर एक ही जवाब दोहराना नहीं चाहूंगा। मुझे लगता है कि एंड्रयू का जवाब और चार्ली के जवाब ने इसे पहले ही स्पष्ट कर दिया है। मैं आपको ओएस दुनिया से एक उदाहरण दूंगा, बस यह उल्लेख करने के लिए कि इस अवधारणा का कितना व्यापक उपयोग किया जाता है।

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





copy-on-write