আসসালামু 'আলাইকুম ওয়া রাহমাতুল্লাহ। আশাকরি সবাই আল্লাহর রহমতে ভালোই আছেন। আজকে অন্য একটা টপিক নিয়ে আলোচনা করবো ইনশাআল্লাহ। আজ আলোচনা করবো অপারেটিং সিস্টেম নিয়ে। অপারেটিং সিস্টেমে একটা খুব গুরুত্বপূর্ণ বিষয় হচ্ছে মেমোরি ম্যানেজমেন্ট। আমরা হয়তো কমবেশি সবাই জানি একটা প্রোগ্রাম যখন আমরা ডবল ক্লিক করি উইন্ডোজে তখন সেই প্রোগ্রামটা র্যামে (যাকে মেইন মেমোরি বা প্রাইমারি মেমোরিও বলে) লোড হয়। এমনকি আপনি কম্পিউটার স্টার্ট দেয়ার পর উইন্ডোজ যে আস্তে আস্তে চালু হয় সেটাও কিন্তু আপনার র্যামেই লোড হতে হয়। কারণ আসলে কম্পিউটারের যে সিপিউ সেটা যাই এক্সিকিউট করুক না কেন সেটা সে র্যাম থেকেই করে। আপনার ১ টেরাবাইট, ২ টেরাবাইট হার্ডডিস্ক নিয়ে তার বিন্দুমাত্রও কোনো মাথাব্যথা বা ইন্টারেস্ট নাই। তার সংসার শুধু আপনার ঐ ৪ জিবি, ৮ জিবি কিংবা ১২ জিবি সাইজের (আপনার বা আপনার বাবার পকেটের উপর ডিপেন্ড করে) ছোট্ট ঐ র্যামটাকে নিয়েই। এখন যেটা বলছিলাম যে এই যে আপনি ধরেন বেশ বড় বড় সাইজের সফটওয়্যার চালান আপনার পিসিতে (হাই গ্রাফিক্সের গেমস, গুগল ক্রোম, অটোক্যাড, মুভি ইত্যাদি ইত্যাদি) একসাথে, আপনার ছোট্ট র্যামটাতে এগুলো আঁটে কিভাবে? আঁটার তো কথা না। কিন্তু এদিকে আপনার প্রোগ্রামগুলো চালাতেও কিন্তু সিপিউর কোনো সমস্যা হয় না। এটা আসলে সম্ভব হয় ভার্চুয়াল মেমোরির কারণে। আজকে আমরা এটা সম্বন্ধেই জানবো ইনশাআল্লাহ।
ভার্চুয়াল মেমোরির বেসিক আইডিয়া হলো প্রত্যেকটা সফটওয়্যারের (Running) র্যামে সম্পূর্ণ নিজস্ব একটা এরিয়া (যাকে Address space বলে) থাকবে; যেগুলোকে আবার ছোট ছোট চাঙকে (Chunk) ভাগ করা হবে। এই ছোট ছোট ভাগগুলোকে অপারেটিং সিস্টেমের পরিভাষায় এক একটা Page বলা হয়। আপনার যে র্যাম আছে, সেই র্যাম এর ক্ষুদ্রতম ইউনিট হলো বাইট (Byte)। ১০২৪ বাইটে হয় ১ কিলোবাইট, ১০২৪ কিলোবাইটে হয় ১ মেগাবাইট এরকম। এগুলো আমরা মোটামুটি সবাই জানি। তো এই যে বাইটগুলা হয় এগুলি নাম্বারিং করা হয়; যাকে অ্যাড্রেস বলা হয়। এখন এই পেইজগুলা র্যামে ম্যাপ করা হয়; কিন্তু একটা প্রোগ্রামের সবগুলা পেইজ আপনার একসাথে র্যামে থাকতে হবে এমন কোনো কথা নেই, কারণ তাহলে যেটা বললাম আপনি একসাথে কয়েকটা প্রোগ্রাম আপনার পিসিতে চালালে আপনার র্যাম ওভারলোডেড হয়ে যাবে, আর এটার প্রয়োজনও নেই। তাহলে ব্যাপারটা কি দাঁড়ালো? ধরেন আপনি Microsoft Office PowerPoint চালাইলেন। এখন এই প্রোগ্রামটা তো র্যামে লোড হবে। এখন এই প্রোগ্রামটার Address space কতগুলা page এ ভাগ করা হবে। অর্থাৎ কতগুলা page নিয়ে PowerPoint র্যামে থাকবে। কিন্তু এখানে PowerPoint এর মূল প্রোগ্রামের সবগুলো পেইজ থাকবে না। আপনার সিপিউ যখন PowerPoint এর নির্দিষ্ট একটা ফাংশন নিয়ে কাজ করবে তখন যদি তা র্যামে থাকে তাহলে তো হলোই; না হলে আপনার Windows কে Alert করা হবে যেন সে কাঙ্ক্ষিত page টা আপনার হার্ডডিস্ক থেকে নিয়ে আসে আর তারপর আবার ঐ ফাংশনটা নিয়ে কাজ শুরু করে।
আচ্ছা প্রোগ্রাম লিখে কেমন করে? কোডিং করে, তাই তো? তার মানে আপনি যখন PowerPoint চালাচ্ছেন, এই PowerPoint ও তো আসলে লাইন বাই লাইন কতগুলো দুর্বোধ্য কোড লিখে যে আউটপুট হয় তার ফসল। এখন এই যে প্রোগ্রামিং সেটার জন্য বেশ কিছু ল্যাংগুয়েজ আছে। অ্যাসেম্বলি হচ্ছে তার মধ্যে একটি। ধরুন PowerPoint এর একটা লাইন হচ্ছে এরকম (PowerPoint যদিও অ্যাসেম্বলিতে লিখা না, তারপরও ধরে নেন):
MOV REG, 1000
এই লাইনটার মানে হচ্ছে র্যামের ১০০০ নাম্বার লোকেশনে যা আছে সেটা একটা Register এ রাখো। Register হলো এক ধরনের মেমোরি, যেটা র্যামের চাইতেও অনেকগুনে ছোট, কিন্তু খুবই ফাস্ট। এখন কোডে ১০০০ নাম্বার অ্যাড্রেসটা যে লেখা হইলো সেটাকে বলে Virtual Address আর এরকম অনেকগুলো Virtual Address মিলে তৈরি করে Virtual Address space.
উপরের ছবিতে CPU এর নিচে দেখতে পাচ্ছেন Memory Management Unit (MMU) বলে একটা জিনিস আছে যেটা Virtual Memory আবিষ্কারের আগে CPU package এ থাকতো না। নিচে যে Bus দেখতে পাচ্ছেন সেটাকে একটা সিম্পল তারের মতো চিন্তা করতে পারেন যার মধ্যে দিয়ে ডাটা যাওয়া-আসা করে। নেটওয়ার্কিং এ যে বাস টপোলজি শিখিয়েছিলাম সেটার বাসের মতোই। যাই হোক, আগেকার সময়ে CPU সরাসরি Virtual Address কেই বাসের মধ্যে দিয়ে দিতো, তারপর Physical Memory বা র্যাম থেকে সরাসরি ঐ অ্যাড্রেসের ডাটাই Read/Write হতো। কিন্তু Virtual Memory আবিষ্কারের পর MMU, Virtual Address কে Physical Memory Address এ map করে যেটা পরে বাসের মধ্যে দিয়ে দেয়া হয়।
এখন এই ম্যাপিংটা কিভাবে কাজ করে তা দেখা যাক। ধরে নিন, একটা কম্পিউটার ১৬ বিট অ্যাড্রেস তৈরি করে। যদি ২ বিট তৈরি করতো তাহলে সম্ভাব্য অ্যাড্রেসগুলো কি কি হতে পারতো? ০০, ০১, ১০, ১১; তাই তো? এখন ০০ বাইনারি সংখ্যার দশমিক মান কতো? ০. আর ১১ এর দশমিক মান কত? ৩. তার মানে, ২ বিট ব্যবহার করলে অ্যাড্রেসের রেঞ্জ দাঁড়াবে ০ – ২২-১. যদি ৩ বিট হতো তাহলে কি হতো? ০০০, ০০১, ০১০, ০১১, ১০০, ১০১, ১১০, ১১১. ১১১ মানে আসলে কতো? ৭. তার মানে এখানে কি দাঁড়ালো? ০ – ২৩-১. তাহলে যদি ১৬ বিট হয় তাহলে রেঞ্জ দাঁড়াবে ০ – ২১৬-১. এখন ২১৬ = ৬৫৫৩৬ = ৬৫৫৩৬/১০২৪ = 64KB-1. এগুলো হলো Virtual Address. কিন্তু ধরা যাক র্যামের সাইজ হলো 32KB. তার মানে 64KB সাইজের একটা প্রোগ্রাম হার্ডডিস্কে থাকতে সমস্যা নেই, কিন্তু র্যামে হবে না।
তাইলে ক্যামনে কি? দেখা যাক তাহলে। উপরের ছবিটা খেয়াল করুন। বামপাশে লম্বা যে খাম্বা দেখা যাচ্ছে ধরেন এইটা হইলো PowerPoint পুরা সফটওয়্যারটা (সাইজ 64KB)। আর ডানপাশে ছোট যে খাম্বা আছে সেইটা আপনার র্যাম (সাইজ 32KB)। Virtual Address Space টা ছোট ছোট যে ভাগে বিভক্ত সেগুলোকে বলে Virtual Page (Page এর কথা আগেই বলেছি); আর Physical Address Space এর এক একটা unit কে বলে page frame. এক একটা Page আর page frame এর সাইজ একই। উপরের ছবিতে 4KB করে ভাগ করা হয়েছে, বাট বাস্তবে 512 বাইট থেকে শুরু করে 1GB পর্যন্তও হতে পারে। তাহলে উপরের ছবিতে আমাদের কয়টা Virtual Page আর page frame আছে? ১৬ আর ৮ টা। এখন ছবিতে যে রেঞ্জগুলো লেখা আছে 0K-4K, 4K-8K এগুলোর মানে কি? খুব সোজাঃ 0K মানে হচ্ছে 0 * 1024 = 0 আর 4K মানে হচ্ছে (4 * 1024) – 1 = 4095. এখানে 1K মানে ধরতে পারেন 1KB ইন্টারনেটের ডাটা, যার মানে ১০২৪ বাইট, ১০০০ বাইট না। 1024 = 210. আর 0 – 4095 পর্যন্ত অ্যাড্রেস আছে কিন্তু আসলে 4096 = 4KB = page size; তাই ১ মাইনাস করা হয়েছে। একইভাবে 4K-8K মানে হচ্ছে (4*1024) থেকে (8*1024 – 1) = 4096 থেকে 8191 এরকম। এখন নিচের কোডটা খেয়াল করুন।
MOV REG, 0
এখানে, যে ভার্চুয়াল অ্যাড্রেস 0 দেয়া আছে সেটা প্রথমে MMU তে যাবে। MMU দেখবে যে 0 পড়ে 0K-4K রেঞ্জের মধ্যে। তারপর সে ঐ রেঞ্জে গিয়ে দেখবে সেটা ম্যাপিং করা আছে র্যামের ২ নাম্বার page frame এ (২ মানে আসলে লিফটের ২ এর মতো)। কিন্তু ২ নাম্বার page frame তো আসলে একটা frame, স্পেসিফিক অ্যাড্রেসটা কিভাবে পাবো? সোজা ক্যালকুলেশনঃ ভার্চুয়াল অ্যাড্রেস - রেঞ্জের ১ম অ্যাড্রেস। এটাকে অফসেট বলে। তো র্যামের যে page frame এ ম্যাপ করা আছে তার বেস বা ১ম অ্যাড্রেসের সাথে এই অফসেট যোগ দিবেন; কাজ হয়ে যাবে। তাহলে এখানে র্যামের অ্যাড্রেসটা কি হবে? ২ নাম্বার page frame এর বেস অ্যাড্রেস কি? 8K = 8192. আর অফসেট কি হবে? 0 (ভার্চুয়াল অ্যাড্রেস) – 0 (রেঞ্জের ১ম অ্যাড্রেস) = 0. অতএব, র্যাম অ্যাড্রেস = 8192 + 0 = 8192. এই অ্যাড্রেসটাই এবার MMU বাসের মধ্যে দিয়ে দিবে (১ নং ছবিটা দেখুন)। তারপর র্যাম থেকে 8192 অ্যাড্রেসের ডাটা নিয়ে কাজ করা হবে।
এবার এই অংকটা দেখুন।
দেয়া আছে,
ভার্চুয়াল অ্যাড্রেস = 20500
আর ২ নং ছবি।
র্যাম অ্যাড্রেস =?
সমাধানঃ Virtual page = Virtual Address / 1024 = 20500 / 1024 = ভাগফল 20, ভাগশেষ 20 (= Offset)
ভাগফল 20 হলে ভার্চুয়াল পেজ রেঞ্জ = 20K-24K = page frame 3.
তাহলে র্যাম অ্যাড্রেস = page frame base address + Offset = (12*1024 + 20) = 12308. (Ans.)
এবার নিচের কোডটা দেখুন।
MOV REG, 32780
উপরের মতো অংক কষলে দেখবেন Virtual page range আসে 32K-36K. কিন্তু ছবিতে দেখলে দেখবেন এই পেইজটা র্যামে নাই (তাই ম্যাপিং করা নাই)। বাস্তবে কম্পিউটার হার্ডওয়্যারে একটা Present/absent bit দিয়ে ট্র্যাক করা হয় কোনো পেইজ র্যামে আছে নাকি নাই। তো এখন কি করবেন? এটাকে বলে page fault. এরকম ঘটলে কন্ট্রোল চলে যায় Operating System এর কাছে। Operating System র্যাম থেকে খুব কম ব্যবহার বা রেফার করা একটা page frame কে choice করে আর তারপর এটার ডাটাটা হার্ডডিস্কে গিয়ে লিখে ফেলে। তারপর page frame টাকে র্যাম থেকে ঘাড় ধাক্কা দিয়ে বের করে যে পেইজটা কোডে রেফার করা হয়েছে সেটাকে নিয়ে র্যামে নতুন ভাড়াটিয়া হিসাবে ঢুকায়; তারপর Virtual Page এর ম্যাপিং এ ক্রস এর জায়গায় frame number টা লিখে উপরের কোডটা re-execute করে।
এই উদাহরণটা দিয়ে শেষ করছি। ধরেন, আপনার Operating System ঠিক করলো page frame 1 কে র্যাম থেকে ফালায় দিবে। তাহলে সে যেটা করবে page frame 1 এর ডাটা হার্ডডিস্কে লিখবে, Virtual page range 32K-36K এর ডাটা হার্ডডিস্ক থেকে নিয়ে র্যামের page frame 1 এর জায়গায় overwrite করে দিবে, তারপর যে ভার্চুয়াল পেইজটা page frame 1 কে রেফার করতেছিল, সেখানে ক্রস দিয়ে দিবে আর Virtual page range 32K-36K এর জায়গায় 1 লিখে দিবে।
আজ এই পর্যন্তই। পরবর্তী টিউনে দেখা হবে ইনশাআল্লাহ। আসসালামু 'আলাইকুম।
আয়াতঃ
আর তুমি নিজকে ধৈর্যশীল রাখ তাদের সাথে, যারা সকাল-সন্ধ্যায় তাদের রবকে ডাকে, তাঁর সন্তুষ্টির উদ্দেশে, এবং দুনিয়ার জীবনের সৌন্দর্য কামনা করে তোমার দু’চোখ যেন তাদের থেকে ঘুরে না যায়। আর ওই ব্যক্তির আনুগত্য করো না, যার অন্তরকে আমি আমার যিকির থেকে গাফেল করে দিয়েছি এবং যে তার প্রবৃত্তির অনুসরণ করেছে এবং যার কর্ম বিনষ্ট হয়েছে। [সূরা কাহফ ১৮ঃ ২৮]
হাদিসঃ
আমি ফারহান কনক। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 3 বছর 11 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 3 টি টিউন ও 0 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 0 ফলোয়ার আছে এবং আমি টেকটিউনসে 4 টিউনারকে ফলো করি।