কার্নেল যেভাবেই পেজিং / ভার্চুয়াল মেমরি সমর্থন করে তবে লিনাক্স কেন অদলবদল ব্যবহার করবে?


23

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

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

আমি কেবল তখনই পাই না কেন কেন স্বাপের পার্টিশনের প্রয়োজন হয় (বা সাধারণভাবে অদলবদল করা হয়)?

বা এটি কি কেবল পরিভাষার বিষয় এবং এবং swap partition == virtual memory?


5
সাবধান! কম্পিউটার আর্কিটেকচারে "ভার্চুয়াল মেমরি" এমন একটি কৌশল, যেখানে এমএস উইন্ডোজ (ভুলভাবে আইএমও) এটিকে সংজ্ঞায়িত করেছে "ভার্চুয়াল মেমরি হ'ল আপনার কম্পিউটারের হার্ড ডিস্কের স্টোরেজ স্পেস যা উইন্ডোজ এলোমেলো অ্যাক্সেস মেমোরি (র‌্যাম) এর সাথে একযোগে ব্যবহার করে।" আই গুগল উইন্ডোজ "ভার্চুয়াল মেমরি"
করাত

উত্তর:


25

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

ইউএনআইএক্স এবং ইউএনআইএক্স-এর মতো সিস্টেমগুলি পেজ-ফাইলগুলির পরিবর্তে অদলবদলের পার্টিশনগুলিকে পছন্দ করে তা হ'ল এগুলি সামঞ্জস্যপূর্ণ হতে পারে যার ফলস্বরূপ একটি পৃষ্ঠা-ফাইলের তুলনায় কম অনুসন্ধানের ফলস্বরূপ।


6
এবং এইভাবে লিনাক্স ইনস্টলেশনগুলির মধ্যে একটি একক অদলবদল ভাগ করা আরও সহজ।
oKtosiTe

3
সাধারণত প্রথম
পৃষ্ঠায়

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

1
"অদলবদল বিভাজন ভার্চুয়াল মেমরি হিসাবে ব্যবহৃত হয়।" - শুধুমাত্র মাইক্রোসফ্ট উইন্ডোজ গৌণ স্টোরেজকে (যেমন ডিস্কে পৃষ্ঠা ফাইল) "ভার্চুয়াল মেমরি" হিসাবে সংজ্ঞায়িত করে। এমনকি তারা এই ব্যবহার থেকে সরে যাওয়ার চেষ্টা করছে। গুগল উইন্ডোজ "ভার্চুয়াল মেমরি" ব্যবহার করে দেখুন এবং প্রথম ফলাফলের জন্য সংক্ষেপ ("ভার্চুয়াল মেমরি স্টোরেজ স্পেস ...") পৃষ্ঠাগুলির সাথে মেলে না। একটি সঠিক বিবৃতিটি হ'ল ভার্চুয়াল মেমোরি দ্বারা অদলবদল বিভাজন ব্যবহৃত হয়
কাঠের

14

আমি জানি না আপনি কোথায় এই ধারণাটি পেয়েছিলেন যে "অদলবদল করার অর্থ, কোনও প্রক্রিয়া সম্পূর্ণ শারীরিক স্মৃতিতে বা হার্ড ড্রাইভে রয়েছে"। সেই অর্থ কয়েক দশক ধরে ব্যবহৃত হয়নি। উইকিপিডিয়া উদ্ধৃত :

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

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

পেজিং এই জেনেরিক প্রক্রিয়া বোঝায়। সোয়াপিং swap 'র এলাকা (একটি swap পার্টিশন বা সোয়াপ ফাইল): কেস যেখানে অন ডিস্ক তথ্য একটি ডেডিকেটেড এলাকায় বোঝায়। পেজিংটি র‌্যাম এবং একটি ফাইলের মধ্যেও করা যেতে পারে এবং এক্ষেত্রে এটি অদলবদল হিসাবে সাধারণত দেখা যায় না । উদাহরণস্বরূপ, আপনি যখন কোনও প্রোগ্রাম সম্পাদন করেন, কোডটি কার্যকর করতে মেমরিটিতে লোড করতে হয়; অন্য কোনও কিছুর জন্য যদি কোনও কোড পৃষ্ঠা র‌্যাম থেকে উচ্ছেদ করতে হয়, তবে এই পৃষ্ঠাটি অদলবদলে লেখার দরকার নেই, কারণ এটি প্রোগ্রাম ফাইল থেকে আবার লোড করা যায়। (এটি কেবল প্রোগ্রাম কোড নয়, কেবলমাত্র সমস্ত পঠনযোগ্য ডেটার জন্যই করা যেতে পারে))

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


