অনুলিপি কি?


133

আমি জানতে চাইব অনুলিপিটি কী এবং এর জন্য কী ব্যবহার করা হয়? 'কপিরাইট অন রাইটিং অ্যারে' শব্দটি সান জেডিকে টিউটোরিয়ালে বেশ কয়েকবার উল্লেখ করা হয়েছে তবে আমি এর অর্থ কী তা বুঝতে পারি নি।

উত্তর:


155

আমি আমার নিজের ব্যাখ্যা লিখতে যাচ্ছিলাম তবে এই উইকিপিডিয়া নিবন্ধটি এটির যথেষ্ট পরিমাণে সমষ্টি করে।

মূল ধারণাটি এখানে:

অনুলিপি (কখনও কখনও "COW" হিসাবে পরিচিত) কম্পিউটার প্রোগ্রামিংয়ে ব্যবহৃত একটি অনুকূলিতকরণ কৌশল। মৌলিক ধারণাটি হ'ল যদি একাধিক কলকারীরা প্রাথমিকভাবে অবিচ্ছেদ্য যে সংস্থানগুলির জন্য জিজ্ঞাসা করেন, আপনি তাদের একই সংস্থানটিতে পয়েন্টার দিতে পারেন। একজন কলার সম্পদটির "অনুলিপি" সংশোধন করার চেষ্টা না করা পর্যন্ত এই ফাংশনটি বজায় রাখা যেতে পারে, যার পরিবর্তে প্রত্যেকের কাছে দৃশ্যমান পরিবর্তনগুলি প্রতিরোধ করতে সত্যিকারের ব্যক্তিগত অনুলিপি তৈরি করা হয়। এই সমস্ত কলকারীদের স্বচ্ছভাবে ঘটে। প্রাথমিক সুবিধাটি হ'ল যদি কোনও কলার কখনও কোনও পরিবর্তন না করে তবে কোনও ব্যক্তিগত অনুলিপি তৈরি করার প্রয়োজন নেই।

এছাড়াও এখানে COW এর সাধারণ ব্যবহারের একটি প্রয়োগ রয়েছে:

মাইক্রোসফ্ট এসকিউএল সার্ভার ২০০৫ এর মতো ডাটাবেস সার্ভারগুলিতে তাত্ক্ষণিক স্ন্যাপশট রক্ষণাবেক্ষণে COW ধারণাটিও ব্যবহার করা হয় Inst তাত্ক্ষণিক স্ন্যাপশটগুলি ব্যবহারের জন্য বা মুহুর্ত-নির্ভর রিপোর্টগুলি পরীক্ষার জন্য ব্যবহৃত হয় এবং ব্যাকআপগুলি প্রতিস্থাপনের জন্য ব্যবহার করা উচিত নয়।


নিয়মিত অ্যারে যে কোনও কিছুর জন্য ব্যবহার করা হয় ... তবে কিছু পরিস্থিতিতে এই ধরণের কৌশলটির ফলে আরও অনুকূলিত ফলাফল পাওয়া যায়।
অ্যান্ড্রু ফ্লানাগান

3
@ হাফেজ: লিনাক্স clone()প্রয়োগ করার সময় এটি ব্যবহার করে fork()- পিতামাতার প্রক্রিয়াটির স্মৃতি শিশুর জন্য COWed হয়।
কেরেক এসবি

@hhafez কিছু ফাইল সিস্টেম, গরুর ব্যবহার যেমন, Btrfs
জেরেমিয়া

স্যান্ডবক্সআইআই কী এভাবে কাজ করে? যখন একটি স্যান্ডবক্সযুক্ত প্রোগ্রামটি কিছুতে ওভাররাইট করতে চায় স্যান্ডবক্সি ফাইল সিস্টেম অপারেশনটিকে বাধা দেয় এবং ফাইলটি স্যান্ডবক্স ফোল্ডারে অনুলিপি করে এবং প্রোগ্রামটি মূলটির পরিবর্তে স্যান্ডবক্সযুক্ত ফাইলটিতে লিখতে দেয়। এটিকে কি অনুলিপি বলা হয়?
রনি ম্যাথিউজ

