Foundationপ্রথম নীতি থেকে
LEVEL 4 · Operating Systems

Virtual Memory

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

প্রতিটা process-এর নিজস্ব, স্বাধীন ঠিকানা-জগৎ — MMU প্রতিটা access-এ virtual address-কে physical address-এ অনুবাদ করে, OS-এর নির্ধারিত মাপিং অনুসরণ করে।

also: VM, virtual addressing, address translation

তিনটা সমস্যা একসাথে সমাধান করে: isolation (দুইটা process একই virtual address ব্যবহার করলেও ভিন্ন physical মেমরিতে যায়, একজন অন্যজনের ডেটা ছুঁতে পারে না), overcommit (প্রতিটা process ০ থেকে শুরু করে একটা বিশাল ঠিকানা-জগৎ পায়, physical RAM যতই সীমিত হোক), আর flexibility (ঠিকানা-জগৎ দেখতে ধারাবাহিক, পেছনের physical RAM scattered বা আংশিক অনুপস্থিত থাকতে পারে — [[demand paging]]-এর ভিত্তি)।

অনুবাদটা hardware-এ কেন? প্রতি সেকেন্ডে কোটি কোটি memory access — software lookup প্রতিটা access-এ function-call-এর খরচ যোগ করত, পুরো CPU-কে ধীর করে দিত। তাই [[MMU]] cache-এর পাশে বসে, cache-access-এর গতিতে অনুবাদ করে।

Process A: virtual 0x1000 → physical 0x7a2b3000
Process B: virtual 0x1000 → physical 0x1f4c9000   (ভিন্ন mapping)

নিয়ন্ত্রণ কার হাতে? OS মাপিং তৈরি করে ([[page table]]-এ সংরক্ষণ করে), MMU সেটা প্রতিটা access-এ প্রয়োগ করে — OS নমনীয়তা দেয়, hardware গতি দেয়।

সাধারণ ভুল: virtual memory মানেই swap/disk — ভুল। Swap শুধু overcommit-এর একটা সম্ভাব্য প্রয়োগ; isolation ও flexibility সম্পূর্ণ অর্থবহ এমনকি swap সম্পূর্ণ বন্ধ থাকা মেশিনেও।