حافظه مجازی یک ویژگی سیستم عامل است که کامپیوتر را قادر می سازد تا با انتقال داده ها از حافظه دسترسی تصادفی به ذخیره سازی روی دیسک، بتواند کمبود حافظه فیزیکی را جبران کند.
این فرآیند موقتی انجام می شود و به صورتی طراحی شده است که با ترکیب رم و فضای روی هارد دیسک کار می کند.
این بدان معنی است که زمانی که حافظه رم با کمبود مواجه می شود، حافظه مجازی می تواند داده ها را از رم به فضایی منتقل بکند که فایل پیجینگ نامیده می شود. این فرآیند باعث می شود که فضای رم آزاد بشود و کامپیوتر وظیفه خود را تکمیل می کند.
گاهی اوقات ممکن است پیامی برای کاربر به نمایش درآید که می گوید حافظه مجازی کافی نیست، این بدان معنا است که یا فضای رم بیشتری باید اضافه شود، یا اندازه فایل پیجینگ باید افزایش پیدا کند.
حافظه مجازی چیست؟ به زبان دیگر
حافظه مجازی (Virtual memory ) به عنوان یک تکنیک مدیریت حافظه استفاده میشود که با استفاده از حافظه ثانویه، به عنوان بخشی از حافظه اصلی، عمل میکند. همچنین، حافظه مجازی یک روش رایج در سیستمعاملهای کامپیوتر است که استفاده از سختافزار و نرمافزار را ممکن میسازد تا کمبود حافظه فیزیکی را جبران کرده و موقتاً دادهها را از حافظه دسترسی تصادفی (RAM) به فضای ذخیرهسازی روی دیسک منتقل کند. با انتقال بستههای اطلاعاتی از حافظه به فایلهای هارددیسک، کامپیوتر قادر است به طور مشابه با حافظه اصلی با حافظه ثانویه رفتار کند.
امروزه، اغلب کامپیوترهای شخصی (PC) با حداقل ۸ GB (گیگابایت) رم عرضه می شوند. اما، گاهی اوقات، این فضا برای اجرای چندین برنامه به صورت همزمان کافی نیست. در این موقعیت است که حافظه مجازی وارد می شود. حافظه مجازی داده هایی که اخیراً استفاده نشده اند را به یک دستگاه ذخیره سازی، مانند درایو هارد یا درایو حالت جامد (SSD) منتقل می کند، به صورتی که فضای رم می تواند آزاد شود.
حافظه مجازی برای بهبود عملکرد سیستم، انجام چند وظیفه همزمان و استفاده از برنامه های بسیار بزرگ؛ حائز اهمیت است.
با این وجود، کاربران نباید بیش از حد به حافظه مجازی تکیه کنند، زیرا این حافظه به طور قابل توجهی کندتر از حافظه دسترسی تصادفی (رم) عمل میکند. در صورتی که سیستم عامل مجبور شود دادهها را بین حافظه مجازی و رم به تبادل کند، کامپیوتر کند عمل میکند و این پدیده را به عنوان کوبیدگی مینامند.
استفاده از حافظه مجازی در زمانی مطرح و به کار گرفته شد که حافظه فیزیکی (رم)، که به عنوان حافظه اصلی شناخته میشود، هزینهبر بود. مقدار رم موجود در کامپیوترها محدود است و در صورتی که چندین برنامه به صورت همزمان اجرا شوند، با محدودیت رم مواجه میشویم. با استفاده از حافظه مجازی، سیستم بخشی از فضای درایو هارد را به عنوان شبیهسازی رم استفاده میکند. با این استفاده از حافظه مجازی، یک سیستم قادر است برنامههای بزرگتر یا چندین برنامه را همزمان اجرا کند، بدون اینکه نیاز به افزایش رم فیزیکی داشته باشد. به نظر میرسد که سیستم واقعاً دارای فضای ذخیرهسازی بیشتری است.
حافظه مجازی چگونه کار می کند؟
Virtual memory برای عملکرد خود هم از سخت افزار و هم از نرم افزار کمک می گیرد. زمانی که یک برنامه اجرا می شود، داده های آن برنامه با استفاده از رم درون یک آدرس فیزیکی ذخیره می شوند. یک واحد مدیریت حافظه (MMU) آدرس را به رم انتقال می دهد و به صورت خودکار آدرس ها را ترجمه می کند. MMU می تواند، برای مثال، یک فضای آدرس منطقی را به یک آدرس فیزیکی مربوطه نگاشت کند. اگر، در هر نقطه ای، فضای رم برای موضوعی مورد نیاز فوری قرار بگیرد، داده ها را می توان از رم به حافظه مجازی منتقل کرد.
واحد مدیریت حافظه کامپیوتر در واقع این انتقال ها بین حافظه مجازی و فیزیکی را پیگیری و ردیابی می کند. اگر داده ها دوباره مورد نیاز قرار گرفته اند، MMU کامپیوتر از تعویض زمینه استفاده می کند تا اجرا از سر گرفته بشود.
انواع حافظه مجازی
یک واحد مدیریت حافظه (MMU) در کامپیوتر قادر است عملکردهای حافظه مجازی را مدیریت کند. در اکثر کامپیوترها، سختافزار MMU به صورت یک واحد یکپارچه با واحد پردازنده مرکزی (CPU) تعبیه شده است. CPU نیز فضای آدرس مجازی را ایجاد میکند. به طور کلی، حافظه مجازی به صورت صفحهبندی یا بخشبندی عمل میکند.
صفحهبندی (پیجینگ) حافظه را به چندین بخش یا فایل صفحهبندی تقسیم میکند. زمانی که یک کامپیوتر از حافظه دسترسی تصادفی (RAM) استفاده میکند، صفحههایی که در حال حاضر استفاده نمیشوند، به وسیلهٔ یک فایل تبادل به درایو هارد منتقل میشوند.
فایل swap یک فضای مجازی روی درایو هارد است که به عنوان توسعهدهنده حافظه مجازی برای رم کامپیوتر استفاده میشود. زمانی که فایل swap مورد نیاز است، با استفاده از یک فرآیند به نام صفحهبندی صفحهبندی (page swapping) به رم بازگردانده میشود. این سیستم تضمین میکند که سیستم عامل کامپیوتر و برنامهها خارج از حافظه فیزیکی اجرا نمیشوند. حداکثر اندازهٔ فایل صفحه میتواند تا چهار برابر حجم حافظه فیزیکی کامپیوتر باشد.
چگونگی مدیریت حافظه مجازی
مدیریت حافظه مجازی در سیستم عامل به طور کلی به سادگی قابل انجام است، زیرا تنظیمات پیشفرضی وجود دارد که میزان فضای درایو هارد اختصاص داده شده به حافظه مجازی را تعیین میکنند. این تنظیمات برای اکثر برنامهها و اپلیکیشنها کارآمد هستند، اما ممکن است مواقعی پیش بیاید که نیاز به دستکاری دستی مقدار فضای درایو هارد اختصاص داده شده به حافظه مجازی وجود داشته باشد، به عنوان مثال هنگامی که با اپلیکیشنهایی که به زمان پاسخ سریع وابسته هستند یا در صورتی که کامپیوتر دارای چندین درایو هارد دیسک (HDD) باشد.
در هنگام دستکاری دستی حافظه مجازی، مقادیر حداقل و حداکثر فضای درایو هارد قابل استفاده باید مشخص شوند. اختصاص فضای بیش از حد کمی از HDD به حافظه مجازی ممکن است باعث پر شدن حافظه RAM کامپیوتر شود. اگر سیستم به طور مداوم به مقدار بیشتری از حافظه مجازی نیاز دارد، افزایش حافظه RAM راهکار منطقیتری است. سیستم عاملهای معمولاً به طور کلی توصیه میکنند که حافظه مجازی را تا بیش از ۱.۵ برابر مقدار RAM افزایش ندهید.
مزایای استفاده از حافظه مجازی چیست؟
مزایای استفاده از حافظه مجازی عبارتند از:
- می تواند دوبرابر بیشتر از حافظه اصلی، آدرس ها را مدیریت کند.
- می تواند اغلب اپلیکیشن ها را قادر سازد که حداقل یک بار به کار گرفته شوند.
- اپلیکیشن ها را از مدیریت حافظه مشترک رها می سازد و کاربر دیگر مجبور نیست هنگام تمام شدن رم، ماژول حافظه اضافی استفاده کند.
- هنگامی که فقط یک سگمنت از یک برنامه برای اجرا مورد نیاز است، سرعت را افزایش می دهد.
- به دلیل جداسازی حافظه، امنیت را افزایش می دهد.
- اجرای همزمان چندین برنامه ی بزرگتر را امکان پذیر می کند.
- تخصیص حافظه نسبتاً ارزانقیمت است.
- نیاز به فرگمنتیشن خارجی ندارد.
- استفاده از CPU برای مدیریت حجم کار پارتیشن بندی منطقی کارآمد است.
- داده ها را می توان به صورت خودکار منتقل کرد.
- در حین عملیات فراخوانی سیستم فورک که از خود یک کپی ایجاد می کند؛ اشتراک گذاری صفحه ها در فرآیند اصلی را امکان پذیر می سازد.
علاوه بر این مزایا، در محیط محاسباتی مجازی شده، مدیران شبکه می توانند از روش های مدیریت حافظه مجازی استفاده کننده تا حافظه را به یک ماشین مجازی تخصیص دهند (VM) که اجرای آن نیاز به حافظه زیادی دارد.
محدودیت های استفاده از حافظه مجازی چیست؟
با وجود این که استفاده از Virtual memory مزایایی دارد، اما برخی ملاحظات در مورد آن وجود دارد که باید در نظر گرفته شود، مانند:
- اگر برنامه ها از روی حافظه مجازی اجرا بشوند، سرعت اجرای آنها کند می شود.
- داده ها باید بین حافظه مجازی و فیزیکی نگاشت بشود؛ که این امر نیازمند پشتیبانی سخت افزاری اضافی برای ترجمه آدرس ها می باشد و باعث کند شدن بیشتر کامپیوتر می شود.
- اندازه ذخیره سازی مجازی به دلیل حجم ذخیره سازی ثانویه و طرح آدرس دهی با سیستم کامپیوتر محدود می شود.
- اگر رم کافی نباشد، کوبیدگی (trashing) ممکن است رخ بدهد که باعث کند شدن عملکرد کامپیوتر می شود.
- جابه جایی بین برنامه ها با استفاده از حافظه مجازی ممکن است زمانبر باشد.
- فضای موجود در درایو هارد را کاهش می دهد.
تاریخچه استفاده از حافظه مجازی
قبل از توسعه و استفاده از حافظه مجازی، کامپیوترها از حافظه اصلی و حافظه ثانویه استفاده میکردند. در نسلهای جدیدتر کامپیوترها، از حافظه هسته مغناطیسی به عنوان حافظه اصلی و از درامهای مغناطیسی به عنوان حافظه ثانویه استفاده میشد. حافظه کامپیوترها در دهههای ۱۹۴۰ و ۱۹۵۰ به طور عمومی گران قیمت و محدود بودند. با پیشرفت اندازه و پیچیدگی برنامههای کامپیوتری، توسعهدهندگان نگران این بودند که برنامههایشان از تمام حافظه اصلی استفاده کنند و حافظه کامپیوتر تمام شود.
در اوایل، برنامهنویسان از یک فرایند به نام جایگذاری (overlaying) برای اجرای برنامههای بزرگتر از حافظه موجود استفاده میکردند. بخشهایی از برنامه که به طور مداوم استفاده نمیشدند، به صورت جایگذاری تنظیم میشدند و زمانی که نیاز میشد، این جایگذاریها بازنویسی میشدند. این کار نیازمند برنامهنویسی پیچیده برای انجام جایگذاری بود و این موضوع انگیزه و اصلی برای توسعه و استفاده از حافظه مجازی بود.
فریتز رودلف گونتش، فیزیکدان آلمانی، در سال ۱۹۵۶ به دلیل توسعه و استفاده از Virtual memory به شهرت رسید، اگرچه این موضوع بعدها مورد بحث قرار گرفت. با این حال، گونتش در نهایت نوعی حافظه کش را شرح و معرفی کرد.
در ۱۹۶۹ محققین IBM نشان داده اند که سیستم های جایگذاری حافظه مجازی نسبت به سیستم های دستی قدیمی تر عملکرد بهتری دارند.
تا به حال، این موضوع همچنان مورد بحث و شک و تردید قرار دارد. در دهه ۱۹۷۹، سیستمهای بزرگ و کامپیوترهای کوچک عموماً از Virtual memory استفاده میکردند. در ابتدای دوران کامپیوترهای شخصی، تکنولوژی حافظه مجازی استفاده نشده بود به خاطر اینکه توسعهدهندگان باور داشتند پر شدن حافظه مشکلی برای این کامپیوترها ایجاد نخواهد کرد. اما بعدها ثابت شد که این فرضیه نادرست است. در سال ۱۹۸۲، اینتل Virtual memory را در پردازنده ۸۰۲۸۶ معرفی کرد و همچنین در زمان عرضه پردازنده ۸۰۳۸۶ در سال ۱۹۸۵، پشتیبانی از صفحهبندی را نیز معرفی کرد.