একত্রীকরণটি শেষ পর্যন্ত কীভাবে ঘটে? যদি এন কপি থাকে, কোনটি শেষ পর্যন্ত ডিস্কে সেভ করার জন্য রাখা হয়?
সিম্পলগুই

59

"লেখার অনুলিপি" এর অর্থ কম বেশি যা বোঝায় তা হ'ল: প্রত্যেকের একই ডেটার লিখিত হওয়া অবধি একক ভাগ করা কপি থাকে এবং তারপরে একটি অনুলিপি তৈরি করা হয়। সাধারণত, অনুলিপি বিভিন্ন ধরণের সমস্যা সমাধানের জন্য ব্যবহৃত হয়। ইন ZFS , উদাহরণস্বরূপ, ডিস্কে ডাটা ব্লক কপি-অন-লেখ বরাদ্দ করা হয়; যতক্ষণ না কোনও পরিবর্তন নেই, আপনি মূল ব্লকগুলি রাখবেন; একটি পরিবর্তন কেবল প্রভাবিত ব্লককে পরিবর্তন করেছে। এর অর্থ নতুন ব্লকের সর্বনিম্ন সংখ্যা বরাদ্দ করা হয়েছে।

এই পরিবর্তনগুলি সাধারণত লেনদেনের জন্য প্রয়োগ করা হয় , অর্থাত্ তাদের এসিডি বৈশিষ্ট্য রয়েছে। এটি কিছু সম্মতিযুক্ত সমস্যাগুলি দূর করে, কারণ তারপরে আপনি গ্যারান্টিযুক্ত যে সমস্ত আপডেট পারমাণবিক।


1
আপনি যদি কোনও পরিবর্তন করেন তবে অন্যটি কীভাবে আপনার নতুন অনুলিপি সম্পর্কে অবহিত হবে? তারা কি ভুল ডেটা দেখতে পাবে না?
পাউডার366

12
@ পাউডার 6666। - না তারা ভুল ডেটা দেখতে পাবে না কারণ আপনি যখন কোনও পরিবর্তন আনবেন তখন একটি অনুলিপি আসলে তৈরি করা হয়। উদাহরণস্বরূপ আপনার কাছে একটি ব্লক ডেটা বলা আছে A। প্রক্রিয়া 1, 2, 3, 4প্রতিটি চান এটি একটি অনুলিপি তৈরি করুন এবং "লেখ উপর কপি করো" সিস্টেম কিছুই অনুলিপি করা হয়েছে এখনো সবকিছু এখনও পড়া হয় এটা পড়া, একটি শুরু করার A। প্রক্রিয়া এখন 3এর অনুলিপিটিতে পরিবর্তন আনতে চায় A, প্রক্রিয়াটি 3আসলে প্রকৃতপক্ষে একটি অনুলিপি Aতৈরি করবে এবং ডাকা তথ্যের একটি নতুন ব্লক তৈরি করবে B। প্রক্রিয়া 1, 2, 4এখনও ব্লক পড়ছেন Aপ্রক্রিয়া 3এখন পড়ছেন হয় B
পুডলার

1
@ পডলার 'এ' এ পরিবর্তন করা হলে কী হবে সমস্ত প্রক্রিয়া আপডেট তথ্য পড়া হবে বা পুরানো?
বিকাশকারী

3
@ ডেভেলপার: আচ্ছা, যে কোনও প্রক্রিয়াতে পরিবর্তন আনা হচ্ছে Aএমন একটি নতুন অনুলিপি তৈরি করা উচিত। যদি আপনি যদি জিজ্ঞাসা করছেন যে পুরোপুরি নতুন প্রক্রিয়াটি যদি আসে এবং পরিবর্তিত হয় Aতবে আমার ব্যাখ্যাটি সেটির জন্য যথেষ্ট বিশদে যায় না। এটি বাস্তবায়ন সুনির্দিষ্ট হবে এবং আপনি কীভাবে ফাইল-ডেটা লকিং ইত্যাদির মতো বাকি বাস্তবায়নটি কাজ করতে চান তা সম্পর্কে জ্ঞানের প্রয়োজন হবে
পুডলার

