যখন আপনি সম্পর্কে কথা বলা অভ্যন্তরীণ মেমরি পুনর্বন্টন এবং বিভাজন এটি শুধু অপারেটিং সিস্টেম সম্পর্কিত একটি তাত্ত্বিক বিষয় নয়; এটি একটি অত্যন্ত বাস্তব বিষয় যা একটি কম্পিউটার, সার্ভার বা এমনকি একটি মোবাইল ডিভাইসের প্রকৃত কর্মক্ষমতাকে প্রভাবিত করে। প্রধান মেমরি কীভাবে বিভক্ত, সংরক্ষিত, সুরক্ষিত এবং পুনঃব্যবহৃত হয় তা বোঝা অত্যন্ত গুরুত্বপূর্ণ। এর মাধ্যমেই বোঝা যায় কেন একই হার্ডওয়্যার থাকা সত্ত্বেও কিছু সিস্টেম অসাধারণভাবে কাজ করে এবং অন্যগুলো হিমশিম খায়।
পরবর্তী অধ্যায়গুলোতে আমরা বিভিন্ন বিষয় নিয়ে বেশ বিস্তারিতভাবে আলোচনা করব। মেমরি বিভাজন এবং পুনর্বন্টন কৌশলসবচেয়ে সরল একক-প্রক্রিয়া সিস্টেম থেকে শুরু করে ভার্চুয়াল মেমরি, পেজিং, সেগমেন্টেশন এবং এগুলোর সমন্বয়যুক্ত উন্নত মডেল পর্যন্ত। আমরা অভ্যন্তরীণ এবং বাহ্যিক ফ্র্যাগমেন্টেশনের মতো সাধারণ সমস্যাগুলোও দেখব এবং এই সবকিছু কীভাবে বাস্তবসম্মত ডিজাইন ও ব্যবস্থাপনার সিদ্ধান্তে রূপান্তরিত হয়, তা আলোচনা করব।
স্মৃতি ব্যবস্থাপনার সংক্ষিপ্ত বিবরণ
আমরা কল্পনা করতে পারি প্রধান স্মৃতি হিসাবে একটি সংখ্যাযুক্ত বাক্সের বড় সেটযেখানে প্রতিটি সেলের একটি অ্যাড্রেস থাকে এবং এটি নির্দেশাবলী বা ডেটা সংরক্ষণ করতে পারে। একটি প্রোগ্রাম চলার জন্য, এর কোড এবং ডেটা অবশ্যই এই প্রধান মেমোরিতে (র্যাম) থাকতে হবে, যেখান থেকে প্রসেসর নির্দেশাবলী পড়বে, অপারেন্ড অ্যাক্সেস করবে এবং ফলাফল লিখবে।
এই কাজের জন্য দায়ী অপারেটিং সিস্টেম মডিউলটি হলো মেমরি ম্যানেজার বা ম্যানেজারএই ফাংশনটি নির্ধারণ করে যে প্রতিটি প্রসেসের জন্য মেমরির কোন অংশ বরাদ্দ করা হবে, প্রতিটি অঞ্চল কীভাবে সুরক্ষিত থাকবে এবং মেমরি শেষ হয়ে গেলে কী ঘটবে। যদি এই ব্যবস্থাপনা ত্রুটিপূর্ণ বা অদক্ষ হয়, তবে তার প্রভাব তাৎক্ষণিকভাবে লক্ষণীয় হয়: অপেক্ষার সময় বাড়ে, ডিস্ক অ্যাক্সেসের সংখ্যা বাড়ে এবং সামগ্রিক পারফরম্যান্সে সুস্পষ্ট অবনতি ঘটে।
কম্পিউটার সিস্টেমের বিবর্তনের সাথে সাথে বেশ কিছু প্রস্তাবনা দেওয়া হয়েছে। ক্রমান্বয়ে আরও অত্যাধুনিক মডেল মেমরি ম্যানেজমেন্ট, যা একটিমাত্র কাজ সম্পাদনের জন্য ডিজাইন করা অত্যন্ত সরল সিস্টেম থেকে শুরু করে আধুনিক ভার্চুয়াল মেমরি স্কিম পর্যন্ত বিস্তৃত, যেখানে প্রোগ্রামের কাছে মেমরির ধারণা (লজিক্যাল স্পেস) বাস্তব ভৌত স্থান থেকে সম্পূর্ণ ভিন্ন।
মৌলিক মডেল: একটিমাত্র প্রসেসের জন্য মেমরি
প্রথম দিকের কম্পিউটারগুলিতে, প্রধান মেমরি বিভক্ত ছিল দুটি বড়, স্পষ্টভাবে পৃথক এলাকাএকটি পার্টিশন অপারেটিং সিস্টেমের (যাকে প্রায়শই মনিটর বলা হতো) জন্য এবং অন্যটি একটিমাত্র ইউজার প্রোগ্রামের জন্য সংরক্ষিত ছিল। একবারে কেবল একটি প্রসেসই চলতে পারত এবং সেটির কাজ শেষ হলে নিয়ন্ত্রণ অপারেটিং সিস্টেমের কাছে ফিরে যেত, যা পরবর্তী প্রোগ্রামটি লোড করত।
এই পদ্ধতির একটি উৎকৃষ্ট উদাহরণ হলো এমএস-ডস এর প্রাথমিক সংস্করণগুলিতেএই মডেলে, অপারেটিং সিস্টেম এবং অনেক ক্ষেত্রে BIOS কোড অ্যাড্রেস স্পেসের উপরের অংশ দখল করত, এবং বাকি অংশ চলমান প্রোগ্রামের জন্য বরাদ্দ থাকত। এতে কোনো প্রকৃত মাল্টিপ্রোগ্রামিং বা জটিল ডাইনামিক রিঅ্যালোকেশন ছিল না: এটি ছিল একটি সহজ ও সরল ব্যবস্থা।
সংলগ্ন মেমরি বরাদ্দ এবং বিভাজন
যখন মাল্টিপ্রোগ্রামিং আবির্ভূত হয়, তখন এমন একটি মডেল প্রস্তাব করা হয় যেখানে প্রতিটি প্রসেসের যৌক্তিক পরিসর একটি সংলগ্ন অঞ্চল জুড়ে থাকে। ফিজিক্যাল মেমোরির। অর্থাৎ, প্রসেসের কোড, ডেটা এবং স্ট্যাক অবশ্যই পরপর ফিজিক্যাল অ্যাড্রেসে থাকতে হবে। প্রতিটি প্রসেসকে কোন সংলগ্ন অঞ্চলে রাখা হবে, তা বেছে নেওয়ার দায়িত্ব অপারেটিং সিস্টেমের এবং প্রসেসটির কাজ শেষ হলে এটি সেই ব্লকটি মুক্ত করে দেয়।
এই পদ্ধতি, যা হিসাবে পরিচিত সংলগ্ন মেমরি বরাদ্দএটি বাস্তবায়ন করা সহজ, কিন্তু এর কিছু অসুবিধাও রয়েছে। প্রসেস লোড এবং আনলোড হওয়ার সাথে সাথে বিভিন্ন আকারের খালি জায়গা তৈরি হয়, এবং এই জায়গাগুলোকে ভাগ করে পুনরায় ব্যবহার করার পদ্ধতির উপরেই বিভিন্ন পার্টিশনিং কৌশলের উদ্ভব হয়, যা আমরা নিচে দেখব।
স্থির পার্টিশন সহ মেমরি ব্যবস্থাপনা
স্থির পার্টিশন স্কিমগুলিতে, প্রধান মেমরি হল আগে থেকেই একটি নির্দিষ্ট আকারের খণ্ডে বিভক্ত করেপ্রোগ্রামগুলো কার্যকর হওয়ার আগে। এই খণ্ডাংশ বা পার্টিশনগুলোর প্রতিটি একটিমাত্র প্রসেস ধারণ করতে পারে, যদি তার যৌক্তিক আকার এর মধ্যে আঁটে।
এই পদ্ধতিটি আরও পরিচিত নির্দিষ্ট সংখ্যক টাস্ক সহ মাল্টিপ্রোগ্রামিং (MFT)একই সাথে চলতে পারে এমন প্রসেসের সর্বোচ্চ সংখ্যা পার্টিশনের সংখ্যার সমান। এটি পরিচালনা করার জন্য তুলনামূলকভাবে একটি সহজ সিস্টেম, কিন্তু এটি একটি নিরন্তর দ্বিধার সম্মুখীন হয়: মেমোরির অপচয় এড়াতে পার্টিশনের আকার কীভাবে নির্বাচন করা যায়।
প্রক্রিয়া সারি এবং কাজের সংগঠন
কাজের চাপ বিভিন্ন উপায়ে সাজানো যেতে পারে। একটি উপায় হলো প্রতিটি পার্টিশনের জন্য একটি করে কিউ বজায় রাখুনযাতে প্রসেসগুলোকে এমন পার্টিশন তালিকায় বরাদ্দ করা হয় যার আকার তাদের জন্য সবচেয়ে উপযুক্ত। আরেকটি সম্ভাবনা হলো একটি প্রস্তুত প্রসেসগুলির একক সারি এবং শিডিউলার, যখন কোনো পার্টিশন খালি হয়, তখন সাধারণ কিউ থেকে সেই প্রসেসটি বেছে নেয় যা সেখানে জায়গা করে নেয়।
মডেলের একক লেজ এটি কাঠামোকে সরল করে, কিন্তু ছোট প্রসেসগুলোর প্রতি বৈষম্যমূলক আচরণ করার প্রবণতা দেখায়: তাদের প্রয়োজনের চেয়ে অনেক বড় একটি পার্টিশন সহজেই বরাদ্দ করা হয়, যা স্থানের অপচয় ঘটায়। অপারেটিং সিস্টেম সাধারণত FIFO (ফার্স্ট ইন, ফার্স্ট আউট) নীতি অনুসরণ করে প্রসেসগুলোকে একটি উপযুক্ত পার্টিশন বরাদ্দ না করা পর্যন্ত তারা রিকোয়েস্ট কিউ থেকে বের হয় না।
স্থির বিভাজনে অভ্যন্তরীণ ও বাহ্যিক বিভাজন
এই প্রেক্ষাপটে, দুটি মূল ধারণা উঠে আসে: অভ্যন্তরীণ খণ্ডন এবং বাহ্যিক খণ্ডনঅভ্যন্তরীণ বিভাজন ঘটে যখন কোনো প্রসেসকে তার প্রয়োজনের চেয়ে অনেক বড় একটি পার্টিশন বরাদ্দ করা হয়, যার ফলে সেই পার্টিশনের অতিরিক্ত অংশ অব্যবহৃত থেকে যায় এবং অন্য কোনো প্রসেসের জন্য পুনরায় ব্যবহার করা যায় না।
তার অংশ জন্য, দী বাহ্যিক খণ্ডন এটি তখন ঘটে যখন মেমোরিতে অনেক ছোট ছোট ও বিক্ষিপ্ত খালি জায়গা থাকে, যেগুলো এতটাই ছোট যে সেগুলোর মধ্যে প্রসেস স্থাপন করা কঠিন হয়ে পড়ে। এমনকি যদি মোট খালি মেমোরির পরিমাণ যথেষ্টও হয়, তবুও তা সংলগ্ন বা সঠিকভাবে বিন্যস্ত না থাকার কারণে একটি নির্দিষ্ট আকারের নতুন প্রসেসকে জায়গা দিতে পারে না।
অর্জন a পার্টিশন আকার এবং গড় প্রক্রিয়া আকারের মধ্যে ভারসাম্য বিষয়টা জটিল। অতিরিক্ত বড় পার্টিশন ইন্টারনাল ফ্র্যাগমেন্টেশনকে উৎসাহিত করে; অন্যদিকে, অতিরিক্ত ছোট পার্টিশন প্রচুর এক্সটারনাল ফ্র্যাগমেন্টেশন তৈরি করতে পারে, কারণ সেই ফাঁকা জায়গাগুলোতে মানানসই প্রসেস খুঁজে পাওয়া কঠিন হয়ে পড়ে।
একটিমাত্র কিউ সহ একাধিক নির্দিষ্ট আকারের পার্টিশন
সংলগ্ন অ্যাসাইনমেন্ট কৌশলের সাথে একাধিক নির্দিষ্ট আকারের পার্টিশন এবং একটি একক সারিমেমরিকে নির্দিষ্ট পার্টিশনে ভাগ করা হয় এবং সমস্ত প্রসেস একটিমাত্র রিকোয়েস্ট কিউ-তে সংরক্ষিত থাকে। যখন কিউ-এর প্রথম প্রসেসটির জন্য যথেষ্ট বড় একটি খালি পার্টিশন উপলব্ধ হয়, তখন সেটিকে বরাদ্দ করে মেমরিতে লোড করা হয়।
সিস্টেমটি সাধারণত একটি ক্রম মেনে চলে। প্রসেস কিউতে FIFOএটি প্রসেসগুলোকে পরবর্তী প্রসেসে চলে যাওয়া থেকে বিরত রাখে, এমনকি যদি সেগুলো উপলব্ধ পার্টিশনের জন্য আরও উপযুক্তও হয়। যদিও এটি কর্মদক্ষতা কমাতে পারে, তবে এটি শিডিউলিংকে সহজ করে তোলে। একটি প্রসেসের এক্সিকিউশন শেষ হয়ে গেলে, এটি যে পার্টিশনে ছিল তা সম্পূর্ণরূপে ছেড়ে দেয়, ফলে সেটি অন্য একটি প্রসেসের জন্য আবার উপলব্ধ হয়ে যায়।
এই চিত্রটি স্পষ্টভাবে দেখায় যে অভ্যন্তরীণ খণ্ডনযদি কোনো প্রসেস একটি পার্টিশনের কেবলমাত্র অংশ দখল করে, তবে অবশিষ্ট স্থান অন্য কোনো প্রসেস ব্যবহার করতে পারে না। অনেক শিক্ষামূলক বাস্তবায়নে, এই অব্যবহৃত এলাকাটিকে একটি ভিন্ন রঙ (যেমন, ধূসর) দিয়ে চিহ্নিত করা হয়, যাতে প্রতিটি পার্টিশনের মধ্যে অপচয় হওয়া স্থানের পরিমাণ এক নজরে দেখা যায়।
এই মডেল সম্পর্কে প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী
এই ধরণের বিভাজন বিশদভাবে বিশ্লেষণ করলে প্রশ্ন ওঠে যে কী হবে যদি আগত প্রক্রিয়াগুলোর অধিকাংশই খুব ছোট।সেই পরিস্থিতিতে, অনেক পার্টিশন, বিশেষ করে বড় পার্টিশনগুলো, প্রচুর পরিমাণে অভ্যন্তরীণ মেমরি অপচয় করে, কারণ প্রতিটি প্রসেস বরাদ্দকৃত স্থানের একটি উল্লেখযোগ্য অংশ অব্যবহৃত রেখে দেয়।
এর বিপরীত পরিস্থিতি ঘটে যদি অধিকাংশ অ্যাপ্লিকেশনগুলো এর সাথে সঙ্গতিপূর্ণ হয় খুব বড় প্রসেস, যা বৃহত্তম পার্টিশনগুলোর আকারের কাছাকাছিএক্ষেত্রে এমন হতে পারে যে, খুব কম পার্টিশনই সেগুলোকে ধারণ করতে পারে, যা কার্যকর মাল্টিপ্রোগ্রামিংয়ের মাত্রা কমিয়ে দেয় এবং সাধারণ কিউতে অপেক্ষার সময় বাড়িয়ে দিতে পারে।
একটি সম্ভাব্য তাত্ত্বিক উন্নতি হলো বজায় রাখা পার্টিশন আকারের প্রতি একটি সারিএইভাবে, প্রসেসগুলোকে তাদের আকার অনুযায়ী দলবদ্ধ করা হয়েছিল এবং প্রতিটি প্রসেসকে তার সংশ্লিষ্ট পার্টিশনের ধরনের সাথে আরও ভালোভাবে খাপ খাওয়ানোর চেষ্টা করা হয়েছিল। এই বিন্যাস অভ্যন্তরীণ ফ্র্যাগমেন্টেশন কমাতে পারে, যদিও এটি শিডিউলিং লজিককে জটিল করে তোলে এবং কিউ ব্যবস্থাপনার ওভারহেড বাড়িয়ে দেয়।
স্থানান্তর, যৌক্তিক এবং ভৌত ঠিকানা
মেমরি বরাদ্দ এবং পুনর্বণ্টনে কিছুটা নমনীয়তা আনার জন্য, সিস্টেমগুলো ব্যবহার করতে পারে প্রক্রিয়াগুলির স্থানান্তরএর মানে হলো, মেমোরি রেফারেন্সগুলো সঠিকভাবে অনুবাদ করা থাকলে, একই প্রোগ্রাম বিভিন্ন এক্সিকিউশনে ভিন্ন ভিন্ন পার্টিশনে চলতে পারে, এমনকি একই এক্সিকিউশন চলাকালীন এটিকে এক পার্টিশন থেকে অন্য পার্টিশনে সরানোও যেতে পারে।
এই ধারণা থেকে দুটি মৌলিক ধারণা উদ্ভূত হয়: যৌক্তিক বা ভার্চুয়াল ঠিকানা, যেটি প্রোগ্রামটি ব্যবহার করে (এর অ্যাড্রেস স্পেসের শুরুর সাপেক্ষে), এবং শারীরিক ঠিকানাযা হলো প্রধান মেমরির প্রকৃত অবস্থান। এই অনুবাদটি দ্রুত সম্পন্ন করার জন্য, প্রসেসরের একটি বেস রেজিস্টার থাকে, যেখানে প্রসেসটির জন্য নির্ধারিত পার্টিশনটি যেখান থেকে শুরু হয়, সেই ভৌত ঠিকানাটি ধারণ করা থাকে।
বেস রেজিস্টার ছাড়াও, একটি আকার নির্দেশকারী রেকর্ডের সীমা পার্টিশন বা প্রসেসের অ্যাড্রেস স্পেসের। প্রতিবার যখন প্রসেসটি কোনো লজিক্যাল অ্যাড্রেস রেফারেন্স করে, হার্ডওয়্যার বেস রেজিস্টারের মান বাড়িয়ে দেয় এবং পরীক্ষা করে দেখে যে অফসেটটি সীমা অতিক্রম করছে কি না। যদি তা করে, তাহলে একটি মেমোরি ভায়োলেশন শনাক্ত করা হয় এবং সিস্টেমের অখণ্ডতা রক্ষা করার জন্য অপারেটিং সিস্টেম হস্তক্ষেপ করতে পারে।
পরিবর্তনশীল বিভাজন: খরচের সাথে নমনীয়তা
স্থির বিভাজনের সীমাবদ্ধতাগুলো কাটিয়ে ওঠার জন্য বিভিন্ন পরিকল্পনা প্রণয়ন করা হয়েছিল। পরিবর্তনশীল পার্টিশনযেখানে প্রতিটি প্রসেস দ্বারা দখলকৃত মেমরি ব্লকের আকার সময়ের সাথে সাথে পরিবর্তিত হতে পারে। পূর্বনির্ধারিত কঠোর পার্টিশন তৈরি করার পরিবর্তে, সিস্টেমটি দখলকৃত এবং খালি অঞ্চলগুলির একটি সারণী রক্ষণাবেক্ষণ করে।
যখন একটি নতুন প্রক্রিয়া আসে, তখন একটি অনুসন্ধান করা হয়। যথেষ্ট বড় সংলগ্ন মেমরি ব্লক একে ধারণ করার জন্য। প্রসেসটিকে কেবল প্রয়োজনীয় অংশটুকুই বরাদ্দ করা হয়, এবং যদি খালি ব্লকটি বড় হয়, তবে অতিরিক্ত অংশটি একটি নতুন খালি ফ্র্যাগমেন্টে পরিণত হয়। যখন প্রসেসটি শেষ হয়, তখন এর জায়গাটিকে উপলব্ধ হিসেবে চিহ্নিত করা হয়, এবং যদি এটি অন্য খালি ব্লকের সংলগ্ন থাকে, তবে সেগুলোকে একত্রিত করে একটি বৃহত্তর ফ্র্যাগমেন্ট তৈরি করা হয়।
এই মডেলটি নির্দিষ্ট ধরণের বর্জ্য হ্রাস করে, কিন্তু সময়ের সাথে সাথে এটি বর্জ্য তৈরি করার প্রবণতা দেখায়। উল্লেখযোগ্য বাহ্যিক খণ্ডনযেহেতু মেমরি বিভিন্ন আকারের অনেক খালি জায়গা দিয়ে ভরে যায়, তাই মোট খালি মেমরির পরিমাণ পর্যাপ্ত হলেও কোনো নির্দিষ্ট প্রসেসের জন্য প্রয়োজনীয় আকারের একটি সংলগ্ন খণ্ড খুঁজে পাওয়া অসম্ভব হয়ে পড়তে পারে।
পরিবর্তনশীল পার্টিশনে বরাদ্দ কৌশল
কোন খালি খণ্ডে একটি প্রসেস হোস্ট করা হবে তা নির্ধারণ করার জন্য বেশ কিছু প্রচলিত কৌশল ব্যবহার করা হয়, যার প্রতিটিরই নিজস্ব সুবিধা ও অসুবিধা রয়েছে। সবচেয়ে সরাসরি কৌশলটি হলো... প্রথম-ফিটযা প্রসেসটিকে মেমরির প্রথম উপলব্ধ ব্লকে বরাদ্দ করে। এটি দ্রুত, কিন্তু সময়ের সাথে সাথে মেমরির শুরুতে অনেক ছোট ছোট খণ্ডাংশ রেখে যাওয়ার প্রবণতা থাকে।
একটি রূপ হল পরবর্তী-ফিটএই পদ্ধতিটি সর্বদা শুরু থেকে শুরু করার পরিবর্তে সর্বশেষ বরাদ্দ বিন্দু থেকে অনুসন্ধান শুরু করে। এর ফলে প্রায়শই খালি জায়গা খণ্ডিত হয়ে যায়, বিশেষ করে মেমরির শেষের দিকে, যা শেষ পর্যন্ত তুলনামূলকভাবে ঘন ঘন কম্প্যাকশনের দিকে নিয়ে যায়।
অন্য পদ্ধতির হয় সেরা মানানসইএই পদ্ধতিটি প্রসেসটিকে ধারণ করতে পারে এমন ক্ষুদ্রতম খালি ব্লকে বরাদ্দ করার মাধ্যমে মেমরির ব্যবহার সর্বাধিক করার চেষ্টা করে। যদিও এটি খুব কার্যকর বলে মনে হয়, বাস্তবে এটি অনেক ক্ষুদ্র ও ব্যবহার-অযোগ্য খণ্ডাংশ তৈরি করে, যা প্রায়শই এক্সটার্নাল ফ্র্যাগমেন্টেশন পরিস্থিতিকে আরও খারাপ করে তোলে।
অবশেষে, সবচেয়ে খারাপ ফিট এটি প্রথমে সবচেয়ে বড় খালি ব্লকগুলো ব্যবহার করার সিদ্ধান্ত নেয়, এই আশায় যে অবশিষ্ট স্থান ভবিষ্যতের প্রক্রিয়াগুলোর জন্য যথেষ্ট পরিমাণ থাকবে। এটি কম্প্যাকশনের প্রয়োজনীয়তা বিলম্বিত করতে পারে, কিন্তু এই সিদ্ধান্ত নেওয়ার জন্য সমস্ত খালি ব্লক অতিক্রম করতে হয়, যার ফলে অতিরিক্ত ওভারহেড তৈরি হয়।
মেমরি কম্প্যাকশন
যখন বাহ্যিক বিভাজন সমস্যাজনক হয়ে ওঠে, তখন আশ্রয় নেওয়া হয় স্মৃতি সংক্ষেপণএই পদ্ধতিতে, দখলকৃত সমস্ত ব্লক মেমরির এক প্রান্তে (সাধারণত নিম্নতর অ্যাড্রেসে) সরিয়ে নেওয়া হয়, যাতে খালি জায়গাগুলোকে একত্রিত করে একটি একক ব্লক বা খুব অল্প কয়েকটি বড় ব্লকে পরিণত করা যায়।
সংকোচন একটি পুনরুদ্ধারের সুযোগ করে দেয় বৃহৎ সংলগ্ন খালি মেমরি স্পেসতবে, এর একটি উল্লেখযোগ্য অসুবিধা রয়েছে: এটি একটি ধীরগতির প্রক্রিয়া, কারণ এতে মেমোরির সম্পূর্ণ ব্লক কপি করা হয় এবং এর সাথে যুক্ত সমস্ত রেফারেন্স বা স্ট্রাকচার আপডেট করা হয়। তাই, কম্প্যাকশনের প্রয়োজনীয়তা বিলম্বিত করার জন্য সঠিক অ্যালোকেশন পলিসি প্রয়োগ করে এই প্রক্রিয়াটিকে যথাসম্ভব পিছিয়ে দেওয়ার চেষ্টা করা হয়।
পৃষ্ঠাঙ্কন: সংলগ্নতার লঙ্ঘন
মুক্ত মেমরিকে যাতে সংলগ্ন ব্লকে থাকতে না হয়, সেজন্য নিম্নলিখিত ব্যবস্থা চালু করা হয়েছে: পত্রাঙ্কনএই মডেলে, ফিজিক্যাল মেমরিকে পেজ ফ্রেম নামক নির্দিষ্ট আকারের ইউনিটে বিভক্ত করা হয় এবং একইভাবে প্রতিটি প্রসেসের লজিক্যাল স্পেসকেও একই আকারের পেজে বিভক্ত করা হয়।
একটি প্রক্রিয়ার প্রতিটি পৃষ্ঠা সংরক্ষণ করা যেতে পারে যেকোনো বিনামূল্যের পৃষ্ঠার ফ্রেমসমস্ত ফ্রেমকে ভৌতভাবে সংলগ্ন হওয়ার প্রয়োজন ছাড়াই এটি সম্ভব। প্রতিটি প্রসেসের জন্য, অপারেটিং সিস্টেম একটি পেজ টেবিল রক্ষণাবেক্ষণ করে, যা নির্দেশ করে কোন লজিক্যাল পেজটি কোন ভৌত ফ্রেমে অবস্থিত। ফলে, প্রোগ্রামটি তার মেমরিকে সংলগ্ন হিসেবেই উপলব্ধি করতে থাকে, যদিও তা প্রকৃতপক্ষে র্যাম জুড়ে বিস্তৃত থাকে।
এই কৌশলটি কার্যত নির্মূল করে বাহ্যিক খণ্ডনকারণ একটি প্রসেস চালানোর জন্য, সেগুলোর অবস্থান নির্বিশেষে শুধুমাত্র একটি নির্দিষ্ট সংখ্যক খালি ফ্রেমের প্রয়োজন হয়। অভ্যন্তরীণ ফ্র্যাগমেন্টেশন একটি প্রসেসের জন্য বরাদ্দ করা সর্বশেষ ফ্রেমের মধ্যে যা অবশিষ্ট থাকে, তার মধ্যেই সীমাবদ্ধ থাকে; গড়ে, একটি পেজের আকারের প্রায় অর্ধেক সেই শেষ ফ্রেমে নষ্ট হয়।
পৃষ্ঠাঙ্কনে ঠিকানার অনুবাদ
পেজড সিস্টেমে, লজিক্যাল অ্যাড্রেস দুটি ভাগে বিভক্ত থাকে: পৃষ্ঠা নম্বর এবং সেই পৃষ্ঠার মধ্যে অফসেটপ্রসেসের পেজ টেবিল কোয়েরি করে সংশ্লিষ্ট ফিজিক্যাল ফ্রেমটি পাওয়ার জন্য পেজ নম্বরটি একটি সূচক হিসেবে কাজ করে। এরপর, চূড়ান্ত ফিজিক্যাল অ্যাড্রেসটি পাওয়ার জন্য অফসেটগুলো সংযুক্ত বা যোগ করা হয়।
যেহেতু এই অনুবাদটি করা হয়েছে প্রতিটি মেমরি অ্যাক্সেসশুধুমাত্র সফটওয়্যারের মাধ্যমে এটি করা অবাস্তব। তাই, পেজ টেবিলে কোয়েরির গতি বাড়াতে এবং পারফরম্যান্সের উপর প্রভাব কমাতে নির্দিষ্ট হার্ডওয়্যার (যেমন TLB, Translation Lookaside Buffer) ব্যবহার করা হয়। অপারেটিং সিস্টেম একটি গ্লোবাল ফ্রেম ম্যাপও রক্ষণাবেক্ষণ করে, যা নির্দেশ করে কোন ফ্রেমগুলো খালি, কোনগুলো ব্যবহৃত এবং কোন প্রসেস দ্বারা ব্যবহৃত হচ্ছে।
পৃষ্ঠার আকার নির্বাচন করা একটি গুরুত্বপূর্ণ সিদ্ধান্ত: সাথে ছোট পৃষ্ঠাগুলিঅভ্যন্তরীণ ফ্র্যাগমেন্টেশন কমে যায়, কিন্তু পেজ টেবিলগুলো বড় হয়ে যায়, ফলে অতিরিক্ত মেমরি খরচ হয়। বড় পৃষ্ঠাগুলিটেবিলগুলোর জন্য কম মেমরির প্রয়োজন হয়, কিন্তু অভ্যন্তরীণ ফ্র্যাগমেন্টেশন বেড়ে যায়, কারণ প্রতিটি প্রসেসের শেষ ফ্রেমে বেশি অব্যবহৃত জায়গা থেকে যাওয়ার প্রবণতা থাকে।
বিভাজন: প্রোগ্রাম এবং ডেটার যৌক্তিক সংগঠন
সম্পূর্ণরূপে প্রযুক্তিগত দৃষ্টিকোণ থেকে উদ্ভূত পৃষ্ঠাঙ্কনের বিপরীতে, সেগমেন্টেশন এটি মূলত প্রোগ্রামার এবং ব্যবহারকারীরা কীভাবে কোড ও ডেটার কাঠামো তৈরি করে, তার উপর আলোকপাত করে। একটি প্রোগ্রামকে বিভিন্ন আকারের যৌক্তিক উপাদানের একটি সেট হিসেবে দেখা যেতে পারে: যেমন ফাংশন, মডিউল, টেবিল, স্ট্যাক, ডেটা এরিয়া ইত্যাদি।
সেগমেন্টেশনে, কম্পাইলার একটি সেট তৈরি করে। সেগমেন্ট, যার প্রতিটির একটি শনাক্তকারী, একটি শুরু এবং একটি আকার রয়েছে।প্রোগ্রামে ব্যবহৃত লজিক্যাল অ্যাড্রেসগুলো একটি জোড়া (সেগমেন্ট নম্বর, সেগমেন্টের ভেতরের অফসেট) হিসেবে প্রকাশ করা হয়। সিস্টেম নিশ্চিত করে যে অফসেটটি সেগমেন্টের ঘোষিত আকার অতিক্রম না করে, যার ফলে সীমার বাইরের রেফারেন্স প্রতিরোধ করা হয়।
একটি গুরুত্বপূর্ণ সুবিধা হলো সক্ষমতা সেগমেন্টগুলি রক্ষা করুন এবং শেয়ার করুন অত্যন্ত সূক্ষ্মতার সাথে। উদাহরণস্বরূপ, কোড ধারণকারী সেগমেন্টগুলোকে রিড-অনলি হিসেবে চিহ্নিত করা যেতে পারে, একটি মডিউলকে অন্যটির ডেটা অ্যাক্সেস করা থেকে বিরত রাখা যেতে পারে, অথবা মেমরি সাশ্রয়ের জন্য একটি কোড সেগমেন্ট একাধিক প্রসেসের মধ্যে শেয়ার করা যেতে পারে। এই সবকিছু সেগমেন্ট এবং তাদের সংশ্লিষ্ট সুরক্ষা অ্যাট্রিবিউটগুলোর একটি টেবিল দ্বারা নিয়ন্ত্রিত হয়।
পেজিংয়ের মতোই, সেগমেন্টেশনের জন্যও একটি পদ্ধতির প্রয়োজন হয় লজিক্যাল অ্যাড্রেসকে ফিজিক্যাল অ্যাড্রেসে রূপান্তর করুনএক্ষেত্রে, সেগমেন্ট টেবিলে প্রতিটি সেগমেন্টের জন্য ফিজিক্যাল বেস অ্যাড্রেস এবং সর্বোচ্চ আকার উল্লেখ থাকে। হার্ডওয়্যারটি বেস অ্যাড্রেসের সাথে অফসেট যোগ করে এবং সীমা অতিক্রম করা হচ্ছে না তা পরীক্ষা করে, যার ফলে সুরক্ষা নিশ্চিত হয়।
পৃষ্ঠাঙ্কন এবং বিভাজনের সমন্বয়
অনেক আধুনিক সিস্টেম সুবিধাগুলিকে একত্রিত করে বিভাজন এবং পৃষ্ঠাঙ্কনপ্রোগ্রামারের দৃষ্টিকোণ থেকে, প্রসেসটি এখনও লজিক্যাল সেগমেন্টে (কোড, স্ট্যাক, ডেটা, ইত্যাদি) সংগঠিত থাকে, কিন্তু অভ্যন্তরীণভাবে ফিজিক্যাল মেমরিতে অবস্থানের জন্য সেই সেগমেন্টগুলোর প্রতিটি নির্দিষ্ট দৈর্ঘ্যের পেজে বিভক্ত থাকে।
এই পদ্ধতিতে, সেগমেন্ট টেবিলটি আর সরাসরি ফিজিক্যাল অ্যাড্রেস নির্দেশ করে না, বরং প্রতিটি এন্ট্রি সেই সেগমেন্টের সাথে সংশ্লিষ্ট পেজ টেবিলের শুরুতে নির্দেশ করে।লজিক্যাল অ্যাড্রেস একটি সেগমেন্ট নম্বর এবং একটি অফসেট নিয়ে গঠিত; সিস্টেম সেই অফসেটকে পেজ সাইজ দিয়ে ভাগ করে সেগমেন্টের ভেতরের পেজ নম্বর এবং পেজের ভেতরের অফসেটটি বের করে।
এর ফলে একটি অত্যন্ত নমনীয় মডেল তৈরি হয়, যা উভয়কেই অনুমোদন করে। সুসংগত যৌক্তিক সংগঠন নির্দিষ্ট ব্লকে একটি দক্ষ ফিজিক্যাল অ্যালোকেশন হিসেবে। তবে, এর তিনটি সুস্পষ্ট অসুবিধা রয়েছে: অনুবাদ প্রক্রিয়া আরও জটিল হয়ে ওঠে এবং বেশি রিসোর্স খরচ করে, একাধিক পেজ টেবিল (প্রতিটি সেগমেন্টের জন্য একটি) সংরক্ষণের জন্য আরও বেশি জায়গার প্রয়োজন হয়, এবং প্রতিটি সেগমেন্টের শেষে সম্ভাব্য আংশিকভাবে দখলকৃত ফ্রেমের কারণে ইন্টারনাল ফ্র্যাগমেন্টেশন বাড়তে পারে।
ভার্চুয়াল মেমরি এবং ডায়নামিক পুনর্বন্টন
এখন পর্যন্ত আলোচিত সমস্ত পদ্ধতিই কোনো না কোনোভাবে ধরে নিয়েছে যে, একটি প্রক্রিয়াকে হতে হবে কার্যকর করার জন্য প্রধান মেমরিতে সম্পূর্ণরূপে লোড করা হয়েছেভার্চুয়াল মেমরি এই সীমাবদ্ধতা দূর করে, যার ফলে প্রসেসের কেবলমাত্র সক্রিয় অংশটি র্যামে থাকতে পারে এবং বাকি অংশ সেকেন্ডারি মেমরিতে (যেমন, ডিস্কে) সংরক্ষিত থাকে, যা প্রয়োজন অনুযায়ী পুনরুদ্ধার করা যায়।
ভার্চুয়াল মেমরি সাধারণত বাস্তবায়ন করা হয় যা থেকে শুরু হয় পৃষ্ঠা বা বিভাজন পরিকল্পনাঅথবা উভয়ের সংমিশ্রণ। যখন কোনো প্রসেস প্রধান মেমরিতে নেই এমন কোনো অ্যাড্রেসকে রেফারেন্স করে, তখন একটি পেজ ফল্ট ঘটে। সিস্টেম ডিস্কে সংশ্লিষ্ট পেজটি খুঁজে বের করে, র্যামে একটি খালি ফ্রেম সংরক্ষণ করে এবং সেটি লোড করে। যদি কোনো খালি ফ্রেম উপলব্ধ না থাকে, তবে কোন পেজটি ডিস্কে ইজেক্ট করা হবে তা বেছে নেওয়ার জন্য একটি রিপ্লেসমেন্ট অ্যালগরিদম ব্যবহার করা হয়।
এই পুরো প্রক্রিয়া জুড়ে, যে প্রসেসটি পেজ এরর ঘটিয়েছে সেটি ব্লক করা হয়েছে।এর পেজটি মেমরিতে লোড হওয়ার জন্য অপেক্ষা করছে। পেজ টেবিলে সাধারণত একটি প্রেজেন্স বিট থাকে, যা নির্দেশ করে যে প্রসেসটির প্রতিটি লজিক্যাল পেজ বর্তমানে প্রধান মেমরিতে আছে নাকি শুধু ডিস্কে রয়েছে। এর ফলে হার্ডওয়্যার এবং অপারেটিং সিস্টেম দ্রুত নির্ধারণ করতে পারে যে কোনো রেফারেন্স বৈধ কিনা এবং পেজটি লোড করার প্রয়োজন আছে কিনা।
এই মডেলটি অনুমতি দেয় মেমরি অনেক ভালোভাবে ব্যবহার করা হয়এর কারণ হলো, এটি প্রসেসগুলোর শুধুমাত্র সক্রিয়ভাবে ব্যবহৃত অংশগুলোকে র্যামে রাখার ওপর মনোযোগ দেয়। অধিকন্তু, একই সাথে আরও বেশি প্রসেসকে স্থান দিতে পারার ফলে এটি প্রসেসরের ব্যবহার উন্নত করে। তবে, সিস্টেমে অতিরিক্ত পেজ ফল্ট হলে, ডিস্ক অ্যাক্সেস হঠাৎ বেড়ে যায় এবং পারফরম্যান্স মারাত্মকভাবে হ্রাস পায়, যা থ্র্যাশিং নামে পরিচিত।
অদলবদল এবং বিভাজনের সাথে এর সম্পর্ক
বর্ণিত বেশ কয়েকটি মেমরি ম্যানেজমেন্ট মডেলে, বিশেষ করে স্থির পার্টিশন, পরিবর্তনশীল পার্টিশন এবং পেজিংসোয়াপিং ব্যবহার করা একটি সাধারণ বিষয়। এর মাধ্যমে আটকে থাকা প্রসেসগুলোকে সাময়িকভাবে সেকেন্ডারি স্টোরেজে সরিয়ে নেওয়া হয়, ফলে নতুন প্রসেসের জন্য বা বিদ্যমান প্রসেসগুলোর বিকাশের জন্য প্রধান মেমরি খালি হয়ে যায়।
এই কাজের জন্য দায়ী মডিউল, যাকে প্রায়শই বলা হয় ইন্টারকাম্বিয়াডোরকোন প্রসেসগুলোকে ডিস্কে সোয়াপ করা হবে এবং কখন সেগুলোকে ফিরিয়ে আনা হবে, তা একেই সিদ্ধান্ত নিতে হয়। এটি সোয়াপ করা প্রসেসগুলোর ইমেজ সংরক্ষণের জন্য সংরক্ষিত সেকেন্ডারি মেমোরি এলাকাও পরিচালনা করে। রিলোকেশন কৌশলের সাথে মিলিত হয়ে, এটি একই প্রসেসকে মূলটির চেয়ে ভিন্ন কোনো পার্টিশন বা ফ্রেম সেটে মেমোরি ফিরে আসার সুযোগ দেয়, যতক্ষণ পর্যন্ত অ্যাড্রেস ট্রান্সলেশন সামঞ্জস্যপূর্ণ থাকে।
নির্দিষ্ট ডিভাইসগুলিতে অভ্যন্তরীণ মেমরি পুনর্বন্টন
এই সমস্ত তাত্ত্বিক কাঠামোরও সরাসরি প্রভাব রয়েছে ভোক্তা ডিভাইস, যেমন এমটিকে চিপসেটযুক্ত মোবাইল ফোন (মিডিয়াটেক)। এই ডিভাইসগুলোর মধ্যে অনেকগুলো সংগঠিত করে লজিক্যাল পার্টিশনে অভ্যন্তরীণ মেমরি আলাদা (উদাহরণস্বরূপ, একটি ব্যবহারকারীর ডেটার জন্য এবং অন্যটি অ্যাপ্লিকেশনের জন্য), যার ফলে ব্যবহারকারী যদি পার্টিশনটি তার উদ্দিষ্ট উদ্দেশ্যে ব্যবহার না করেন, তবে তা কখনও কখনও কার্যত অব্যবহৃত থেকে যায়।
কিছু চিপসেট মডেল এবং প্রজন্মে (উদাহরণস্বরূপ, MTK657x বনাম MTK6582ব্যবহারকারীরা মোট স্থানের আরও ভালো ব্যবহারের জন্য এই অভ্যন্তরীণ পার্টিশনগুলিকে 'একীভূত' বা আকার পরিবর্তন করার পদ্ধতি খুঁজেছেন। এই পুনর্বন্টনের জন্য নিম্ন-স্তরের পার্টিশনিং টেবিল পরিবর্তন করতে হয় এবং বাস্তবে, এটি একটি ডেস্কটপ সিস্টেমের পার্টিশনিং স্কিম পরিবর্তনের মতোই কাজ করে, যার সাথে সমস্ত সংশ্লিষ্ট ঝুঁকি (ডেটা হারানো, বুট সমস্যা, ইত্যাদি) জড়িত থাকে।
এই কার্যক্রমগুলোর প্রকৃত কার্যকারিতা নির্ভর করে নির্মাতা কীভাবে পার্টিশন ম্যাপ সংজ্ঞায়িত করেছে এবং নির্দিষ্ট চিপসেটের জন্য উপলব্ধ টুলগুলো। যদিও কিছু MTK সিরিজের জন্য টিউটোরিয়াল এবং নির্দিষ্ট ইউটিলিটি রয়েছে, পরবর্তী প্রজন্মের ক্ষেত্রে একই পদ্ধতি প্রয়োগ করা সবসময় সম্ভব হয় না, এবং অত্যন্ত সতর্কতা অবলম্বন করার পরামর্শ দেওয়া হয়, কারণ এটি কেবল একটি উচ্চ-স্তরের অপারেশন নয়, বরং অভ্যন্তরীণ মেমরি কাঠামোর একটি গভীর পরিবর্তন।
স্মৃতি ব্যবস্থাপনার ভালো অভ্যাস
যদিও মেমরি ব্যবস্থাপনার বেশিরভাগ খুঁটিনাটি বিষয় অপারেটিং সিস্টেম স্বয়ংক্রিয়ভাবে এবং স্বচ্ছভাবে পরিচালনা করে, তবুও ব্যবহারকারী এবং প্রশাসকগণ কিছু পদক্ষেপ নিতে পারেন। কর্মক্ষমতা উন্নত করার জন্য সহজ সিদ্ধান্ত সিস্টেমের। প্রথম এবং সবচেয়ে সুস্পষ্ট বিষয়টি হলো, পর্যাপ্ত পরিমাণে র্যাম ইনস্টল করা থাকতে হবে: প্রস্তুতকারকদের দ্বারা প্রস্তাবিত ন্যূনতম পরিমাণ সাধারণত খুবই রক্ষণশীল হয়ে থাকে।
হার্ডওয়্যারের বাইরেও গুরুত্বপূর্ণ হলো একান্ত প্রয়োজন ছাড়া অতিরিক্ত প্রোগ্রাম চালানো থেকে বিরত থাকুন। একই সময়ে, একাধিক অ্যাপ্লিকেশন খোলা রাখলে, যেগুলো আসলে ব্যবহৃত হচ্ছে না, তা কেবল মেমরি দখল করে এবং সিস্টেমকে আরও ঘন ঘন সোয়াপিং কৌশল বা ভার্চুয়াল মেমরি ব্যবহার করতে বাধ্য করে, যার ফলে ডিস্ক অ্যাক্সেস বহুগুণ বেড়ে যায়।
আমাদেরও সতর্ক থাকতে হবে। গ্রাফিক আনুষাঙ্গিক এবং অলঙ্করণ এগুলোর মধ্যে রয়েছে অ্যানিমেশন, ডেস্কটপ গ্যাজেট, ছোট ব্যাকগ্রাউন্ড সার্ভিস এবং ব্রাউজার এক্সটেনশন, যেগুলো আপাতদৃষ্টিতে নিরীহ মনে হলেও র্যাম এবং সিপিইউ সাইকেল খরচ করে। সীমিত রিসোর্সযুক্ত মেশিনে পারফরম্যান্সে উল্লেখযোগ্য অবনতি দেখা গেলে, এই ধরনের উপাদানগুলোই সবার আগে নিষ্ক্রিয় করা উচিত।
সামগ্রিকভাবে, এটি কীভাবে কাজ করে তা বোঝা অভ্যন্তরীণ মেমরির বিভাজন এবং পুনর্বন্টন এটি আমাদের সিস্টেমের আচরণ আরও ভালোভাবে বুঝতে, আরও উপযুক্ত কনফিগারেশন বেছে নিতে এবং কখন আরও ফিজিক্যাল মেমরিতে বিনিয়োগ করা, সিস্টেম প্যারামিটার সামঞ্জস্য করা বা আমাদের চলমান প্রসেস ও সার্ভিসগুলোর বিন্যাস পুনর্বিবেচনা করা লাভজনক হবে, তা মূল্যায়ন করতে সাহায্য করে। তথ্যটি শেয়ার করুন যাতে আরও বেশি ব্যবহারকারী বিষয়টি সম্পর্কে জানতে পারেন।