আপনার উত্তরের প্রথম অনুচ্ছেদটি তাকে বলে যে সে ধারণাটি পেয়েছিল: পুরানো নথি। (আমার মনে আছে যখন অদলবদল এবং পেজিংয়ের মধ্যেও
তফাত ছিল

9

ভার্চুয়াল মেমরি / পেজিং সুবিধা কার্নেলটিকে ব্যবহারকারী স্পেস প্রক্রিয়াগুলিতে মেমরির "ভার্চুয়ালাইজ" করতে দেয়। কার্নেল পৃষ্ঠাগুলি শারীরিক স্মৃতি থেকে নিতে পারে এবং সেগুলি পেজিংয়ের মাধ্যমে সাজিয়ে তুলতে পারে যাতে তারা কোনও ব্যবহারকারীর প্রক্রিয়াতে সামঞ্জস্যপূর্ণ হয়।

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

সাধারণত ইউজারস্পেস প্রোগ্রামগুলি সুস্পষ্ট সংজ্ঞাযুক্ত ইন্টারফেসের মাধ্যমে কর্নেলকে এই সীমাটি বাড়িয়ে দিতে বলে (সি ফাংশন দ্বারা ডাকা হয় malloc()এবং free()উদাহরণস্বরূপ))। কোনও প্রোগ্রাম কত এবং কী মেমোরি বরাদ্দ করা হয় তার উপর নজর রাখার জন্য কার্নেল দায়বদ্ধ।

এই "পৃষ্ঠার ত্রুটি" প্রক্রিয়াটি কার্নেলটি পৃষ্ঠাটি ডিস্ক থেকে কোনওটির সাথে অ্যাক্সেস করার চেষ্টা করছে এমন পৃষ্ঠার অদলবদল করতে দেয়, যদি কার্নেল যদি ওভারপ্রোভিশন মেমরির সক্ষম হয় (এবং উইন্ডোজ এবং লিনাক্স উভয়ই এটি সমর্থন করে) সুতরাং এটিকে স্ব্যাপিং বলা হয় is যদি মেমরির অ্যাক্সেসটি সত্যই অবৈধ ছিল (যেমন প্রক্রিয়াটি মেমোরিটি অ্যাক্সেস করার চেষ্টা করছে যা এটি প্রথমে জিজ্ঞাসা করে না) তবে সাধারণত প্রক্রিয়াটি একটি এসএসইএসজিভি দিয়ে হত্যা করা হবে।

সুতরাং "অদলবদল" একটি অতিরিক্ত বৈশিষ্ট্য (লিনাক্সে আপনি আসলে এটি সম্পূর্ণরূপে নিষ্ক্রিয় করতে পারেন) যা ভার্চুয়াল মেমরি / পেজিংয়ের উপর নির্ভর করে, তবে কোনও সিপিইউতে ভার্চুয়াল মেমরি / পেজিং থাকার কারণে এটি প্রয়োজন হয় না। ধারণাটি একই নয় তবে অদলবদল অস্তিত্বের জন্য পেজিং / ভার্চুয়াল মেমরির উপর নির্ভর করে।


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

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

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


2

সাধারণভাবে অদলবদল ভার্চুয়াল মেমরির সমান নয়।

প্রসেসগুলি প্রকৃত শারীরিক মেমরির চেয়ে বেশি মেমরির প্রয়োজন হতে পারে, সুতরাং ওএস বিকাশকারীরা সিস্টেমে আরও মেমরি আছে বলে ধরে নেওয়ার সিদ্ধান্ত নিয়েছে যা "ভার্চুয়াল মেমরি" বলে।

এই ভার্চুয়াল মেমরিটি মূলত শারীরিক স্মৃতি এবং ডিস্কের একটি অংশ। লিনাক্সের ডিস্কের এই অংশটিকে "সোয়াপ" বলা হয়।

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

আপনার প্রশ্নের উত্তর দেওয়ার জন্য: লিনাক্সের কিছু পৃষ্ঠার মেমরি স্যুপ আউট করার জন্য একটি সোয়াপ পার্টিশন প্রয়োজন এবং আপনি ভার্চুয়াল মেমরির ব্যবহারের একটি পরিসংখ্যান দেখতে পাবেন vmstat:

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r  b   swpd   free   buff  cache    si   so    bi    bo   in   cs us sy id wa
2  0  35424 524560 134164 1858728    0    0    13    11   55   42  5  1 94  0
0  0  35424 526720 134164 1857872    0    0     0     0 2774 5224  7  2 91  0
1  0  35424 516328 134172 1870116    0    0     0     6 3464 6561 13  3 84  0
0  0  35424 522992 134212 1862676    0    0     0   125 4135 7135 12  4 84  1

'অদলবদল' কলামটি অদলবদল এবং পরিসংখ্যানগুলিতে দেখায়। এছাড়াও এই লিঙ্কটি ভার্চুয়াল মেমরি এবং vmstatপাশাপাশি ব্যবহারের ব্যাখ্যা দেয় ।

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