مدیریت حافظه (سیستم عامل)

در سیستم‌عامل‌ها، **[[مدیریت حافظه]]** وظیفه‌ای است که مسئول مدیریت حافظه اصلی رایانه می‌باشد. این وظیفه، وضعیت هر بخش از حافظه را — چه اختصاص‌داده‌شده و چه آزاد — پیگیری می‌کند. مدیریت حافظه تعیین می‌کند که چگونه حافظه میان فرایندهای مختلف تقسیم شود و هر فرایند به کدام بخش از حافظه دسترسی داشته باشد.

زمانی که بخشی از حافظه به یک فرایند اختصاص می‌یابد، ماژول مدیریت حافظه مسئول محافظت از آن در برابر دسترسی سایر فرایندها است. همچنین، هنگامی که یک فرایند دیگر به حافظه نیاز ندارد یا خاتمه یافته است، این ماژول حافظه را بازیابی می‌کند.

## تکنیک‌های مدیریت حافظه

### تخصیص پیوستهٔ تک

تخصیص تک، ساده‌ترین تکنیک مدیریت حافظه است. در این روش، تمام حافظه اصلی رایانه — معمولاً به جز بخش کوچکی که برای سیستم‌عامل رزرو شده — در اختیار یک برنامهٔ واحد قرار می‌گیرد. سیستم‌عامل ام‌اس-داس نمونه‌ای از سیستم‌هایی است که به این شیوه حافظه را تخصیص می‌دهند. یک سیستم جاسازی‌شده (Embedded system) که تنها یک برنامه را اجرا می‌کند نیز ممکن است از این تکنیک استفاده کند.

سیستمی که از تخصیص پیوستهٔ تک استفاده می‌کند، ممکن است همچنان چندوظیفگی (Multitasking) داشته باشد، اما این کار را با Swapping محتوای حافظه برای سوئیچ بین کاربران انجام می‌دهد. نسخه‌های اولیهٔ سیستم‌عامل MUSIC نیز از این تکنیک بهره می‌بردند.

### تخصیص پارتیشن‌بندی‌شده

در تخصیص پارتیشن‌بندی‌شده، حافظه اصلی به چندین پارتیشن (بخش حافظه) تقسیم می‌شود که معمولاً نواحی پیوسته‌ای از حافظه هستند. هر پارتیشن ممکن است شامل تمام اطلاعات مربوط به یک کار یا وظیفهٔ خاص باشد. در این روش، مدیریت حافظه شامل تخصیص یک پارتیشن به یک وظیفه هنگام شروع و آزادسازی آن هنگام پایان وظیفه است.

تخصیص پارتیشن‌بندی‌شده معمولاً به پشتیبانی سخت‌افزاری نیاز دارد تا از تداخل وظایف با یکدیگر یا با سیستم‌عامل جلوگیری شود. سیستم IBM System/360 از روش «قفل و کلید» (lock-and-key) استفاده می‌کند. سیستم‌های UNIVAC 1108، PDP-6 و PDP-10، و سری GE-600 از ثبات‌های پایه و مرز (base and bounds registers) برای تعیین محدوده‌های قابل‌دسترسی حافظه استفاده می‌کنند.

پارتیشن‌ها ممکن است ایستا باشند — یعنی در زمان راه‌اندازی سیستم (IPL) یا توسط اپراتور رایانه تعریف شوند — یا پویا، به این معنا که به‌طور خودکار برای یک کار خاص ایجاد شوند. سیستم‌عامل IBM System/360 با قابلیت «چندبرنامه‌ای با تعداد ثابت وظیفه» (MFT) نمونه‌ای از پارتیشن‌بندی ایستا است، و «چندبرنامه‌ای با تعداد متغیر وظیفه» (MVT) مثالی از پارتیشن‌بندی پویا محسوب می‌شود. در سیستم‌های MVT و جانشینان آن، اصطلاح «ناحیه» (region) برای تمایز پارتیشن‌های پویا از پارتیشن‌های ایستا استفاده می‌شود.

برخی سیستم‌ها مانند UNIVAC 1108، PDP-6، PDP-10 و GE-600 از پارتیشن‌های قابل‌جابجایی با استفاده از ثبات پایه بهره می‌برند. این پارتیشن‌ها را می‌توان به‌گونه‌ای فشرده‌سازی کرد که قطعات بزرگ‌تری از حافظهٔ فیزیکی پیوسته فراهم شود. در این روش، نواحی در حال استفادهٔ حافظه به هم فشرده می‌شوند تا «حفره‌ها» یا نواحی بدون استفاده‌ای که بر اثر پایان یافتن وظایف به‌وجود آمده‌اند، حذف شوند.

