একটি প্রক্রিয়া কাঁটাচামচ যখন তার ভার্চুয়াল বা বাসিন্দা মেমরি অনুলিপি করা হয়?


12

লিনাক্সে নতুন প্রক্রিয়া তৈরি করার মানক উপায় হ'ল পিতামাতার প্রক্রিয়াটির মেমরির পদচিহ্ন অনুলিপি করা হয় এবং এটি কল না হওয়া পর্যন্ত শিশু প্রক্রিয়ার পরিবেশে পরিণত হয় execv

আমরা কোন মেমরির পদক্ষেপের কথা বলছি, ভার্চুয়াল (প্রক্রিয়াটি কী অনুরোধ করেছে) বা বাসিন্দা (আসলে কী ব্যবহৃত হচ্ছে)?

অনুপ্রেরণা: আমার কাছে সীমিত অদলবদল স্পেস সহ একটি ডিভাইস রয়েছে এবং ভার্চুয়াল এবং বাসিন্দার মেমরির পদচিহ্নের মধ্যে একটি বড় পার্থক্য সহ একটি অ্যাপ্লিকেশন রয়েছে। মেমরির অভাবের কারণে অ্যাপ্লিকেশনটি কাঁটাচামচ করতে পারে না এবং এটি দেখতে চাইবে যে ভার্চুয়াল পদচিহ্নের আকার হ্রাস করার চেষ্টা সাহায্য করবে কিনা।

উত্তর:


12

আধুনিক সিস্টেমে কোনও কাঁটাচামচ কল ব্যবহার করার কারণে মেমরির কোনও কিছুই আসলে কপি করা হয় না। এটি সমস্ত পৃষ্ঠার সারণীতে কেবলমাত্র পঠিত হিসাবে চিহ্নিত হয়েছে যে কার্নেল কোডে ট্র্যাপ লেখার প্রথম প্রয়াসটি ঘটবে। কেবল একবার লেখার প্রথম প্রক্রিয়া করার পরে অনুলিপিটি ঘটবে।

এটি অনুলিপি অনুলিপি হিসাবে পরিচিত।

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

যদি কার্নেল উপলব্ধ মেমরি + স্ব্যাপের চেয়ে বেশি প্রতিশ্রুতি দেয় তবে এটি কাঁটাচামচ কল করার চেষ্টা করে একটি ত্রুটি কোড দিতে পারে। যদি পর্যাপ্ত পরিমাণ উপলব্ধ থাকে তবে কাঁটাচামচ পরে উভয় প্রক্রিয়ার জন্য কার্নেল প্যারেন্টের সম্পূর্ণ ভার্চুয়াল আকারে প্রতিশ্রুতিবদ্ধ।


1
If enough is available the kernel will commit to the full virtual size of the parent for both processes after the fork.হ্যাঁ, আপনাকে ধন্যবাদ. এর অর্থ সীমিত মেমরির (র‌্যাম এবং স্ব্যাপ) পরিবেশে প্রক্রিয়াটির ভার্চুয়াল পদচিহ্ন হ্রাস করা কাঁটাচাঁটি করতে সক্ষম না হওয়ার বিষয়টি সমাধান করতে পারে।
TheMeaningfulEngineer

1
@ অ্যালান হ্যাঁ যদি forkঅপর্যাপ্ত মেমরি ইঙ্গিত একটি ত্রুটির বার্তা সঙ্গে ব্যর্থ। তারপরে কাঁটাচামচ করার আগে প্রক্রিয়াটির ভার্চুয়াল মেমরির ব্যবহার হ্রাস করা সাহায্য করতে পারে।
ক্যাস্পারড

5

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

সাবধান, রিপোর্ট হওয়া মেমরির পদক্ষেপগুলির কোনওটিই আপনাকে প্রক্রিয়াটি কতটা র‌্যাম ব্যবহার করছে তা বলে দেয় না। ভার্চুয়াল মেমরির সাথে অদলবদল, মেমরি ভাগ করে নেওয়া এবং অন্যান্য সমস্যার কারণে নিশ্চিতভাবে জানা অসম্ভব। মেমোরি স্পেসের কিছু অংশ ভাগ করে নেওয়া লাইব্রেরি (কোথায় সেগুলি গণনা করতে হবে?), কিছু নন-র‌্যাম মেমরি (অন্যান্য হার্ডওয়্যার ডিভাইস) বোঝায়, কিছু বর্তমানে সরিয়ে নেওয়া হয়েছে, কিছু এখনও অনুলিপি করা হয়নি (অনুলিপি-অন-লিখন) এবং শীঘ্রই. এটি পড়ুন:

https://lwn.net/Articles/642202/


5

কার্নেল সেটিংস রয়েছে

জন্য / proc / sys / vm / overcommit_memory

চমৎকার নিবন্ধ থেকে উদ্ধৃতি :

Since 2.5.30 the values are: 0 (default): as before: guess about how much  
overcommitment is reasonable, 1: never refuse any malloc(), 2: be precise 
about the overcommit - never commit a virtual address space larger than swap 
space plus a fraction overcommit_ratio of the physical memory. Here 
/proc/sys/vm/overcommit_ratio (by default 50) is another user-settable 
parameter. It is possible to set overcommit_ratio to values larger than 100. 
(See also Documentation/vm/overcommit-accounting.)

এটি কাঁটা পাশাপাশি নিয়মিত ম্যালোকের ক্ষেত্রেও প্রযোজ্য। উদাহরণস্বরূপ, আপনি যদি এটি 0 তে সেট করেন, কাঁটাচামচ লেখার অনুলিপি হবে। লেখার অনুলিপিটির অর্থ হ'ল একবার অ্যাপ্লিকেশনটি তৈরি হয়ে গেলে, এটি উভয় অনুলিপি মেমরি পৃষ্ঠাগুলি ব্যবহার করে শিশু বা আসল মেমরি পরিবর্তন শুরু করে।

বেশিরভাগ ডিস্ট্রিবিউশনে আমি জানি ওভারকমিটটি 0 হয় তবে আপনি যদি এটি 2 তে সেট করেন তবে সমস্ত মেমরি পৃষ্ঠাগুলি পুরোপুরি বাস্তব মেমরি দ্বারা সমর্থিত হবে এবং কিছু ক্ষেত্রে উচ্চ মেমরির চাপের অধীনে আরও স্থিতিশীল হবে তবে কিছু প্রোগ্রাম (আমি গিটকের মুখোমুখি হয়েছিল) যা নির্ভর করে overcommits এ ব্যর্থ হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.