10

আমি অনুলিপি করে অনুলিপি করব না not আমি মনে করি অ্যান্ড্রুয়ের উত্তর এবং চার্লির উত্তর ইতিমধ্যে এটি খুব স্পষ্ট করে দিয়েছে। আমি আপনাকে ওএস জগতের একটি উদাহরণ দেব, কেবলমাত্র এই ধারণাটি কীভাবে ব্যবহৃত হয়েছে তা উল্লেখ করার জন্য।

আমরা ব্যবহার করতে পারি fork()বা vfork()একটি নতুন প্রক্রিয়া তৈরি করতে পারি । vfork অনুলিপি অনুলিপি অনুসরণ করে। উদাহরণস্বরূপ, ভিফোর্কের তৈরি শিশু প্রক্রিয়া পিতামাতার প্রক্রিয়াটির সাথে ডেটা এবং কোড বিভাগকে ভাগ করবে। এটি ভ্রমন সময়কে গতি দেয়। আপনি যদি vfork এর পরে এক্সিকিউট করে থাকেন তবে vfork ব্যবহার করা হবে বলে আশা করা হচ্ছে। সুতরাং ভিফোর্ক চাইল্ড প্রক্রিয়া তৈরি করবে যা ডেটা এবং কোড বিভাগটি তার পিতামাতার সাথে ভাগ করবে কিন্তু আমরা যখন এক্সিকিউটিভ কল করব তখন এটি শিশু প্রক্রিয়াটির ঠিকানার জায়গায় নতুন এক্সিকিউটেবলের চিত্র লোড করবে।


3
"vfork অনুলিপি অনুলিপি অনুসরণ করে"। এই লাইন পরিবর্তন বিবেচনা করুন। vforkমাংস ব্যবহার করে না। আসলে যদি শিশুটি কিছু লিখেন, তবে এটি অনির্ধারিত আচরণের ফলে এবং পৃষ্ঠাগুলির অনুলিপি না করার ফলে ঘটতে পারে !! আসলে, আপনি বলতে পারেন অন্যভাবে রাউন্ডটি কিছুটা সত্য। COW vforkভাগ করে নেওয়া জায়গায় কোনও কিছু সংশোধন না করা পর্যন্ত কাজ করে !
পবন মঞ্জুনাথ