برخی سیستم‌ها امکان جابه‌جایی پارتیشن‌ها به حافظه ثانویه را برای آزادسازی حافظهٔ بیشتر فراهم می‌کنند. نسخه‌های اولیهٔ گزینهٔ اشتراک زمانی شرکت IBM یا همان TSO (Time Sharing Option)، کاربران را بین پارتیشن‌های اشتراک زمانی جابه‌جا می‌کردند.

### مدیریت حافظه صفحه‌بندی‌شده

در تخصیص صفحه‌بندی‌شده، حافظه اصلی رایانه به واحدهایی با اندازهٔ ثابت تقسیم می‌شود که «چارچوب صفحه» (page frame) نام دارند، و فضای نشانی‌دهی مجازی برنامه نیز به صفحاتی با همان اندازه تقسیم می‌شود. واحد مدیریت حافظه (MMU) در سخت‌افزار، نگاشت بین صفحات و چارچوب‌ها را انجام می‌دهد. حافظهٔ فیزیکی می‌تواند به‌صورت مبتنی بر صفحه تخصیص یابد، در حالی که فضای نشانی‌دهی از دید برنامه‌نویس به‌صورت پیوسته دیده می‌شود.

معمولاً در مدیریت حافظهٔ صفحه‌بندی‌شده، هر وظیفه در فضای نشانی‌دهی مخصوص به خود اجرا می‌شود. با این حال، برخی سیستم‌عامل‌ها با فضای نشانی‌دهی یکپارچه وجود دارند که همهٔ فرایندها را در یک فضای نشانی‌دهی اجرا می‌کنند؛ مانند IBM i که همهٔ فرایندها را در یک فضای نشانی‌دهی بزرگ اجرا می‌کند، و همچنین سیستم‌های IBM OS/VS1 و OS/VS2 (SVS) که تمام وظایف را در یک فضای نشانی‌دهی مجازی ۱۶ مگابایتی اجرا می‌کردند.

حافظهٔ صفحه‌بندی‌شده می‌تواند به‌صورت برحسب تقاضا (demand-paged) نیز باشد، به این معنا که سیستم در صورت نیاز، صفحات را بین حافظهٔ اصلی و حافظه ثانویه جابه‌جا می‌کند.

### مدیریت حافظه قطعه‌ای

مدیریت حافظه قطعه‌ای، تنها تکنیکی است که به برنامهٔ کاربر یک «فضای آدرس‌دهی خطی و پیوسته» ارائه نمی‌دهد.  
قطعه‌ها (Segments) نواحی‌ای از حافظه هستند که معمولاً به یک گروه منطقی از اطلاعات مانند یک رویهٔ کد یا یک آرایهٔ داده‌ای مربوط می‌شوند. قطعه‌ها نیاز به پشتیبانی سخت‌افزاری دارند که معمولاً به‌صورت یک «جدول قطعه» (Segment Table) پیاده‌سازی می‌شود و شامل نشانی فیزیکی قطعه در حافظه، اندازهٔ آن، و اطلاعات دیگری مانند بیت‌های محافظت دسترسی و وضعیت (مبادله‌شده، فعال و غیره) است.

قطعه‌بندی نسبت به دیگر روش‌ها، امکان محافظت بهتری از دسترسی‌ها فراهم می‌کند، چرا که ارجاع‌های حافظه نسبی به یک قطعهٔ خاص هستند و سخت‌افزار اجازه نمی‌دهد برنامه به حافظه‌ای خارج از محدودهٔ تعریف‌شده برای آن قطعه دسترسی پیدا کند.

قطعه‌بندی را می‌توان با یا بدون پشتیبانی از صفحه‌بندی حافظه پیاده‌سازی کرد. در صورت نبود صفحه‌بندی، قطعه، واحد فیزیکی است که در صورت نیاز جابه‌جا (swap) می‌شود. اما با وجود پشتیبانی از صفحه‌بندی، صفحات معمولاً واحد جابه‌جایی هستند و قطعه‌بندی تنها یک لایهٔ امنیتی اضافی فراهم می‌کند.

نشانی‌ها در سیستم‌های قطعه‌ای معمولاً شامل شناسهٔ قطعه و آفست نسبی نسبت به آدرس پایهٔ آن قطعه (که صفر در نظر گرفته می‌شود) هستند.

