حافظه مجازی به سیستم عامل کمک می کند تا فرآیندهای خود را بدون وقفه انجام دهد. در این مقاله نحوه مدیریت حافظه مجازی در لینوکس به طور کامل توضیح داده شده است.
حافظه مجازی یکی از آن چیزهایی است که زیربنای سیستم عامل های مدرن است، اما معمولاً به آن فکر نمی کنید مگر اینکه مشکلی داشته باشید. توزیعهای لینوکس از شما میخواهند که فضای حافظه مجازی خود (پارتیشنهای تعویض) را در حین نصب تنظیم کنید، اما بیشتر مبتدیان از مفید بودن آن آگاه نیستند.
حافظه مجازی چیست؟
حافظه مجازی راهی برای نمایش حافظه شما است که از حافظه فیزیکی دستگاه شما انتزاع شده است. هم از رم و هم از فضای ذخیره سازی شما استفاده می کند، خواه روی هارد دیسک HDD یا SSD باشد.
در لینوکس این کار در سطح هسته و سخت افزار انجام می شود. CPU دارای یک قطعه سخت افزاری به نام Memory Management Unit (MMU) است که آدرس های حافظه فیزیکی را به مجازی تبدیل می کند. این آدرس ها مستقل از محل قرارگیری فیزیکی آنها در دستگاه هستند. این فضاهای آدرس به عنوان “صفحه” شناخته می شوند و می توانند در RAM یا در هارد دیسک یا SSD شما باشند. سیستم عامل این آدرس ها را به عنوان یک مجموعه بزرگ از حافظه می بیند که به عنوان “فضای آدرس” شناخته می شود.
حافظه مجازی از این واقعیت استفاده می کند که تمام حافظه هایی که در تئوری استفاده میشوند همیشه استفاده نمیشوند. برنامه های موجود در حافظه به صفحات تقسیم میشوند و بخشهایی که هسته آن را غیرضروری میداند، «تعویض میشوند» یا به هارد دیسک منتقل میشوند. در صورت نیاز، میتوان آنها را «معاوضه کرد» یا به RAM بازگرداند.
فضای مورد استفاده برای حافظه مجازی روی یک درایو به عنوان “backing store” یا “swap space” شناخته می شود. در دنیای ویندوز، معمولاً به عنوان یک فایل پیاده سازی می شود که به عنوان “فایل swap” شناخته می شود. انجام این کار در لینوکس نیز امکان پذیر است، اما استفاده از پارتیشن دیسک اختصاصی بسیار رایج تر است.
فایلهای Swap در لینوکس معمولاً برای سیستمهای حداقلی یا تعبیه شده رزرو میشوند، و معمول است که سیستم های دوم بدون حافظه مجازی به طور کامل اجرا شوند، زیرا سیستم عامل های تعبیه شده باید کوچک باشند.
نتیجه حافظه مجازی این است که می توان برنامه های بزرگ را با استفاده از حافظه بیشتر از RAM فیزیکی در دستگاه خود اجرا کرد، مشابه اینکه کارت اعتباری به شما امکان می دهد با پولی که در حساب بانکی خود دارید، خریدهای بزرگ انجام دهید. مانند کارت اعتباری، حافظه مجازی در مواقعی که به آن نیاز دارید مفید است، اما نمی خواهید استفاده از آن را بیش از حد افزایش دهید.
حافظه مجازی همچنین به توسعه دهندگان این امکان را می دهد که بدون نیاز به دانستن نحوه سازماندهی حافظه رایانه برنامه های کاربردی ایجاد کنند.
نقطه ضعف اصلی حافظه مجازی از نظر تاریخی، کند تر بودن هارد دیسک ها نسبت به RAM بوده است. اگر دستگاهی حافظه RAM کافی نداشته باشد، سیستم می تواند به طور بی پایان صفحات را داخل و خارج کند، فرآیندی که به نام «Thrashing» شناخته میشود. این مسئله در رایانه های شخصی مدرن با RAM بیشتر و SSD های سریع تر که جایگزین هارد دیسکهای مکانیکی میشوند کمتر وجود دارد، اما هنوز هم باید از آن آگاه بود.
پارتیشن های Swap لینوکس


