ওএস দ্বারা স্ট্যাক এবং হিপগুলির আকার কীভাবে সীমাবদ্ধ?


21

দ্রষ্টব্য : উত্তর দিতে সক্ষম হতে যদি আপনাকে একটি নির্দিষ্ট ওএস বিবেচনা করতে হয় তবে দয়া করে লিনাক্সটি বিবেচনা করুন।

আমি যখনই কোনও প্রোগ্রাম চালনা করব তখন এটি চালুর জন্য ভার্চুয়াল মেমরির স্থান দেওয়া হবে, এটির স্ট্যাকের জন্য একটি ক্ষেত্র এবং তার স্তূপের জন্য একটি with

প্রশ্ন 1 : স্ট্যাক এবং হিপগুলির স্থির আকারের সীমা রয়েছে (উদাহরণস্বরূপ, প্রতিটি 2 গিগা বাইট), বা এই সীমাটি গতিশীল, প্রোগ্রামটি সঞ্চালনের সময় মেমরির বরাদ্দ অনুযায়ী পরিবর্তন করা হয় (অর্থাত্ 4 গিগাবাইট দ্বারা ব্যবহৃত হবে) উভয়ই, সুতরাং যদি কোনও প্রোগ্রাম কেবল স্ট্যাকটি ব্যবহার করে তবে এটি 4 গিগাবাইটের সাথে স্ট্যাক রাখতে সক্ষম হবে)?

প্রশ্ন 2 : সীমাটি কীভাবে সংজ্ঞায়িত করা হয়? এটি কি মোট উপলব্ধ র‌্যাম মেমরি?

প্রশ্ন 3 : পাঠ্য (কোড) এবং ডেটা বিভাগগুলির সম্পর্কে কীভাবে সেগুলি সীমাবদ্ধ?


উত্তর:


23

দুটি পৃথক মেমরি সীমা আছে। ভার্চুয়াল মেমরি সীমা এবং শারীরিক স্মৃতি সীমা।

ভার্চুয়াল মেমরি

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

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

স্ট্যাক স্বয়ংক্রিয়ভাবে উত্থিত না হওয়ার একটি কারণ (নির্বিচারে) হ'ল বহু-থ্রেড প্রোগ্রামগুলিতে প্রতিটি থ্রেডের জন্য পৃথক স্ট্যাকের প্রয়োজন হয়, তাই তারা শেষ পর্যন্ত একে অপরের পথে চলে যায়।

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

-৪-বিট প্ল্যাটফর্মগুলিতে ভার্চুয়াল মেমরিটি 64EiB হয় এবং আপনার এটি সম্পর্কে চিন্তা করতে হবে না।

শারীরিক স্মৃতি

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

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

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


9

আমি মনে করি মেমরিটি কীভাবে ব্যবহৃত হয় তার ক্রম দিয়ে এর উত্তর দেওয়া আরও সহজ।

প্রশ্ন 3: পাঠ্য (কোড) এবং ডেটা বিভাগগুলির সম্পর্কে কীভাবে সেগুলি সীমাবদ্ধ? সংকলক দ্বারা পাঠ্য এবং ডেটা প্রস্তুত করা হয়েছে। সংকলকটির প্রয়োজনীয়তা হ'ল তারা অ্যাক্সেসযোগ্য কিনা তা নিশ্চিত করে এড্রেস স্পেসের নীচের অংশে প্যাক করুন। অ্যাক্সেসযোগ্য ঠিকানার স্থানটি হার্ডওয়্যার দ্বারা সীমাবদ্ধ থাকবে, উদাহরণস্বরূপ যদি নির্দেশ পয়েন্টার রেজিস্টারটি 32-বিট হয় তবে পাঠ্যের ঠিকানার স্থান 4 GiB হবে।

প্রশ্ন 2: সীমাটি কীভাবে সংজ্ঞায়িত করা হয়? এটি কি মোট উপলব্ধ র‌্যাম মেমরি? পাঠ্য এবং ডেটার পরে, তার উপরের অঞ্চলটি হ'ল। ভার্চুয়াল মেমরি সঙ্গে, গাদা কার্যত বৃদ্ধি করতে পারেন আপ সর্বোচ্চ অ্যাড্রেস স্পেস পাসে।

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

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

প্রতিটি প্রক্রিয়া শুরু করার জন্য গাদা (স্ট্যাক) জন্য একটি নির্ধারিত সীমা রয়েছে। এই সীমাটি রানটাইম (brk () / sbrk () ব্যবহার করে পরিবর্তন করা যেতে পারে। মূলত যা ঘটে তা যখন প্রক্রিয়াটির জন্য আরও হিপ স্পেসের প্রয়োজন হয় এবং এটি বরাদ্দকৃত স্থানের বাইরে চলে যায়, স্ট্যান্ডার্ড লাইব্রেরি ওএসকে কল জারি করবে। ওএস একটি পৃষ্ঠা বরাদ্দ করবে যা সাধারণত প্রোগ্রামটি ব্যবহারের জন্য ব্যবহারকারী লাইব্রেরি দ্বারা পরিচালিত হবে। উদাহরণস্বরূপ, যদি প্রোগ্রামটি 1 কিবি চায় তবে ওএস অতিরিক্ত 4 কিবি দেবে এবং গ্রন্থাগারটি প্রোগ্রামটিকে 1 কিবি দেবে এবং প্রোগ্রামটি পরবর্তী বারের জন্য আরও জিজ্ঞাসা করলে 3 কিবি ব্যবহারের জন্য রেখে যাবে।

বেশিরভাগ সময় লেআউটটি হবে পাঠ্য, ডেটা, হিপ (বড় হওয়া), অব্যক্ত স্থান এবং অবশেষে স্ট্যাক (বড় হওয়া)। তারা সকলেই একই ঠিকানা স্পেস ভাগ করে নেয়।

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