Forwarded from PhiloLearn | فیلولرن
مدیریت حافظه یکی از مهمترین قسمتهای سیستم عامل هستش که مستقیما روی پرفورمنس سیستم تاثیر میذاره. سیستم عامل وظیفه داره حافظه فیزیکی و مجازی رو بین پروسسها تقسیم کنه و ازشون محافظت کنه.
توی سیستمهای مدرن، حافظه به صورت سگمنت و پیج مدیریت میشه. هر پیج معمولا ۴ کیلوبایت هستش و MMU (Memory Management Unit) مسئول ترجمه آدرسهای مجازی به فیزیکی هستش. این کار با کمک TLB یا Translation Lookaside Buffer انجام میشه که یه کش سختافزاری برای نگهداری آدرسهای پرکاربرد هستش.
وقتی یه پروسس لانچ میشه، سیستم عامل براش یه فضای آدرس مجازی میسازه که شامل چند تا سگمنت هستش: کد (text)، دیتای initialize شده، دیتای initialize نشده (BSS)، هیپ و استک. هر کدوم از این سگمنتها پرمیشنهای خاص خودشون رو دارن. مثلا سگمنت کد فقط read-only هستش تا از اجرای کد مخرب جلوگیری بشه.
سیستم عامل از تکنیکهای مختلفی مثل demand paging استفاده میکنه. با این تکنیک، پیجها فقط موقعی که بهشون نیاز هست به حافظه فیزیکی لود میشن. اگه پیجی که پروسس میخواد توی رم نباشه، page fault رخ میده و سیستم عامل اون پیج رو از دیسک به رم میاره.
برای مدیریت بهتر حافظه، سیستم عامل از الگوریتمهای page replacement استفاده میکنه. یکی از معروفترینهاشون LRU (Least Recently Used) هستش که پیجهایی که مدت زیادی استفاده نشدن رو از رم میندازه بیرون. توی لینوکس از الگوریتمهای پیچیدهتری مثل CLOCK و یا نسخههای بهبود یافته LRU استفاده میشه.
مموری منیجمنت مدرن از تکنیکهای دیگهای مثل memory mapping و copy-on-write هم استفاده میکنه. با memory mapping میشه فایلها رو مستقیم به حافظه مپ کرد و با copy-on-write میشه از کپی کردن غیرضروری دیتا جلوگیری کرد. این تکنیکها توی fork کردن پروسسها خیلی کاربرد دارن.
توی سیستمهای مدرن، مموری منیجمنت از NUMA (Non-Uniform Memory Access) هم پشتیبانی میکنه که باعث میشه پرفورمنس روی سیستمهای چند پردازندهای بهتر بشه. توی این آرکیتکچر، زمان دسترسی به حافظه بستگی به لوکیشن فیزیکی پردازنده و حافظه داره.
#Linux #OS #Memory_Management
@PhiloLearn
توی سیستمهای مدرن، حافظه به صورت سگمنت و پیج مدیریت میشه. هر پیج معمولا ۴ کیلوبایت هستش و MMU (Memory Management Unit) مسئول ترجمه آدرسهای مجازی به فیزیکی هستش. این کار با کمک TLB یا Translation Lookaside Buffer انجام میشه که یه کش سختافزاری برای نگهداری آدرسهای پرکاربرد هستش.
وقتی یه پروسس لانچ میشه، سیستم عامل براش یه فضای آدرس مجازی میسازه که شامل چند تا سگمنت هستش: کد (text)، دیتای initialize شده، دیتای initialize نشده (BSS)، هیپ و استک. هر کدوم از این سگمنتها پرمیشنهای خاص خودشون رو دارن. مثلا سگمنت کد فقط read-only هستش تا از اجرای کد مخرب جلوگیری بشه.
سیستم عامل از تکنیکهای مختلفی مثل demand paging استفاده میکنه. با این تکنیک، پیجها فقط موقعی که بهشون نیاز هست به حافظه فیزیکی لود میشن. اگه پیجی که پروسس میخواد توی رم نباشه، page fault رخ میده و سیستم عامل اون پیج رو از دیسک به رم میاره.
برای مدیریت بهتر حافظه، سیستم عامل از الگوریتمهای page replacement استفاده میکنه. یکی از معروفترینهاشون LRU (Least Recently Used) هستش که پیجهایی که مدت زیادی استفاده نشدن رو از رم میندازه بیرون. توی لینوکس از الگوریتمهای پیچیدهتری مثل CLOCK و یا نسخههای بهبود یافته LRU استفاده میشه.
مموری منیجمنت مدرن از تکنیکهای دیگهای مثل memory mapping و copy-on-write هم استفاده میکنه. با memory mapping میشه فایلها رو مستقیم به حافظه مپ کرد و با copy-on-write میشه از کپی کردن غیرضروری دیتا جلوگیری کرد. این تکنیکها توی fork کردن پروسسها خیلی کاربرد دارن.
توی سیستمهای مدرن، مموری منیجمنت از NUMA (Non-Uniform Memory Access) هم پشتیبانی میکنه که باعث میشه پرفورمنس روی سیستمهای چند پردازندهای بهتر بشه. توی این آرکیتکچر، زمان دسترسی به حافظه بستگی به لوکیشن فیزیکی پردازنده و حافظه داره.
#Linux #OS #Memory_Management
@PhiloLearn