حافظه مجازی (Virtual Memory) در سیستم عامل – راهنمای جامع


یک رایانه میتواند حافظهای بیشتر از آن مقدار که به صورت فیزیکی رویش نصب شده را آدرسدهی کند. این حافظه اضافی در عمل «حافظه مجازی» (Virtual Memory) نامیده میشود و بخشی از هارددیسک است که برای شبیهسازی RAM رایانه اختصاص یافته است.
مزیت اصلی ملموس این روش آن است که برنامهها میتوانند بزرگتر از حافظه فیزیکی باشند. حافظه مجازی دو مقصود اصلی دارد. نخست این که به ما امکان میدهد تا با بهرهگیری از دیسک، حافظه فیزیکی را گسترش دهیم. دوم این که امکان حفاظت از حافظه را فراهم میکند، زیرا هر آدرس مجازی به یک آدرس فیزیکی ترجمه میشود.
در ادامه موقعیتهایی که لازم نیست کل برنامه وارد حافظه شود را ارائه کردهایم:
- روالهای مدیریت خطای نوشته شده از سوی کاربر، تنها زمانی استفاده میشوند که خطایی در دادهها یا محاسبات رخ دهند.
- گزینهها و امکانات خاص یک برنامه که به ندرت استفاده میشوند.
- بسیاری از جدولها مقدار ثابتی از فضای آدرس را دریافت میکنند، هر چند تنها بخش کوچکی از جدول مورد استفاده قرار گیرد.
- توانایی اجرای برنامهای که تنها بخشی از آن در حافظه بارگذاری میشود، میتواند مزیتهای زیادی داشته باشد.
- تعداد عملیات I/O کمتر برای بارگذاری یا سواپ هر برنامه درون حافظه مورد نیاز خواهد بود.
- برنامه دیگر از سوی مقدار حافظه فیزیکی نصب شده روی سیستم محدود نمیشود.
- هر برنامه کاربر میتواند حافظه فیزیکی کمتری بگیرد و برنامههای بیشتری میتوانند به طور همزمان اجرا شوند که موجب افزایش استفاده و بهرهوری CPU میشود.
ریزپردازندههای مدرن به منظور استفادههای چندمنظوره طراحی شدهاند و یک واحد مدیریت حافظه یا MMU در آنها جاسازیشده است. وظیفه MMU ترجمه آدرسهای مجازی به آدرسهای فیزیکی است. مثال ساده آن به صورت زیر است:
حافظه مجازی به طور متداول به وسیله «صفحهبندی بنا به تقاضا» (demand paging) پیادهسازی میشود. آن را میتوان به وسیله سیستم قطعهبندی (segmentation) نیز پیادهسازی کرد. از «قطعهبندی بنا به تقاضا» (Demand segmentation) نیز میتوان برای ارائه حافظه مجازی استفاده کرد.
سیستم صفحهبندی بنا به تقاضا کاملاً مشابه سیستم صفحهبندی با سواپ کردن است که در آن پردازشها در حافظه جانبی میمانند و صفحهها تنها در صورت وجود تقاضا بارگذاری میشوند و نه پیشاپیش. وقتی یک سوئیچ زمینه (context switch) رخ میدهد، سیستم عامل هیچ یک از صفحههای قدیمی برنامه را از دیسک کپی نمیکند و همچنین هیچ کدام از صفحههای جدید برنامه وارد حافظه نمیشوند بلکه شروع به اجرای برنامه جدید پس از بارگذاری صفحه اول در حافظه میکند و سپس صفحههای برنامه را به محض نیاز واکشی میکند.
در زمان اجرای یک برنامه، اگر ارجاعی به یک صفحه وجود داشته باشد که در حافظه اصلی به دلیل سواپ شدن، موجود نباشد، پردازنده با این ارجاع نامعتبر حافظه به صورت یک خطای صفحه (page fault) برخورد میکند و کنترل را از برنامه به سیستم عامل انتقال میدهد تا حافظه را مجدداً به حافظه وارد کند.
مزایا
در ادامه مزیتهای «صفحهبندی بنا به تقاضا» را شرح دادهایم:
- حافظه مجازی بزرگ
- استفاده مؤثرتر از حافظه
- هیچ محدودتی برای میزان چند برنامگی وجود ندارد.
معایب
- تعداد جدولها و مقدار سربار پردازنده برای مدیریت وقفههای صفحه بزرگتر از حالتی است که از تکنیکهای ساده مدیریت صفحه استفاده میشود.
الگوریتم جایگزینی صفحه
الگوریتمهای جایگزینی صفحه تکنیکهایی هستند که سیستم عامل با استفاده از آنها در مورد این که کدام صفحهها باید سواپ شوند، یا در زمان نیاز به تخصیص یک صفحه در حافظه، روی دیسک نوشته شوند، تصمیمگیری میکند. صفحهبندی هر زمان که یک خطای صفحه رخ میدهد، صورت میگیرد و صفحه آزاد نمیتواند برای تخصیص استفاده شود، چون این صفحهها موجود نیستند یا تعداد صفحههای آزاد کمتر از صفحههای مورد نیاز هستند.
زمانی که صفحهای که برای جایگزینی انتخاب شده و دوباره مورد ارجاع قرار میگیرد، باید از روی دیسک خوانده شود و این نیازمند کامل شدن عملیات I/O است. این فرایند کیفیت الگوریتم جایگزینی صفحه را تعیین میکند. هر چه زمان انتظار برای ورود صفحه کمتر باشد، الگوریتم بهتر است.
الگوریتم جایگزینی صفحه به اطلاعات محدودی که در مورد دسترسی به صفحهها از سوی سختافزار ارائه میشود نگاه میکند و سعی میکند تصمیم بگیرد کدام صفحهها باید جایگزین شوند تا تعداد کل صفحههای از دست رفته به کمترین حد برسد و همزمان هزینه حافظه اصلی و زمان پردازنده که به خود الگوریتم اختصاص یافته بهینه باشد. الگوریتمهای متعددی برای جایگزینی صفحه وجود دارند. هر الگوریتم با اجرای آن روی رشته خاصی از ارجاع حافظه و محاسبه تعداد خطاهای صفحه مورد ارزیابی قرار میگیرد.
رشته ارجاع (Reference String)
رشته ارجاعهای حافظه به نام رشته ارجاع نامیده میشود. رشتههای ارجاع به طور مصنوعی یا به وسیله ردگیری یک سیستم مفروض و ثبت آدرس هر ارجاع حافظه ایجاد میشوند. گزینه دوم مقادیر بالایی از دادهها را تولید میکند و باید دو نکته را در نظر داشت:
- برای هر اندازه خاص از صفحه باید تنها شماره صفحه را در نظر بگریم و نه آدرس کل.
- اگر ارجاعی به صفحه p داشته باشیم، در این صورت هر ارجاع بعدی دیگر به صفحه p هرگز منجر به خطای صفحه نمیشود. صفحه p پس از نخستین ارجاع در حافظه باقی میماند و ارجاعهای بعدی بیفاصله منجر به خطا نخواهند شد.
- برای نمونه توالی آدرسهای زیر را در نظر بگیرید: 123,215,600,1234,76,96
- اگر اندازه صفحه 100 باشد، در این صورت رشته ارجاع به صورت 1,2,6,12,0,0 خواهد بود.
الگوریتم ورودی اول-خروجی اول (FIFO)
قدیمیترین صفحه در حافظه اصلی صفحهای است که برای جایگزینی انتخاب میشود. پیاده سازی الگوریتم FIFO ساده است و صفحههای قدیمی از عقب خارج و صفحات تازه از قسمت جلو وارد میشوند.
الگوریتم صفحه بهینه (Optimal Page)
الگوریتم جایگزینی صفحه بهینه، پایینترین نرخ خطای صفحه را در میان همه الگوریتمها دارند. در واقع یک الگوریتم جایگزینی صفحه بهینه وجود دارد که به نام OPT یا MIN نامیده میشود. در این الگوریتم صفحهای که برای مدت بیشتری استفاده نشده، جایگزین میشود. در این خصوص از زمان استفاده از یک صفحه برای جایگزینی بهره گرفته میشود.
الگوریتم کمترین استفاده اخیر (LRU)
صفحهای که برای مدت بیشتری در حافظه اصلی استفاده نشده، آن صفحهای است که برای جایگزینی انتخاب میشود.
پیادهسازی این الگوریتم آسان است و صفحهها با بررسی زمان استفاده شدن جایگزین میشوند.
الگوریتم بافر کردن صفحه
- برای این که یک پردازش سریعتر آغاز شود، یک pool از فریمهای آزاد نگهداری میشود.
- در زمان بروز خطای صفحه، صفحهای که باید جایگزین شود انتخاب میشود.
- صفحه جدید در فریم pool آزاد نوشته شده و جدول صفحه نشانهگذاری گشته و پردازش ریاستارت میشود.
- اینک صفحه کثیف (dirty page) روی دیسک نوشته شده و فریم نگهدارنده صفحه جایگزین در pool آزاد قرار میگیرد.
الگوریتم کمترین استفاده (LFU)
- صفحهای که کمترین تعداد استفاده را دارد، صفحهای است که برای جایگزینی انتخاب میشود.
- این الگوریتم در موقعیتهایی که یک صفحه در مرحله اولیه پردازش به شدت استفاده میشود، اما بعداً دیگر هرگز مورد استفاده قرار نمیگیرد، دچار مشکل میشود.
الگوریتم بیشترین استفاده (MFU)
- این الگوریتم بر اساس این استدلال عمل میکند که صفحهی دارای کمترین تعداد استفاده، احتمالاً به تازگی وارد حافظه شده و هنوز جای کار دارد.
در این مطلب تلاش کردیم خلاصهای از مفاهیم و الگوریتمهای حافظه مجازی را بررسی کنیم. اگر به مفاهیم مرتبط با سیستم عامل علاقهمند هستید، سری مطالب بررسی سیستم عامل وبلاگ فرادرس را دنبال کنید.
اگر این مطلب برایتان مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای علوم کامپیوتر
- آموزش سیستم های عامل
- مجموعه آموزشهای مهندسی نرمافزار
- مدیریت حافظه در سیستم عامل — راهنمای جامع
- آموزش سیستم عامل لینوکس (Linux) – مقدماتی
- حافظه مجازی چیست و چگونه میتوانید کمبود آن را جبران کنید؟
==