পাভনের সাথে সম্পূর্ণরূপে একমত "Vfork অনুলিপি-অনুলিপি ধারণা অনুসরণ করে" লাইনগুলি সরান। এখন এক দিন, সিওডাব্লুটি কাঁটাচামচে একটি অপ্টিমাইজেশন হিসাবে ব্যবহৃত হয়, যাতে এটি ভিফোর্কের মতো কাজ করে এবং শিশু প্রক্রিয়াটির জন্য পিতামাতার ডেটাগুলির একটি অনুলিপি তৈরি না করে (যদি আমরা কেবলমাত্র শিশুটিকে "এক্সিকিউটিভ * বলে থাকি)
শেখর কুমার

7

অন্য একটি উদাহরণ দেওয়ার জন্য, মার্চুরিয়াল স্থানীয় সংগ্রহস্থলগুলিকে ক্লোনিংয়ের সত্যিকারের "সস্তা" অপারেশন করতে অনুলিপি ব্যবহার করে।

নীতিটি অন্যান্য উদাহরণগুলির মতো একই, আপনি মেমরির বস্তুগুলির পরিবর্তে শারীরিক ফাইলগুলির বিষয়ে কথা বলছেন। প্রাথমিকভাবে, একটি ক্লোনটি সদৃশ নয় তবে মূলটির একটি শক্ত লিঙ্ক । আপনি ক্লোনটিতে ফাইলগুলি পরিবর্তন করার সাথে সাথে নতুন সংস্করণ উপস্থাপনের জন্য অনুলিপিগুলি লেখা হয়।


2

আমি পিএইচপি-তে জাভাল সম্পর্কে এই ভাল নিবন্ধটি পেয়েছি , যা COW উল্লেখ করেছে:

অনুলিপি অন লেখুন ('COW' হিসাবে সংক্ষিপ্ত) স্মৃতি সংরক্ষণ করার জন্য ডিজাইন করা একটি কৌশল। এটি সফটওয়্যার ইঞ্জিনিয়ারিংয়ে বেশি ব্যবহৃত হয়। এর অর্থ হ'ল পিএইচপি মেমরিটি অনুলিপি করবে (বা নতুন মেমরি অঞ্চল বরাদ্দ দেবে) আপনি যখন কোনও প্রতীকটিতে লিখবেন, যদি এটি ইতিমধ্যে কোনও জভালকে নির্দেশ করে।


0

এটি রুবি 'এন্টারপ্রাইজ সংস্করণে' মেমরি সংরক্ষণের ঝরঝরে উপায় হিসাবে ব্যবহৃত হয়।


2
আমি মনে করি না যে তিনি এই অর্থে "ব্যবহৃত" ছিলেন।
স্পাইডন

0

একটি ভাল উদাহরণ গিট, যা ব্লবগুলি সঞ্চয় করার কৌশল ব্যবহার করে। কেন এটি হ্যাশ ব্যবহার করে? আংশিক কারণ এগুলিতে পার্থক্য সম্পাদন করা আরও সহজ, তবে এটি একটি COW কৌশলকে অনুকূল করা সহজ করে তোলে। যখন আপনি কয়েকটি ফাইলের সাথে একটি নতুন প্রতিশ্রুতিবদ্ধ করেন তখন বিশাল সংখ্যক অবজেক্ট এবং গাছের পরিবর্তন হবে না। অতএব প্রতিশ্রুতিবদ্ধ হ্যাশ রেফারেন্স দিয়ে তৈরি বিভিন্ন পয়েন্টারগুলির মাধ্যমে ইতিমধ্যে বিদ্যমান একগুচ্ছ অবজেক্ট যা পুরো ইতিহাসকে অনেক ছোট রাখার জন্য প্রয়োজনীয় স্টোরেজ স্পেস তৈরি করে।


0

এটি একটি স্মৃতি সুরক্ষা ধারণা। এই সংকলকটিতে শিশুতে ডেটা সংশোধন করার জন্য অতিরিক্ত অনুলিপি তৈরি হয় এবং এই আপডেট হওয়া ডেটা পিতামাতার ডেটাগুলিতে প্রতিবিম্বিত হয় না।


0

এখানে ডেকরেটার ডিজাইনের প্যাটার্নটি ব্যবহার করে একটি অনুলিপি (সিওডাব্লু) পাইথন বাস্তবায়ন । Valueএকটি পরিবর্তনীয় CowValueঅবজেক্টের একটি রেফারেন্স একটি পরিবর্তনীয় অবজেক্ট (সজ্জাকারী) দ্বারা অনুষ্ঠিত হয় । CowValueবস্তুর সামনে সব অপরিবর্তনীয় অনুরোধ পড়া Valueএকটি নতুন অপরিবর্তনীয় তৈরি করে বস্তু এবং বিবৃতি সব লেখার অনুরোধ Valueসঠিক রাষ্ট্রের সঙ্গে অবজেক্ট। CowValueবস্তুর অগভীর ভেরিয়েবল মধ্যে কপি করা আবশ্যক ভাগ করার অনুমতি Valueঅবজেক্ট।

import abc
import copy

class BaseValue(abc.ABC):
    @abc.abstractmethod
    def read(self):
        raise NotImplementedError
    @abc.abstractmethod
    def write(self, data):
        raise NotImplementedError

class Value(BaseValue):
    def __init__(self, data):
        self.data = data
    def read(self):
        return self.data
    def write(self, data):
        pass

class CowValue(BaseValue):
    def __init__(self, data):
        self.value = Value(data)
    def read(self):
        return self.value.read()
    def write(self, data):
        self.value = Value(data)

v = CowValue(1)
w = copy.copy(v)  # shares the immutable Value object
assert v.read() == w.read()
assert id(v.value) == id(w.value)
w.write(2)  # creates a new immutable Value object with the correct state
assert v.read() != w.read()
assert id(v.value) != id(w.value)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.