উইকিপিডিয়া অনুসারে (যা ভুল হতে পারে)
যখন কাঁটাচামচ () সিস্টেম কল জারি করা হয়, তখন প্যারেন্ট প্রসেসের সাথে সম্পর্কিত সমস্ত পৃষ্ঠাগুলির একটি অনুলিপি তৈরি করা হয়, শিশু প্রক্রিয়াটির জন্য ওএস দ্বারা একটি পৃথক মেমরি অবস্থানে লোড করা হয়। তবে এটি নির্দিষ্ট ক্ষেত্রে প্রয়োজন হয় না। কেস বিবেচনা করুন যখন কোনও শিশু "
exec
" সিস্টেম কল প্রয়োগ করে (যা কোনও সি প্রোগ্রামের মধ্যে থেকে কোনও এক্সিকিউটেবল ফাইল কার্যকর করতে ব্যবহৃত হয়) বা খুব শীঘ্রই প্রস্থান করেfork()
। যখন সন্তানের কেবল পিতামাতার প্রক্রিয়াটির জন্য একটি কমান্ড চালানোর জন্য প্রয়োজন হয়, তখন পিতামাতার প্রক্রিয়া পৃষ্ঠাগুলি অনুলিপি করার প্রয়োজন হয় না, যেহেতুexec
প্রক্রিয়াটির ঠিকানা স্থানটিকে কার্যকর করার আদেশের সাথে প্রতিস্থাপন করে।এই ধরনের ক্ষেত্রে, কপিরাইট অন-রাইটিং (সিওডাব্লু) নামে একটি কৌশল ব্যবহৃত হয়। এই কৌশলটির সাহায্যে, যখন কাঁটাচামচ ঘটে তখন পিতামাতার প্রক্রিয়ার পৃষ্ঠাগুলি শিশু প্রক্রিয়াটির জন্য অনুলিপি করা হয় না। পরিবর্তে, পৃষ্ঠাগুলি শিশু এবং পিতামাতার প্রক্রিয়ার মধ্যে ভাগ করা হয়। যখনই কোনও প্রক্রিয়া (পিতামাতা বা শিশু) কোনও পৃষ্ঠা সংশোধন করে, সেই প্রক্রিয়াটির জন্য একমাত্র সেই নির্দিষ্ট পৃষ্ঠার একটি পৃথক অনুলিপি তৈরি করা হয় (পিতামাতা বা শিশু) যা সম্পাদনা করে। এই প্রক্রিয়াটি তারপরে ভবিষ্যতের সমস্ত উল্লেখগুলিতে ভাগ করা পৃষ্ঠার পরিবর্তে সদ্য অনুলিপি করা পৃষ্ঠাটি ব্যবহার করবে। অন্যান্য প্রক্রিয়া (যা ভাগ করা পৃষ্ঠায় কোনও পরিবর্তন করেনি) সে পৃষ্ঠার মূল অনুলিপি ব্যবহার করে চলেছে (যা এখন আর ভাগ হয় না)। এই কৌশলটি কপিরাইট অন লিখন বলা হয় যেহেতু পৃষ্ঠাটি অনুলিপি করা হয় যখন কোনও প্রক্রিয়া এতে লেখা থাকে।
মনে হয় প্রক্রিয়াগুলির মধ্যে যখন পৃষ্ঠাটিতে লেখার চেষ্টা করা হয় তখন পৃষ্ঠার একটি নতুন অনুলিপি বরাদ্দ হয়ে সেই প্রক্রিয়াতে বরাদ্দ করা হয় যা পৃষ্ঠা ত্রুটি তৈরি করে। মূল পৃষ্ঠাটি পরে লিখনযোগ্য হিসাবে চিহ্নিত হয়।
আমার প্রশ্নটি: যদি fork()
কোনও প্রক্রিয়া ভাগ করে নেওয়া পৃষ্ঠায় লেখার চেষ্টা করার আগে একাধিকবার কল হয়ে যায় তবে কী হবে ?
pmap -XX PID
বা cat /proc/PID/smap
।