معماری اینتل IA-32 (معروف به x86) به یک فرایند اجازه می‌دهد تا تا ۱۶٬۳۸۳ قطعه داشته باشد که اندازهٔ هر کدام می‌تواند تا ۴ گیگابایت باشد. قطعه‌های IA-32 زیرمجموعه‌هایی از فضای آدرس‌دهی خطی رایانه‌اند که توسط سخت‌افزار نشانی‌دهی مجازی و صفحه‌بندی حافظه فراهم شده است.

Multics احتمالاً شناخته‌شده‌ترین سیستم در زمینهٔ پیاده‌سازی حافظه قطعه‌ای است. قطعه‌های مولتیکس زیرمجموعه‌هایی از حافظهٔ فیزیکی رایانه بودند که شامل حداکثر ۲۵۶ صفحه بودند. هر صفحه در مولتیکس شامل ۱٬۰۲۴ واژهٔ ۳۶-بیتی بود که اندازهٔ هر قطعه را به حداکثر ۱ مگابایت می‌رساند (با در نظر گرفتن بایت‌های ۹ بیتی که در مولتیکس استفاده می‌شدند). هر فرایند می‌توانست تا ۴٬۰۴۶ قطعه داشته باشد.

## Rollout/Rollin

Rollout/Rollin (RO/RI) یک تکنیک مدیریت حافظه در سیستم‌عامل‌های رایانه‌ای است که طی آن تمام کدها و داده‌های اختصاصی (غیراشتراکی) یک برنامهٔ در حال اجرا، به‌طور کامل به حافظهٔ کمکی (مانند دیسک یا درام) منتقل می‌شود تا فضای حافظهٔ اصلی برای اجرای وظیفه‌ای دیگر آزاد گردد. برنامه‌ها ممکن است به صورت «در صورت پایان اجرا یا هنگام انتظار برای رخداد طولانی‌مدت» از حافظهٔ اصلی خارج شوند.

Rollout/Rollin معمولاً در سیستم‌های اشتراک زمانی کاربرد داشت، جایی که «زمان فکر کردن» کاربر نسبت به زمان موردنیاز برای جابه‌جایی برنامه بسیار طولانی‌تر بود.

برخلاف حافظه مجازی (مانند صفحه‌بندی یا قطعه‌بندی)، تکنیک Rollout/Rollin به سخت‌افزار خاصی برای مدیریت حافظه نیاز ندارد؛ با این حال، در صورت نداشتن سخت‌افزار جابه‌جایی مانند نقشهٔ حافظه یا ثبات‌های پایه و حد (base and bounds)، برنامه باید دقیقاً به مکان اولیهٔ خود در حافظه بازگردانده شود. این روش تا حد زیادی با معرفی حافظهٔ مجازی منسوخ شده است.

Rollout/Rollin به‌عنوان یکی از قابلیت‌های اختیاری سیستم‌عامل OS/360 در نسخهٔ Multiprogramming with a Variable number of Tasks (MVT) ارائه شد.

این تکنیک امکان گسترش موقتی و پویا برای یک کار خاص را فراتر از اندازهٔ تعیین‌شدهٔ اولیهٔ حافظه‌اش فراهم می‌کند. زمانی که یک کار به فضای بیشتری نیاز دارد، سیستم با استفاده از Rollout/Rollin سعی می‌کند از فضای ذخیره‌سازی اختصاص‌نیافته استفاده کند. اگر فضای اختصاص‌نیافته‌ای وجود نداشته باشد، برنامه‌ای دیگر از حافظهٔ اصلی خارج می‌شود تا فضای آن در اختیار کار اول قرار گیرد. پس از اتمام کار اول، فضای اشغال‌شده یا (۱) به‌عنوان حافظهٔ آزاد باقی می‌ماند، یا (۲) دوباره به برنامهٔ قبلی اختصاص داده می‌شود تا به حافظهٔ اصلی بازگردد (Rollin شود).

در سیستم‌عامل OS/360، تکنیک Rollout/Rollin فقط برای کارهای دسته‌ای (batch jobs) استفاده می‌شد و Rollin تنها زمانی رخ می‌داد که مرحلهٔ فعلی کار، که حافظه را قرض گرفته بود، به پایان برسد.

## همچنین ببینید
* حفاظت از حافظه 

## منابع

رده:مدیریت حافظه
رده:سیستم‌عامل‌ها