حافظه مجازی به سیستم عامل کمک می کند تا فرآیندهای خود را بدون وقفه انجام دهد. در اینجا نحوه مدیریت حافظه مجازی در لینوکس آورده شده است.
حافظه مجازی یکی از آن چیزهایی است که زیربنای سیستم عامل های مدرن است، اما معمولاً به آن فکر نمی کنید مگر اینکه مشکلی داشته باشید. توزیعهای لینوکس از شما میخواهند که فضای حافظه مجازی خود (پارتیشنهای تعویض) را در حین نصب تنظیم کنید، اما بیشتر مبتدیان از مفید بودن آن آگاه نیستند.
در اینجا همه چیزهایی است که باید در مورد حافظه مجازی در لینوکس بدانید.
حافظه مجازی چیست؟
حافظه مجازی راهی برای نمایش حافظه شما است که از حافظه فیزیکی دستگاه شما انتزاع شده است. هم از رم و هم از فضای ذخیره سازی شما استفاده می کند، خواه روی هارد دیسک سنتی یا SSD باشد.
در لینوکس این کار در سطح هسته و سخت افزار انجام می شود. CPU دارای یک قطعه سخت افزاری به نام Memory Management Unit (MMU) است که آدرس های حافظه فیزیکی را به مجازی تبدیل می کند. این آدرس ها مستقل از محل قرارگیری فیزیکی آنها در دستگاه هستند. این فضاهای آدرس به عنوان “صفحه” شناخته می شوند و می توانند در RAM یا در هارد دیسک یا SSD شما باشند. سیستم عامل این آدرس ها را به عنوان یک مجموعه بزرگ از حافظه می بیند که به عنوان “فضای آدرس” شناخته می شود.
حافظه مجازی از این واقعیت استفاده میکند که تمام حافظههایی که در تئوری استفاده میشوند همیشه استفاده نمیشوند. برنامههای موجود در حافظه به صفحات تقسیم میشوند و بخشهایی که هسته آن را غیرضروری میداند، «تعویض میشوند» یا به هارد دیسک منتقل میشوند. در صورت نیاز، می توان آنها را “معاوضه” کرد یا به رم بازگرداند.
فضای مورد استفاده برای حافظه مجازی روی یک درایو به عنوان “backing store” یا “swap space” شناخته می شود. در دنیای ویندوز، معمولاً به عنوان یک فایل پیاده سازی می شود که به عنوان “فایل swap” شناخته می شود. انجام این کار در لینوکس نیز امکان پذیر است، اما استفاده از پارتیشن دیسک اختصاصی بسیار رایج تر است.
فایلهای Swap در لینوکس معمولاً برای سیستمهای حداقلی یا تعبیهشده رزرو میشوند، و معمول است که سیستمهای دوم بدون حافظه مجازی به طور کامل اجرا شوند، زیرا سیستمعاملهای تعبیهشده باید کوچک باشند.
نتیجه حافظه مجازی این است که میتوان برنامههای بزرگ را با استفاده از حافظه بیشتر از رم فیزیکی دستگاه خود اجرا کرد، مشابه اینکه کارت اعتباری به شما امکان میدهد با پولی که در حساب بانکی خود دارید، خریدهای بزرگ انجام دهید. مانند کارت اعتباری، حافظه مجازی در مواقعی که به آن نیاز دارید مفید است، اما نمی خواهید استفاده از آن را بیش از حد افزایش دهید.
حافظه مجازی همچنین به توسعه دهندگان این امکان را می دهد که بدون نیاز به دانستن نحوه سازماندهی حافظه رایانه برنامه های کاربردی ایجاد کنند.
نقطه ضعف اصلی حافظه مجازی از نظر تاریخی، کندتر بودن هارد دیسک ها نسبت به RAM بوده است. اگر دستگاهی حافظه رم کافی نداشته باشد، سیستم میتواند به طور بیپایان صفحات را به داخل و خارج کند، فرآیندی که به نام «تراشینگ» شناخته میشود. این مسئله در رایانههای شخصی مدرن با حافظه رم بیشتر و SSDهای سریعتر که جایگزین هارد دیسکهای مکانیکی میشوند کمتر وجود دارد، اما هنوز هم باید از آن آگاه بود.
پارتیشن های تعویض لینوکس
همانطور که قبلا ذکر شد، روش معمول برای تنظیم حافظه مجازی در لینوکس، استفاده از یک پارتیشن دیسک اختصاصی است. ابزار نصب سخت افزار شما را بررسی می کند و یک طرح پارتیشن بندی که شامل یک پارتیشن 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 را ویرایش کنید، ممکن است بخواهید این کار را انجام دهید. یک روش استفاده از فالوکیت است:
به عنوان مثال، برای ایجاد یک فایل مبادله 2 گیگابایتی:
sudo fallocate -l 2G /path/to/swapfile
به عنوان جایگزین، می توانید از دستور dd برای ایجاد فایل swap استفاده کنید.
sudo dd if=/dev/zero of=/path/to/swapfile bs=1024 count=2048
مطمئن شوید که از دستور dd به درستی استفاده می کنید، زیرا اشتباه گرفتن فایل infile و outfile می تواند باعث از دست رفتن اطلاعات شود. به همین دلیل، fallocate روش ارجح است.
دستگاه /dev/zero دستگاه خاصی است که “0” را خروجی می دهد. کاری که این دستور dd انجام می دهد این است که یک فایل بلوک دو گیگابایتی خالی با استفاده از بلوک های 1024 کیلوبایتی مناسب برای استفاده به عنوان فضای مبادله ایجاد می کند.
سپس می توانید از دستورات mkswap و swapon با یک فایل swap همانطور که با یک پارتیشن swap استفاده می کنید استفاده کنید:
sudo mkswap /path/to/swapfile
sudo swapon /path/to/swapfile
ممکن است تعجب کنید که چه زمانی باید از یک فایل swap یا یک پارتیشن اختصاصی برای فضای swap خود استفاده کنید. انتخاب آسان است: در بیشتر شرایط، شما باید از یک پارتیشن استفاده کنید. این بهترین انتخاب برای دسکتاپ لینوکس یا سرور است. طرح پارتیشن پیشنهادی توسط نصب کننده معمولاً روی دسکتاپ لینوکس تک کاربره مناسب است.
اگر لینوکس را در یک ماشین مجازی، روی یک سیستم کوچک جاسازی شده اجرا می کنید، یا فقط نمی خواهید سیستم لینوکس موجود خود را دوباره پارتیشن بندی کنید، ممکن است بخواهید از فایل swap استفاده کنید.
فضای مبادله چقدر است؟
برای سالیان متمادی، توصیه استاندارد برای میزان فضای تعویض مورد نیاز دو برابر رم فیزیکی است. با درایوهای بزرگ و مقدار حافظه ای که حتی ارزان ترین رایانه های شخصی نیز با آن ها عرضه می شوند، این قانون ممکن است زیر سوال برود.
در بسیاری از سیستم ها، اگر بالا یا htop را بررسی کنید، حتی ممکن است متوجه شوید که حتی اگر سیستم خود را به این ترتیب تنظیم کنید، فضای تعویض شما اصلا استفاده نمی شود.
با این حال، دو برابر حافظه فیزیکی یک نقطه شروع خوب و یک بیمه نامه است اگر تقاضاهای بیشتری از حافظه داشته باشید. در صورت لزوم می توانید تغییراتی در سیستم خود ایجاد کنید. اگر سیستم شما از تمام RAM شما استفاده می کند، ممکن است کامپیوتر هنگام استفاده از حافظه مجازی با مشکلات عملکردی مواجه شود.
رایانه میتواند به جابجایی در داخل و خارج ادامه دهد، فرآیندی که به نام thrashing شناخته میشود و به نظر میرسد که پاسخگو نیست. اگر هنوز یک هارد دیسک مکانیکی دارید، اغلب می توانید به طور مداوم به آن دسترسی داشته باشید.
این روزها موضوع بسیار کمتری است زیرا میزان رم در ارزان ترین رایانه های شخصی نیز بیش از حد کافی است، به علاوه سرعت SSD ها بسیار سریعتر از هارد دیسک های قدیمی است. هنوز هم چیزی است که باید از آن آگاه باشید.
ساده ترین راه برای رفع این مشکل این است که فقط RAM بیشتری به دستگاه خود اضافه کنید. اگر این امکان پذیر نیست، ممکن است سعی کنید “تغییر” هسته لینوکس را تنظیم کنید.
عدد swappiness تعیین می کند که هسته چقدر در حافظه مجازی فرو می رود. از 0 تا 100 متغیر است. تنظیم آن روی 0 به این معنی است که لینوکس به هیچ وجه تعویض نمی شود، در حالی که در 100، در هر فرصتی تعویض می شود. پیش فرض در اکثر سیستم ها 60 است.
برای تغییر موقت swappiness، از دستور sysctl استفاده کنید:
sudo sysctl vm.swappiness=20
“20” در آن دستور تا زمانی که راه اندازی مجدد نکنید، شماره تعویض خواهد بود. برای تغییر دائمی آن، فایل /etc/sysctl.conf را به عنوان root ویرایش کنید و خط “vm.swappiness=[swappiness number]” را قرار دهید، جایی که “[swappiness number]” شماره تعویض مورد نظر شما است. تا زمانی که بتوانید رم بیشتری نصب کنید، این یک توقف خواهد بود.
حافظه مجازی باعث می شود سیستم لینوکس شما به خوبی کار کند
حافظه مجازی جزء سیستمعاملهای مدرن از جمله لینوکس است که باعث میشود رایانه شما به خوبی کار کند. می توانید از فایل swap استفاده کنید، اما روش معمول یک پارتیشن اختصاصی است. لازم نیست زیاد به آن فکر کنید، اما پارتیشنهای تعویض لینوکس و فایلهای مبادله به راحتی تنظیم و عیبیابی میشوند.
بسیاری از این توصیه ها برای سیستم های دیگر از جمله ویندوز نیز قابل اجرا است، حتی اگر روش های تنظیم حافظه مجازی متفاوت باشد.