همانطور که قبلا ذکر شد، روش معمول برای تنظیم حافظه مجازی در لینوکس، استفاده از یک پارتیشن دیسک اختصاصی است. ابزار نصب سخت افزار شما را بررسی می کند و یک طرح پارتیشن بندی که شامل یک پارتیشن swap است پیشنهاد می کند.
همچنین می توانید پارتیشن های swap را پس از نصب اضافه کنید. اگر می خواهید یک پارتیشن جدید به درایو موجود اضافه کنید، باید از یک ابزار پارتیشن بندی غیرمخرب مانند GParted استفاده کنید. مطمئن شوید که “Swap لینوکس” را به عنوان سیستم فایل برای پارتیشن خود انتخاب کرده اید.
بعد از اینکه پارتیشن خود را ایجاد کردید، از دستور mkswap برای فرمت پارتیشن خود استفاده کنید.
sudo mkswap /dev/sdX
اکنون باید /etc/fstab خود را به عنوان root ویرایش کنید تا پارتیشن swap خود را اضافه کنید. این خط که به فایل اضافه شده است، یک پارتیشن swap را تنظیم می کند تا در زمان بوت نصب شود:
/dev/sdX none swap defaults 0 0
اکنون از دستور swapon برای فعال کردن فضای swap جدید خود استفاده کنید، جایی که sdX نام پارتیشن swap شما است:
sudo swapon /dev/sdX
استفاده از Swap Files در لینوکس
تنظیم یک فایل swap در لینوکس با استفاده از خط فرمان آسان است. اگر نمیخواهید درایو خود را مجدداً پارتیشن بندی کنید یا /etc/fstab را ویرایش کنید، ممکن است بخواهید این کار را انجام دهید. یک روش استفاده از Fallocate است:
به عنوان مثال، برای ایجاد یک فایل Swap 2 گیگابایتی:
sudo fallocate -l 2G /path/to/swapfile
به عنوان جایگزین، می توانید از دستور dd برای ایجاد فایل swap استفاده کنید.
sudo dd if=/dev/zero of=/path/to/swapfile bs=1024 count=2048
دستگاه /dev/zero دستگاه خاصی است که “0” را خروجی می دهد. کاری که این دستور dd انجام می دهد این است که یک فایل بلوک دو گیگابایتی خالی با استفاده از بلوک های 1024 کیلوبایتی مناسب برای استفاده به عنوان فضای مبادله ایجاد می کند.
سپس می توانید از دستورات mkswap و swapon با یک فایل swap همانطور که با یک پارتیشن swap استفاده می کنید استفاده کنید:
sudo mkswap /path/to/swapfile
sudo swapon /path/to/swapfile
ممکن است تعجب کنید که چه زمانی باید از یک فایل swap یا یک پارتیشن اختصاصی برای فضای swap خود استفاده کنید. انتخاب آسان است: در بیشتر شرایط، شما باید از یک پارتیشن استفاده کنید. این بهترین انتخاب برای دسکتاپ لینوکس یا سرور است. طرح پارتیشن پیشنهادی توسط نصب کننده معمولاً روی دسکتاپ لینوکس تک کاربره مناسب است.
اگر لینوکس را در یک ماشین مجازی، روی یک سیستم کوچک جاسازی شده اجرا می کنید، یا فقط نمی خواهید سیستم لینوکس موجود خود را دوباره پارتیشن بندی کنید، ممکن است بخواهید از فایل swap استفاده کنید.
فضای Swap چقدر است؟
برای سالیان زیاد، توصیه استاندارد برای میزان فضای Swap مورد نیاز دو برابر RAM فیزیکی است. با درایوهای بزرگ و مقدار حافظه ای که حتی ارزان ترین رایانه های شخصی نیز با آن ها عرضه می شوند، این قانون ممکن است زیر سوال برود.
در بسیاری از سیستم ها، اگر top یا htop را بررسی کنید، حتی ممکن است متوجه شوید که حتی اگر سیستم خود را به این ترتیب تنظیم کنید، فضای Swap شما اصلا استفاده نمی شود.
با این حال، دو برابر حافظه فیزیکی یک نقطه شروع خوب و یک بیمه نامه است اگر تقاضاهای بیشتری از حافظه داشته باشید. در صورت لزوم می توانید تغییراتی در سیستم خود ایجاد کنید. اگر سیستم شما از تمام RAM شما استفاده می کند، ممکن است کامپیوتر هنگام استفاده از حافظه مجازی با مشکلات عملکردی مواجه شود.
رایانه میتواند به Swapping در داخل و خارج ادامه دهد، فرآیندی که به نام thrashing شناخته میشود و باعث میشود که به نظر پاسخگو نباشد. اگر هنوز یک هارد دیسک مکانیکی دارید، اغلب می توانید به طور مداوم دسترسی به آن را بشنوید.
این روزها موضوع بسیار کمتری است زیرا میزان RAM در ارزان ترین رایانه های شخصی نیز بیش از حد کافی است، به علاوه سرعت SSD ها بسیار سریعتر از هارد دیسک های قدیمی است. هنوز هم چیزی است که باید از آن آگاه باشید.
ساده ترین راه برای رفع این مشکل این است که فقط RAM بیشتری به دستگاه خود اضافه کنید. اگر این امکان پذیر نیست، ممکن است سعی کنید “Swappiness” هسته لینوکس را تنظیم کنید.
عدد swappiness تعیین می کند که هسته چقدر در حافظه مجازی فرو می رود. از 0 تا 100 متغیر است. تنظیم آن روی 0 به این معنی است که لینوکس به هیچ وجه تعویض نمی شود، در حالی که در 100، در هر فرصتی تعویض می شود. پیش فرض در اکثر سیستم ها 60 است.
برای تغییر موقت swappiness، از دستور sysctl استفاده کنید:
sudo sysctl vm.swappiness=20
عدد “20” در آن دستور تا زمانی که راه اندازی مجدد نکنید، شماره تعویض خواهد بود. برای تغییر دائمی آن، فایل /etc/sysctl.conf را به عنوان root ویرایش کنید و خط “vm.swappiness=[swappiness number]” را قرار دهید، جایی که “[swappiness number]” شماره تعویض مورد نظر شما است. این یک توقف خواهد بود تا زمانی که بتوانید RAM بیشتری نصب کنید.
حافظه مجازی باعث می شود سیستم لینوکس شما به خوبی کار کند
حافظه مجازی جزء سیستمعاملهای مدرن از جمله لینوکس است که باعث میشود رایانه شما به خوبی کار کند. می توانید از فایل swap استفاده کنید، اما روش معمول یک پارتیشن اختصاصی است. لازم نیست زیاد به آن فکر کنید، اما پارتیشنهای تعویض لینوکس و فایلهای مبادله به راحتی قابل تنظیم و عیب یابی هستند.
بسیاری از این توصیه ها برای سیستم های دیگر از جمله ویندوز نیز قابل اجرا است، حتی اگر روش های تنظیم حافظه مجازی متفاوت باشد.