حافظه مجازی چیست؟ معایب و مزایا و روش انجام
حافظه مجازی یک ویژگی سیستم عامل است که کامپیوتر را قادر می سازد تا با انتقال داده ها از حافظه دسترسی تصادفی به ذخیره سازی روی دیسک، بتواند کمبود حافظه فیزیکی را جبران کند.
این فرآیند موقتی انجام می شود و به صورتی طراحی شده است که با ترکیب رم و فضای روی هارد دیسک کار می کند.
این بدان معنی است که زمانی که حافظه رم با کمبود مواجه می شود، حافظه مجازی می تواند داده ها را از رم به فضایی منتقل بکند که فایل پیجینگ نامیده می شود. این فرآیند باعث می شود که فضای رم آزاد بشود و کامپیوتر وظیفه خود را تکمیل می کند.
گاهی اوقات ممکن است پیامی برای کاربر به نمایش درآید که می گوید حافظه مجازی کافی نیست، این بدان معنا است که یا فضای رم بیشتری باید اضافه شود، یا اندازه فایل پیجینگ باید افزایش پیدا کند.
حافظه مجازی چیست؟ به زبان دیگر
حافظه مجازی یک تکنیک مدیریت حافظه است که بر اساس این روش، می توان از حافظه ثانویه به عنوان بخشی از حافظه اصلی استفاده کرد. حافظه مجازی یک روش متداول است که در سیستم عامل کامپیوتر (OS) به کار گرفته می شود.
حافظه مجازی هم از سخت افزار و هم از نرم افزار استفاده می کند تا کامپیوتر را قادر سازد کمبود حافظه فیزیکی را جبران سازی کند و به طور موقت داده ها را از حافظه دسترسی تصادفی (رم) به فضای ذخیره سازی روی دیسک منتقل می کند. انتقال بسته های اطلاعاتی حافظه به فایل های هارد دیسک، کامپیوتر را قادر می سازد تا با حافظه ثانویه مانند حافظه اصلی رفتار کند.
امروزه، اغلب کامپیوترهای شخصی (PC) با حداقل 8 GB (گیگابایت) رم عرضه می شوند. اما، گاهی اوقات، این فضا برای اجرای چندین برنامه به صورت همزمان کافی نیست. در این موقعیت است که حافظه مجازی وارد می شود. حافظه مجازی داده هایی که اخیراً استفاده نشده اند را به یک دستگاه ذخیره سازی، مانند درایو هارد یا درایو حالت جامد (SSD) منتقل می کند، به صورتی که فضای رم می تواند آزاد شود.
حافظه مجازی برای بهبود عملکرد سیستم، انجام چند وظیفه همزمان و استفاده از برنامه های بسیار بزرگ؛ حائز اهمیت است. با این حال، کاربران نباید بیش از حد به فضای مجازی تکیه بکنند، زیرا این حافظه به میزان قابل توجهی کندتر از رم کار می کند. اگر سیستم عامل مجبور باشد که داده ها را در اغلب موارد بین حافظه مجازی و رم تبادل بکند، کامپیوتر کند می شود – این رخداد را کوبیدگی می نامند.
حافظه مجازی زمانی مطرح و به کار گرفته شد که حافظه فیزیکی – که با عنوان رم شناخته می شود- گرانقیمت بود. مقدار رم کامپیوترها محدود است به طوری که اگر چندین برنامه به طور همزمان بخواهند اجرا بشوند، فضای رم با کمبود مواجه می شود.
سیستم با استفاده از حافظه ی مجازی، بخشی از درایو هارد را به کار می گیرد تا رم را شبیه سازی کند. با استفاده از حافظه مجازی، یک سیستم می تواند برنامه های بزرگتر یا چندین برنامه را به صورت همزمان اجرا بکند؛ و بدون این که نیاز به خرید رم بیشتر باشد، این طور به نظر می رسد که گویا واقعاً فضای ذخیره سازی بیشتری دارد.
حافظه مجازی چگونه کار می کند؟
حافظه مجازی برای عملکرد خود هم از سخت افزار و هم از نرم افزار کمک می گیرد. زمانی که یک برنامه اجرا می شود، داده های آن برنامه با استفاده از رم درون یک آدرس فیزیکی ذخیره می شوند. یک واحد مدیریت حافظه (MMU) آدرس را به رم انتقال می دهد و به صورت خودکار آدرس ها را ترجمه می کند.
MMU می تواند، برای مثال، یک فضای آدرس منطقی را به یک آدرس فیزیکی مربوطه نگاشت کند. اگر، در هر نقطه ای، فضای رم برای موضوعی مورد نیاز فوری قرار بگیرد، داده ها را می توان از رم به حافظه مجازی منتقل کرد.
واحد مدیریت حافظه کامپیوتر در واقع این انتقال ها بین حافظه مجازی و فیزیکی را پیگیری و ردیابی می کند. اگر داده ها دوباره مورد نیاز قرار گرفته اند، MMU کامپیوتر از تعویض زمینه استفاده می کند تا اجرا از سر گرفته بشود.
۱۰ اپلیکیشن کاملاً کاربردی که هر کاربر اندروید در ایران به آنها نیاز دارد!
در حین کپی کردن حافظه مجازی به درون حافظه فیزیکی، OS حافظه را به اندازه تعداد آدرس ها یا پیج فایل ها یا فایل های مبادله تقسیم می کند که مقدار ثابتی است. هر صفحه روی یک دیسک ذخیره می شود و زمانی که مورد نیاز باشد، سیستم عامل آن را از روی دیسک بر روی حافظه اصلی کپی می کند و آدرس های مجازی را به آدرس های واقعی ترجمه می کند.
با این وجود، فرآیند تبادل حافظه مجازی با حافظه فیزیکی نسبتاً کند انجام می شود. این بدان معنی است که حافظه مجازی معمولاً به میزان قابل توجهی عملکرد را کاهش می دهد. به دلیل تبادل اطلاعات، معمولاً این طور در نظر گرفته می شود که کامپیوترها با رم بیشتر، عملکرد بهتری دارند.
انواع حافظه مجازی
MMU کامپیوتر می تواند عملکردهای حافظه مجازی را مدیریت می کند. در اغلب کامپیوترها، سخت افزار MMU به صورت مجتمع با واحد پردازنده مرکزی (CPU) قرار می گیرد. CPU نیز فضای آدرس مجازی را به وجود می آورد. به طور کل، حافظه مجازی یا صفحه بندی شده یا بخش بندی شده هستند.
صفحه بندی (پیجینگ) حافظه را به چندین بخش یا فایل های صفحه بندی تقسیم می کند. زمانی که یک کامپیوتر از RAM در دسترس خود استفاده می کند، صفحه هایی که مورد استفاده نیستند؛ با استفاده از یک فایل تبادل به درایو هارد منتقل می شود. یک فایل swap فضایی روی درایو هارد است که باید به عنوان پسوند توسعه حافظه مجازی برای رم کامپیوتر استفاده شود.
زمانی که فایل swap مورد نیاز باشد، با استفاده از فرآیندی که تبادل صفحه (page swapping) نامیده می شود، به رم باز فرستاده می شود. این سیستم تضمین می کند که سیستم عامل کامپیوتر و اپلیکیشن ها خارج از حافظه حقیقی اجرا نمی شوند. حداکثر اندازه فایل صفحه می تواند به اندازه تا 4 برابر حافظه فیزیکی کامپیوتر باشد.
فرآیند صفحه بندی حافظه مجازی از جداول صفحه استفاده می کند، که آدرس های مجازی را که سیستم عامل و اپلیکیشن ها استفاده می کنند به آدرس های فیزیکی ترجمه می کند که مورد استفاده MMU قرار می گیرد. ورودی ها به جدول صفحه نشان می دهد که آیا صفحه در رم وجود دارد یا خیر.
اگر سیستم عامل یا یک برنامه آنچه را نیاز دارد در رم پیدا نکند؛ آنگاه MMU با یک خطای صفحه به حافظه مرجع از دست رفته پاسخ می دهد تا سیستم عامل را وادار کند تا صفحه را زمانی که مورد نیاز است به حافظه بازگرداند. زمانی که صفحه در رم وجود داشته باشد، آدرس مجازی آن در صفحه جدول ظاهر می شود.
تقسیم بندی (سگمنتیشن) نیز برای مدیریت حافظه مجازی استفاده می شود. این رویکرد، حافظه مجازی را به قسمت هایی با طول های مختلف تقسیم می کند. تقسیم بندی های استفاده نشده در حافظه را می توان به فضای حافظه مجازی یا درایو هارد منتقل کرد.
پردازش ها یا اطلاعات تقسیم بندی شده در جدول سگمنت ردیابی می شوند که نشان می دهد آیا یک سگمنت در حافظه وجود دارد یا خیر، آیا اصلاح شده است یا خیر، و این که آدرس فیزیکی آن چیست. به علاوه، سیستم های فایل در سگمنتیشن فقط از سگمنت هایی تشکیل شده است که به فضای آدرس بالقوه نگاشت شده باشند.
سگمنتیشن و صفحه بندی از نظر چگونگی تقسیم بندی حافظه باهم تفاوت دارند. با این حال، این دو روش را می توان با هم ترکیب کرد. در این مورد، حافظه به صفحه ها یا فریم هایی تقسیم بندی می شود. سگمنت ها چندین صفحه را اشغال می کنند، و آدرس های مجازی شماره سگمنت و شماره صفحه را در بر می گیرد.
دیگر روش های جایگزینی صفحه شامل روش اولین ورودی-اولین خروجی، الگوریتم صفحه بهینه و جایگزینی صفحه (LRU) است که اخیراً کمتر استفاده می شود. الگوریتم FIFO (اولین ورودی-اولین خروجی) دارای حافظه است و صفحه های قدیمی تر که به مدت طولانی تری در آدرس مجازی بوده اند را با صفحه های جدید جایگزین می کند.
روش الگوریتم صفحه بهینه، صفحه هایی که باید جایگزین شوند را بر این اساس انتخاب می کند که کدام صفحه بعد از طولانی ترین زمان ممکن، احتمال کمتری برای استفاده شدن دارد. علیرغم این که پیاده سازی این روش سخت است، ولی منجر به ایجاد خطای صفحه کمتری می شود. روش جایگزینی صفحه LRU ضفحه ای را جایگزین می کند که به مدت خیلی زیادی در حافظه اصلی بدون استفاده باقی مانده باشد.
چگونگی مدیریت حافظه مجازی
مدیریت حافظه مجازی در سیستم عامل تقریباً ساده است، زیرا تنظیمات پیشفرضی وجود دارد که مقدار فضای درایو هارد که برای حافظه مجازی تخصیص داده می شود را تعیین می کنند.
این تنظیمات برای اغلب اپلیکیشن ها و برنامه ها کار خواهد کرد، اما ممکن است موقعیت هایی پیش بیاید که لازم باشد مقدار فضای درایو هارد تخصیص داده شده به حافظه مجازی به صورت دستی ریست بشود- برای مثال، هنگام کار با اپلیکیشن هایی که به زمان های پاسخ سریع بستگی دارند یا زمانی که کامپیوتر چندین درایو هارد دیسک داشته باشد (HDDs).
هنگام ریست کردن دستی حافظه مجازی، مقدار مینیمم و ماکزیمم فضای درایو هارد که قابل استفاده است باید مشخص شود. تخصیص فضای بیش از حد کم HDD به حافظه مجازی می تواند باعث پر شدن رم کامپیوتر شود. اگر یک سیستم دائماً به فضای حافظه مجازی بیشتر نیاز پیدا می کند، افزایش رم راهکار عاقلانه تری است. سیستم عامل های معمولی، ممکن است به طور کلی به کاربران توصیه کنند که حافظه مجازی را به بیشتر از 1.5 برابر مقدار رم افزایش ندهند.
مدیریت حافظه مجازی بر اساس سیستم عامل متفاوت است. به همین دلیل، متخصصین فناوری اطلاعات باید به اصول بنیادین مباحثی مانند مدیریت حافظه فیزیکی، آدرس های مجازی و حافظه مجازی تسلط داشته باشند.
سلول های حافظه رم در SSD نیز طول عمر محدودی دارند. در سلول های حافظه رم، تعداد نوشتن محدود است، بنابراین استفاده از آنها برای حافظه مجازی اغلب طول عمر درایو را کاهش می دهد.
مزایای استفاده از حافظه مجازی چیست؟
مزایای استفاده از حافظه مجازی عبارتند از:
- می تواند دوبرابر بیشتر از حافظه اصلی، آدرس ها را مدیریت کند.
- می تواند اغلب اپلیکیشن ها را قادر سازد که حداقل یک بار به کار گرفته شوند.
- اپلیکیشن ها را از مدیریت حافظه مشترک رها می سازد و کاربر دیگر مجبور نیست هنگام تمام شدن رم، ماژول حافظه اضافی استفاده کند.
- هنگامی که فقط یک سگمنت از یک برنامه برای اجرا مورد نیاز است، سرعت را افزایش می دهد.
- به دلیل جداسازی حافظه، امنیت را افزایش می دهد.
- اجرای همزمان چندین برنامه ی بزرگتر را امکان پذیر می کند.
- تخصیص حافظه نسبتاً ارزانقیمت است.
- نیاز به فرگمنتیشن خارجی ندارد.
- استفاده از CPU برای مدیریت حجم کار پارتیشن بندی منطقی کارآمد است.
- داده ها را می توان به صورت خودکار منتقل کرد.
- در حین عملیات فراخوانی سیستم فورک که از خود یک کپی ایجاد می کند؛ اشتراک گذاری صفحه ها در فرآیند اصلی را امکان پذیر می سازد.
علاوه بر این مزایا، در محیط محاسباتی مجازی شده، مدیران شبکه می توانند از روش های مدیریت حافظه مجازی استفاده کننده تا حافظه را به یک ماشین مجازی تخصیص دهند (VM) که اجرای آن نیاز به حافظه زیادی دارد.
محدودیت های استفاده از حافظه مجازی چیست؟
با وجود این که استفاده از حافظه مجازی مزایایی دارد، اما برخی ملاحظات در مورد آن وجود دارد که باید در نظر گرفته شود، مانند:
- اگر برنامه ها از روی حافظه مجازی اجرا بشوند، سرعت اجرای آنها کند می شود.
- داده ها باید بین حافظه مجازی و فیزیکی نگاشت بشود؛ که این امر نیازمند پشتیبانی سخت افزاری اضافی برای ترجمه آدرس ها می باشد و باعث کند شدن بیشتر کامپیوتر می شود.
- اندازه ذخیره سازی مجازی به دلیل حجم ذخیره سازی ثانویه و طرح آدرس دهی با سیستم کامپیوتر محدود می شود.
- اگر رم کافی نباشد، کوبیدگی (trashing) ممکن است رخ بدهد که باعث کند شدن عملکرد کامپیوتر می شود.
- جابه جایی بین برنامه ها با استفاده از حافظه مجازی ممکن است زمانبر باشد.
- فضای موجود در درایو هارد را کاهش می دهد.
مقایسه حافظه مجازی (رم مجازی) با حافظه فیزیکی (رم)
هنگامی که درباره تفاوت بین حافظه مجازی و حقیقی صحبت می کنیم، بزرگترین عامل تفاوت آنها معمولاً سرعت است. سرعت رم به میزان قابل توجهی از رم مجازی بیشتر است. از طرفی رم در مقایسه با حافظه مجازی بسیار گرانقیمت تر است.
زمانی که کامپیوتر به ذخیره سازی احتیاج پیدا می کند، رم پیش از همه مورد استفاده قرار می گیرد. حافظه مجازی که سرعتش پایین تر است، تنها زمانی استفاده می شود که رم پر شده باشد.
مقایسه رم با حافظه فیزیکی
حافظه مجازی | رم |
از یک سگمنت حافظه فیزیکی استفاده می کند | حافظه فیزیکی |
کند تر | سریع تر |
استفاده از صفحه بندی | استفاده از تکنیک های سواپ کردن |
بر اساس اندازه حافظه فیزیکی محدود شده است | بر اساس اندازه تراشه رم محدود شده است |
دسترسی مستقیم به CPU ندارد | می تواند مستقیماً به CPU دسترسی داشته باشد |
بسته به اندازه درایو هارد کامپیوتر محدود می شود | می توان با نصب تراشه های رم بیشتر، رم را افزایش داد |
کاربران می توانند در صورت نیاز با خرید و نصب تراشه های رم بیشتر، مقدار رم را افزایش بدهند. زمانی که سواپ کردن حافظه خیلی بیش از حد اتفاق می افتد و کاربر با کندی کامپیوتر مواجه می شود؛ افزایش رم می تواند مفید واقع شود. اندازه رم بستگی به چیزی که روی کامپیوتر نصب شده است دارد. حافظه مجازی، از سوی دیگر، بسته به اندازه درایو هارد کامپیوتر محدود می شود. تنظیمات حافظه مجازی را اغلب می توان از طریق سیستم عامل کنترل کرد.
به علاوه؛ رم از روش های سواپ کردن استفاده می کند، در حالی که حافظه مجازی از صفحه بندی استفاده می کند. در حالی که حافظه فیزیکی بسته به اندازه تراشه رم محدود می شود، حافظه مجازی توسط اندازه هارد دیسک محدود می گردد. رم همچنین دسترسی مستقیم به CPU دارد، درحالی که رم مجازی این گونه نیست.
تاریخچه استفاده از حافظه مجازی
پیش از توسعه و به کارگیری حافظه مجازی، کامپیوترها رم و حافظه ثانویه داشتند. کامپیوترهای جدیدتر از حافظه هسته مغناطیسی برای حافظه اصلی و درام های مغناطیسی برای حافظه ثانویه خود استفاده می کردند. حافظه کامپیوترها تا دهه های 1940 و 1950 معمولاً گران قیمت و کم بودند. هرچقدر که اندازه و پیچیدگی های برنامه های کامپیوتری پیشرفت کرد، توسعه کننده ها بیشتر نگران این موضوع بودند که برنامه های شان از تمام حافظه اصلی استفاده کند و حافظه کامپیوتر تمام شود.
در نخستین روزها، برنامه نویس ها از فرآیندی به نام جایگذاشت (overlaying) استفاده می کردند تا برنامه هایی را که بزرگتر از حافظه موجود بودند را اجرا بکنند. بخش هایی از برنامه که مداوم استفاده نمی شوند، به صورت overlay (جایگذاشت) تنظیم می شوند و زمانی که مورد نیاز واقع می شوند، Overlay های موجود بازنویسی خواهند شد. این امر نیازمند برنامه نویسی گسترده است تا کار جایگذاری (Overlaying) را انجام بدهند، این موضوع انگیزه و محرک اصلی برای توسعه و به کار گیری حافظه مجازی می باشد.
حتما بخوانید: سرچ پیشرفته در گوگل: همه ترفندهای کاربردی
فیزیک دان آلمانی فریتز رودلف گونتش به واسطه توسعه و به کار گیری حافظه مجازی در سال 1956 به شهرت رسید، البته این نکته بعدها مورد بحث قرار گرفت. با این وجود، گونش در نهایت نوعی از حافظه کش را توصیف و معرفی نمود.
اولین نمونه واقعی از سیستم حافظه مجازی را دانشگاه منچستر در منچستر انگلستان ارائه کرد، که کوششی در راستای توسعه و گسترش سیستم حافظه یک سطحی برای کامپیوتر Atlas بوده است. این سیستم از صفحه بندی برای نگاشت آدرس های مجازی به یک برنامه نویس روی حافظه اصلی استفاده می کند. Atlas در سال 1959 توسعه یافته و بعدها در سال 1962 راه اندازی شد.
در سال 1961، اولین کامپیوتر تجاری با حافظه مجازی توسط شرکت Burroughs به بازار عرضه شد. در این نسخه از حافظه مجازی به جای صفحه بندی از روش های سگمنتیشن استفاده می شد.
از دست ندهید: روش ساده خالی کردن فضای مموری گوشی اندروید
در 1969 محققین IBM نشان داده اند که سیستم های جایگذاری حافظه مجازی نسبت به سیستم های دستی قدیمی تر عملکرد بهتری دارند. تا این لحظه همچنان این موضوع مورد بحث است و در مورد آن شک و تردید وجود دارد. مین فریم ها (بزرگ رایانه ها) و مینی کامپیوترها در دهه 1979 عموماً از حافظه مجازی استفاده می کنند.
تکنولوژی حافظه مجازی در کامپیوترهای شخصی ابتدایی به کار گرفته نشده است زیرا توسعه دهندگان بر این باور بودند که تمام شدن حافظه نمی تواند مشکلی برای این کامپیوترها ایجاد کند. در ادامه نادرست بودن این فرضیه اثبات شد. اینتل، حافظه مجازی را در حالت حافظت شده ی پردازنده 80286 در سال 1982 معرفی کرد؛ همچنین پشتیبانی از صفحه بندی را زمانی که 80386 در سال 1985 به بازار آمد، معرفی نمود.
با این اپلیکیشن ساده، هر زبانی رو فقط با روزانه 5 دقیقه گوش دادن، توی 80 روز مثل بلبل حرف بزن! بهترین متد روز، همزمان تقویت حافظه، آموزش تصویری با کمترین قیمت ممکن!