কীভাবে অনুলিপিটিতে অনুলিপি () একাধিক কাঁটাচামচ পরিচালনা করে?


23

উইকিপিডিয়া অনুসারে (যা ভুল হতে পারে)

যখন কাঁটাচামচ () সিস্টেম কল জারি করা হয়, তখন প্যারেন্ট প্রসেসের সাথে সম্পর্কিত সমস্ত পৃষ্ঠাগুলির একটি অনুলিপি তৈরি করা হয়, শিশু প্রক্রিয়াটির জন্য ওএস দ্বারা একটি পৃথক মেমরি অবস্থানে লোড করা হয়। তবে এটি নির্দিষ্ট ক্ষেত্রে প্রয়োজন হয় না। কেস বিবেচনা করুন যখন কোনও শিশু " exec" সিস্টেম কল প্রয়োগ করে (যা কোনও সি প্রোগ্রামের মধ্যে থেকে কোনও এক্সিকিউটেবল ফাইল কার্যকর করতে ব্যবহৃত হয়) বা খুব শীঘ্রই প্রস্থান করে fork()। যখন সন্তানের কেবল পিতামাতার প্রক্রিয়াটির জন্য একটি কমান্ড চালানোর জন্য প্রয়োজন হয়, তখন পিতামাতার প্রক্রিয়া পৃষ্ঠাগুলি অনুলিপি করার প্রয়োজন হয় না, যেহেতু execপ্রক্রিয়াটির ঠিকানা স্থানটিকে কার্যকর করার আদেশের সাথে প্রতিস্থাপন করে।

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

মনে হয় প্রক্রিয়াগুলির মধ্যে যখন পৃষ্ঠাটিতে লেখার চেষ্টা করা হয় তখন পৃষ্ঠার একটি নতুন অনুলিপি বরাদ্দ হয়ে সেই প্রক্রিয়াতে বরাদ্দ করা হয় যা পৃষ্ঠা ত্রুটি তৈরি করে। মূল পৃষ্ঠাটি পরে লিখনযোগ্য হিসাবে চিহ্নিত হয়।

আমার প্রশ্নটি: যদি fork()কোনও প্রক্রিয়া ভাগ করে নেওয়া পৃষ্ঠায় লেখার চেষ্টা করার আগে একাধিকবার কল হয়ে যায় তবে কী হবে ?


উইকিপিডিয়া ঠিক এই ক্ষেত্রে ঠিক আরও উচ্চ স্তরের।
দিদি কোহেন

1
হ্যাঁ, অনুলিপি অনুলিপি করা অলস, শিশু প্রক্রিয়া পৃষ্ঠাটি লেখার চেষ্টা করার সময় অনুলিপি করে। সুতরাং মূলত, একটি কাঁটাচামচ পরে, প্রায় সন্তানের স্মৃতি পিতামাতার সাথে ভাগ করা হয়। তবে যে কোনও প্রক্রিয়া তৈরি হওয়ার আগে, প্রতিটি শিশু প্রক্রিয়াটিতে এখনও কিছু ব্যক্তিগত মেমরি থাকে যা পিতামাতার বা নতুন বরাদ্দ থেকে পরিবর্তিত হয়। তার মানে এমনকি কোনও পদক্ষেপ ছাড়াই কাঁটা শিশু প্রক্রিয়াটির কিছু ব্যক্তিগত স্মৃতি রয়েছে। আমরা সঙ্গে এটি যাচাই করতে পারেন pmap -XX PIDবা cat /proc/PID/smap
যেখানে

সম্পর্কিত - "মূল পৃষ্ঠাটি পরে লেখার যোগ্য হিসাবে চিহ্নিত হয়" ", এর মালিক কে হবেন? এখানে অন্য প্রক্রিয়া কে লেখার চেষ্টা করেনি?
আদিল

এটি খুবই সুন্দর. আসুন কিন্ডারগার্টেনগুলিতে এটি শেখানো শুরু করুন
এড 22

উত্তর:


18

বিশেষ কিছু হয় না। সমস্ত প্রক্রিয়াগুলি একই পৃষ্ঠাগুলির সেট ভাগ করছে এবং যখন কোনও পৃষ্ঠা পরিবর্তন করতে চায় তখন প্রত্যেকে তার নিজস্ব কপিরাইট পেয়ে যায়।


ঠিক। মুল বক্তব্যটি হ'ল, এটি শিশু প্রক্রিয়াটি বিশেষ। এটি ভাগ করার পৃষ্ঠায় লেখার চেষ্টা করলে অনুলিপি করার কাজ করে। এটি সঠিকভাবে করা হলে পিতা-মাতা বা অন্যান্য বাচ্চাদের উভয়েরই জানা উচিত নয়।
চার্লস স্টুয়ার্ট

