موضوع مقاله: حافظه مجازی | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # حافظه مجازی | مقدمه: سیستم عامل رایانه، با استفاده از ترکیبی از سخت‌افزار و نرم‌افزار، آدرس‌های حافظه مورد استفاده یک برنامه را که آدرس‌های مجازی نامیده می‌شوند، به آدرس‌های فیزیکی در حافظه کامپیوتر مرتبط می‌کند. | ## بخش 1: حافظه مجازی | فضای ذخیره‌سازی اصلی، همان‌طور که توسط یک فرایند یا کار مشاهده می‌شود، به عنوان یک فضای آدرس پشت سر هم یا مجموعه ای از بخش های(segment) کنار هم ظاهر می‌شود. سیستم عامل فضاهای آدرس مجازی و اختصاص حافظه واقعی به حافظه مجازی را مدیریت می‌کند. نرم‌افزارهای موجود در سیستم عامل ممکن است این قابلیت‌ها را گسترش دهند تا فضایی از آدرس مجازی فراهم شود که می‌تواند از ظرفیت حافظه واقعی فراتر رود و بنابراین حافظه بیشتری را نسبت به آنچه که از نظر فیزیکی در رایانه وجود دارد، آدرس دهی کند. از مزایای اصلی حافظه مجازی می‌توان موارد زیر را نام برد: رفع نیاز برنامه‌ها به مدیریت فضای حافظه مشترک، توانایی به اشتراک گذاری حافظه مورد استفاده کتابخانه‌ها بین فرایندها، افزایش امنیت به دلیل جداسازی حافظه و استفاده مفهومی از حافظه ای بیشتر از آنچه که از نظر فیزیکی در دسترس است با استفاده از تکنیک صفحه بندی یا تقسیم‌بندی. پیاده‌سازی‌ها معمولاً به پشتیبانی سخت‌افزاری نیاز دارند که معمولاً به صورت یک واحد مدیریت حافظه است که درون CPU تعبیه شده‌است. اگرچه لازم نیست، اما شبیه‌سازها و ماشین‌های مجازی می‌توانند از پشتیبانی سخت‌افزاری برای افزایش عملکرد پیاده‌سازی حافظه مجازی خود استفاده کنند. معرفی حافظه مجازی توانایی اجرای سیستم‌های نرم‌افزاری با حافظه زیاد را در رایانه‌هایی با حافظه واقعی کمتر فراهم می‌کند. صرفه جویی در این زمینه انگیزه ای قوی برای تغییر به حافظه مجازی برای همه سیستم‌ها بود. قابلیت اضافی ایجاد فضاهای آدرس مجازی، سطح دیگری از امنیت و قابلیت اطمینان را ایجاد می‌کند و بنابراین حافظه مجازی را برای بازار جذاب تر می‌کند. اکثر سیستم عامل‌های مدرن که از حافظه مجازی پشتیبانی می‌کنند نیز هر پردازش را در فضای آدرس اختصاصی خود اجرا می‌کنند؛ بنابراین طوری به نظر می‌رسد که انگار هر برنامه بتنهایی به حافظه مجازی دسترسی دارد. با این حال، برخی از سیستم عامل‌های قدیمی (مانند OS / VS1 و OS / VS2 SVS) و حتی سیستم‌های مدرن (مانند IBM i) سیستم عامل‌های تک فضای آدرسی هستند که تمام پردازش‌ها را در یک فضای آدرس واحد متشکل از حافظه مجازی اجرا می‌کنند. سیستم‌های جاسازی شده و سایر سیستم‌های رایانه ای مخصوص که نیاز به زمان پاسخ بسیار سریع یا بسیار پایدار دارند، ممکن است به دلیل کاهش قطعیت، استفاده از حافظه مجازی را انتخاب نکنند. سیستم‌های حافظه مجازی باعث ایجاد تله‌های غیرقابل پیش‌بینی می‌شود که ممکن است در پاسخ به ورودی، تأخیرهای ناخواسته و غیرقابل پیش‌بینی ایجاد کند، به خصوص اگر دام نیاز به خواندن داده‌ها از حافظه ثانویه به حافظه اصلی داشته باشد. سخت‌افزار ترجمه آدرس‌های مجازی به آدرس‌های فیزیکی معمولاً به یک مساحت تراشه قابل توجهی برای پیاده‌سازی احتیاج دارد و همه تراشه‌های استفاده شده در سیستم‌های تعبیه شده شامل این سخت‌افزار نیستند، این دلیل دیگری است که برخی از این سیستم‌ها از حافظه مجازی استفاده نمی‌کنند. سیستم‌های دارای دامنه آدرس مجازی بزرگ یا مقدار حافظه واقعی بزرگ معمولاً از اندازه صفحه‌های بزرگتر استفاده می‌کنند. جداول صفحه برای ترجمه آدرس‌های مجازی قابل دیدن توسط برنامه به آدرسهای فیزیکی مورد استفاده سخت‌افزار برای پردازش دستورالعملها استفاده می‌شود؛ چنین سخت‌افزاری که این ترجمه خاص را مدیریت می‌کند اغلب به عنوان واحد مدیریت حافظه شناخته می‌شود. هر مدخل در جدول صفحه دارای یک پرچم است که نشان می‌دهد صفحه مربوطه در حافظه واقعی است یا خیر. اگر در حافظه واقعی باشد، مدخل جدول صفحه حاوی آدرسی از حافظه واقعی است که صفحه در آن ذخیره شده‌است. هنگامی که سخت‌افزار به صفحه ای مراجعه می‌کند، اگر مدخل جدول صفحه نشان دهد که صفحهٔ مورد نظر در حال حاضر در حافظه واقعی وجود ندارد، آنگاه سخت‌افزار یک استثنا خطای صفحه (page fault) را برمی‌انگیزد که موجب فراخوانی بخش ناظر صفحه بندی سیستم عامل می‌شود. سیستم‌ها می‌توانند یک جدول صفحه برای کل سیستم، جداول صفحه جداگانه برای هر برنامه و بخش، یک درخت جداول صفحه برای بخشهای بزرگ یا ترکیبی از اینها داشته باشند. | ## بخش 2: حافظه مجازی | اگر فقط یک جدول صفحه وجود داشته باشد، برنامه‌های مختلفی که همزمان اجرا می‌شوند از قسمتهای مختلف یک دامنه آدرس مجازی استفاده می‌کنند. اگر چندین جدول صفحه یا بخش وجود داشته باشد، چندین فضای آدرس مجازی و برنامه‌های همزمان با جداول صفحه جداگانه وجود دارد که به آدرس‌های مختلف واقعی هدایت می‌کنند. برخی از سیستم‌های قبلی با اندازه حافظه واقعی کوچکتر مانند SDS 940، از ثبات‌های صفحه به جای جداول صفحه در حافظه برای ترجمه آدرس استفاده می‌کنند. اگر سخت‌افزار یک استثنای خطای صفحه را ایجاد کند، ناظر صفحه بندی به حافظه ثانویه دسترسی پیدا می‌کند، صفحه ای را که دارای آدرس مجازی است که منجر به خطای صفحه شده‌است، برمی‌گرداند، جداول صفحه را به روز می‌کند تا مکان فیزیکی آدرس مجازی را منعکس کند و به مکانیسم ترجمه می‌گوید درخواست را مجدداً راه اندازی کنید. وقتی همه حافظه فیزیکی در حال استفاده است، ناظر صفحه بندی باید یک صفحه را در حافظه اصلی آزاد کند تا صفحه مبادله شده به داخل را نگه دارد. صفحات سنجاق شده سیستم عامل‌ها دارای مناطق حافظه ای هستند که سنجاق(pin) شده‌اند (هرگز به حافظه ثانویه جابجا نمی‌شوند). به عنوان مثال، مکانیزم‌های وقفه به آرایه ای از اشاره گرها به مدیریت کنندهٔ آنها، مانند تکمیل ورودی/خروجی و خطای صفحه، متکی هستند. اگر صفحات حاوی این اشاره گرها یا کدی که آنها فراخوان می‌کنند قابل صفحه بندی باشند، مدیریت وقفه بسیار پیچیده‌تر و زمانبرتر می‌شود، خصوصاً در موارد وقفه‌های خطای صفحه. برخی از صفحات ممکن است برای مدت زمان کوتاه سنجاق شوند، برخی دیگر ممکن است برای مدت طولانی سنجاق شوند و برخی دیگر ممکن است نیاز به سنجاق شدن دائمی داشته باشند. مثلا: کد ناظر صفحه بندی و درایورهای دستگاه‌های ذخیره ثانویه که صفحات در آن قرار دارند باید به‌طور دائمی پین شوند، زیرا در غیر این صورت صفحه بندی حتی کار نمی‌کند زیرا کد لازم در دسترس نیست. بافرهای داده‌ای که مستقیماً توسط دستگاه‌های جانبی که از دسترسی مستقیم به حافظه(RAM) یا کانال‌های ورودی/خروجی استفاده می‌کنند، مورد دسترسی قرار می‌گیرند، باید در حالی که عملیات ورودی و خروجی در حال انجام است در صفحات پین شده قرار بگیرند، زیرا چنین دستگاه‌ها و باس‌هایی که به آنها متصل شده‌اند انتظار دارند بافرهای داده را در آدرس حافظه فیزیکی بیابند؛ صرف نظر از اینکه گذرگاه دارای واحد مدیریت حافظه برای ورودی/خروجی است یا خیر، اگر خطای صفحه رخ دهد نمی‌توان انتقال را متوقف کرد و سپس با پردازش خطای صفحه مجدداً آن را شروع کرد. در سیستم عامل‌های IBM برای سیستم ۳۷۰ و سیستم‌های بعد از آن، این اصطلاح «ثابت شده» است، و چنین صفحاتی ممکن است بشکل بلند مدت ثابت شده باشند، یا ممکن است کوتاه مدت ثابت شده باشند، یا ممکن است ثابت شده نباشند (یعنی قابل صفحه بندی). ساختارهای کنترل سیستم اغلب به‌طور بلند مدت ثابت شده هستند (با زمان ساعت-دیواری اندازه‌گیری می‌شوند، یعنی زمان با ثانیه اندازه‌گیری می‌شود، به جای اینکه در کسری از یک ثانیه اندازه‌گیری شود) در حالی که بافرهای ورودی/خروجی معمولاً کوتاه مدت ثابت شده هستند (معمولاً به‌طور قابل توجهی کمتر از زمان ساعت دیواری اندازه‌گیری می‌شوند، احتمالاً برای ده‌ها میلی ثانیه). در واقع، سیستم عامل دارای تسهیلات ویژه ای برای «ثابت کردن سریع» این بافرهای داده کوتاه مدت ثابت است (ثابت کردنی که بدون استفاده از دستورالعمل فراخوان ناظر وقت گیر انجام می‌شود). OpenVMS و Windows برای صفحاتی که به‌طور موقت غیرقابل صفحه بندی می‌شوند (مثلا برای بافرهای ورودی/خروجی) از اصطلاح «قفل شده» و برای «صفحه ای که هرگز قابل صفحه بندی نیست» براحتی از اصطلاح «غیرقابل صفحه بندی» استفاده می‌کنند. زد و خورد هنگام استفاده از صفحه بندی و سرقت صفحه، مشکلی به نام "thrashing" ممکن است ایجاد شود، که در آن کامپیوتر زمان زیادی را به‌طور نامناسب صرف انتقال صفحات به یک ذخیرهٔ پشتیبان یا خارج کردن صفحات از آن می‌کند، بنابراین انجام کار مفید را کند می‌کند. مجموعه کاری یک کار، حداقل مجموعه صفحاتی است که باید در حافظه باشد تا بتواند پیشرفت مفیدی داشته باشد. زد و خورد زمانی اتفاق می‌افتد که حافظه کافی برای ذخیره مجموعه‌های کاری همه برنامه‌های فعال در دسترس نباشد. افزودن حافظه واقعی ساده‌ترین راه حل است، اما بهبود طراحی برنامه، زمان‌بندی و استفاده از حافظه می‌تواند کمک کند. این امر با خارج کردن کامل مجموعه کار یک یا چند فرایند، تقاضای حافظه واقعی را کاهش می‌دهد. | ## بخش 3: حافظه مجازی | یک آدرس مجازی در اینجا از یک شماره بخش و یک جابجایی (آفست) در داخل بخش تشکیل شده‌است. Intel 80286 از یک طرح تقسیم‌بندی مشابه به عنوان یک گزینه پشتیبانی می‌کند، اما به ندرت استفاده می‌شود. در پردازنده‌های Intel 80386 و بعداً IA-32، بخش‌ها در یک فضای آدرس خطی صفحه بندی شدهٔ ۳۲ بیتی قرار دارند. صفحات در آنجا می‌توانند به داخل و خارج از حافظه اصلی بروند و دو سطح حافظه مجازی را فراهم کنند. تقریباً هیچ سیستم عاملی، این کار را انجام نمی‌دهد، در عوض فقط از صفحه بندی استفاده می‌کند. راه حل‌های مجازی سازی اولیه x86 بدون سخت‌افزار، صفحه بندی و تقسیم‌بندی را با هم ترکیب کردند زیرا صفحه بندی x86 تنها دو دامنه محافظت را ارائه می‌دهد در حالی که یک VMM، سیستم عامل مهمان یا پشتهٔ اپلیکیشن مهمان به سه مورد نیاز دارد. تفاوت بین صفحه بندی و تقسیم‌بندی فقط مربوط به تقسیم حافظه نیست؛ تقسیم‌بندی برای فرآیندهای کاربر، به عنوان بخشی از معناشناسی مدل حافظه، قابل مشاهده است. از این رو، به جای حافظه ای که شبیه صرفاً یک فضای بزرگ است، در چندین فضای مختلف ساختار بندی شده‌است. نمی‌توان گفت که یک بخش، یک صفحه با طول متغیر یا یک روش ساده برای افزایش فضای آدرس است. تقسیم‌بندی که می‌تواند یک مدل حافظه تک سطحی را ارائه دهد که در آن هیچ تفاوتی بین حافظه پردازش و سیستم فایل وجود ندارد، فقط شامل لیستی از بخش‌ها (فایل‌ها) است که به فضای آدرس بالقوه فرایند مرتبط شده‌است. در Multics، یک فایل (یا یک بخش از یک فایل چند بخشی) به یک بخش در فضای آدرس مرتبط می‌شود، بنابراین فایل‌ها همیشه در مرز یک بخش مرتبط می‌شوند. بخش اتصال یک فایل می‌تواند حاوی اشاره‌گرهایی باشد که تلاش برای بارگیری اشاره گر در یک ثبات یا ارجاع غیر مستقیم از طریق آن باعث ایجاد دام می‌شود. اشاره گر حل نشده حاوی نشانه ای از نام بخشی است که اشاره گر به آن اشاره می‌کند و یک جابجایی درون بخش است. مدیریت کنندهٔ دام، بخش را به فضای آدرس مرتبط می‌کند، شماره قسمت را در اشاره‌گر قرار می‌دهد، قسمت برچسب را در اشاره‌گر تغییر می‌دهد تا دیگر باعث دام نشود، و دوباره به کدی که دام در آن رخ داده‌است بازمی‌گردد و دستورالعمل ایجاد کننده دام را مجدداً اجرا می‌کند. این امر نیاز به لینک دهنده را به‌طور کامل از بین می‌برد و زمانی جواب می‌دهد که پردازش‌های مختلف، فایل مشابهی را به مکان‌های مختلف در فضای آدرس خصوصی خود مرتبط کنند. تعویض فضای آدرس برخی از سیستم عامل‌ها علاوه بر امکاناتی که برای صفحه بندی و تقسیم‌بندی دارند، امکان جابجایی کل فضاهای آدرس را نیز فراهم می‌کنند. وقتی این اتفاق می‌افتد، سیستم عامل آن صفحات و بخشهایی را که در حال حاضر در حافظه واقعی قرار دارند می‌نویسد تا فایل‌ها را تعویض کند. در جابجایی به داخل، سیستم عامل داده‌های فایل‌های جابجایی را بازخوانی می‌کند اما به‌طور خودکار صفحاتی را که در زمان انجام عمل مبادله خارج شده بودند، مجدداً نمی‌خواند. علاوه بر این، کد مجاز می‌تواند با استفاده از دستورالعمل فراخوانی ناظر SYVEVENT به‌طور موقت فضای آدرس را غیرقابل تغییر کند. | ## جمع‌بندی | جابجا کردن لزوماً به سخت‌افزار مدیریت حافظه احتیاج ندارد، اگر مثلاً چندین کار در قسمت مشابهی از حافظهٔ ذخیره‌سازی به داخل و خارج جابجا شوند.