9
শিশু প্রক্রিয়াটি বিশেষ নয়। শিশু এবং পিতামাতার উভয় প্রসেসের কাঁটাচামচ পরে কেবল পঠনের জন্য একই সেট থাকে of যতক্ষণ এই পৃষ্ঠাগুলি সম্পর্কিত, পৃষ্ঠা হ্যান্ডলিং প্রতিসম হয়।
jlliagre

3

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

যদি আপনি প্রতিটি কাঁটাচামচ কল () কলের মধ্যে কিছু অভিভাবক কোড সম্পাদন করেন তবে ফলাফল প্রাপ্ত শিশু প্রক্রিয়াগুলি পিতামাতার দ্বারা পরিবর্তিত পৃষ্ঠাগুলির দ্বারা পৃথক হবে। অন্যদিকে, যদি পিতামাতা কেবল একাধিক কাঁটাচামচ () কলগুলি ইস্যু করে, যেমন লুপে, তবে সন্তানের প্রক্রিয়াগুলি প্রায় অভিন্ন হবে। যদি কোনও স্থানীয় লুপ ভেরিয়েবল ব্যবহার করা হয় তবে এটি প্রতিটি সন্তানের স্ট্যাকের মধ্যে পৃথক হবে।


0

যখন সিস্টেমটি কাঁটাচামচ করে, সাধারণত (এটি বাস্তবায়নের উপর নির্ভর করে) এটি পৃষ্ঠাগুলিকে কেবল পঠনযোগ্য হিসাবে চিহ্নিত করে এবং এই পৃষ্ঠাগুলির মাস্টার হিসাবে পিতামাতার প্রক্রিয়াটিকে চিহ্নিত করে।
এই পৃষ্ঠাগুলিতে লেখার চেষ্টা করার সময়, একটি পৃষ্ঠার ত্রুটি দেখা দেয় এবং ওএসগুলি পৃষ্ঠাগুলির পুরো তালিকাটি অনুলিপি করে বা কেবল পরিবর্তিত (আবার বাস্তবায়নের উপর নির্ভরশীল) অনুলিপি করে, সুতরাং লেখার প্রক্রিয়াটির একটি লিখিত অনুলিপি থাকবে।
যখন একই থেকে একাধিক প্রক্রিয়া কাঁটাচামচ করা হয়, যখন "মাস্টার" প্রক্রিয়াটি তার স্মৃতিতে লিখতে থাকে, অন্যান্য প্রক্রিয়াগুলি তাদের সমতুল্য পৃষ্ঠাগুলি অনুলিপি করে দেয়।


কোন সিস্টেম এটি করে? লিনাক্স অনুলিপি প্রয়োগের একটি অনুলিপি ব্যবহার করে
ব্রুলিওলো

এইভাবে অনুলিপি অনুলিপি কাজ করে ...
দিদি কোহেন

3
@ ডেভিডকোহেন এটি কপিরাইট অন রাইটিং এর কোনও সংস্করণে কাজ করে না যা আমি কখনও শুনেছি। কোনও "মাস্টার" প্রক্রিয়া নেই। যদি কোনও একক প্রক্রিয়া ভাগ করা পৃষ্ঠাগুলি লিখতে থাকে, তবে তার অনুলিপিটি একটি ব্যক্তিগত কোনও ব্যক্তির কাছে ঝাঁপিয়ে পড়েছে, অন্য সমস্ত প্রক্রিয়াগুলি ভাগ করে অবিরত রাখছে।
সেলেদা

1
আমি মনে করি ডেভিড কোহেন কিছুটা হলেও সঠিক। এই এক উপায় কপি-অন-লেখ বাস্তবায়ন। সংক্ষিপ্তসারটি হ'ল এই চিহ্নিতকরণের সাথে, সেই পৃষ্ঠায় লিখনটি একটি পৃষ্ঠা-ফল্ট হ্যান্ডলারকে ট্রিগার করবে যা যথাযথ পদক্ষেপ গ্রহণ করবে, অর্থাৎ অনুলিপি-অন-লিখন। দুর্ভাগ্যক্রমে এই বিশদটি (যা সিস্টেম-নির্দিষ্ট হবে) বেশিরভাগ প্রশ্নের জন্য অপ্রাসঙ্গিক। মনে রাখবেন যে CoW এর দুটি মাত্রা রয়েছে: একটি প্রক্রিয়াটিতে দৃশ্যমান এবং কার্নেল কীভাবে এটি প্রয়োগ করতে পারে তার একটি।
0xC0000022L
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.