زمانی که یک پردازنده اقدام به خواندن و نوشنتن به یک مکان حافظه میکند ، از یک آدرس مجازی استفاده میکند .
به عنوان بخشی از عملیات خواندن یا نوشتن ، پردازنده آدرس مجازی را به آدرس فیزیکی ترجمه میکند . دسترسی به حافظه از طریق یک آدرس مجازی مزایای زیر را دارد :
1_یک برنامه میتواند از محدوده مجاور آدرس های مجازی برای دسترسی به یک بافر حافظه بزرگ استفاده کند که در حافظه فیزیکی به یکدیگر متصل نیستند .
2_یک برنامه میتواند از طیفی از آدرس های مجازی برای دسترسی به بافری بزرگتر از حافظه فیزیکی موجود استفاده کند . همانطور که عرضه حافظه فیزیکی کوچک میشود ، مموری منیجر صفحات حافظه فیزیکی ( که به اندازه 4 کیاوبایت میباشد) را به فایل دیسک میفرستد . صفحات داده یا کد بین حافظه فیزیکی و دیسک به صورت مورد نیاز منتقل میگردد . (اولویت با پیج های قدیمی تر هست که دیرتر بهش مراجعه شده باشه)
3_آدرس های مجازی مورد استفاده در فرایندهای مختلف از یکدیگر جدا شده اند . کد در یک فرآیند نمیتواند حافظه فیزیکی را که توسط فرآیند دیگری یا سیستم عامل مورد استفاده قرار میگیرد تغییر دهد .
محدوده آدرس های مجازی که در فرآیند در دسترس است ، فضای آدرس مجازی برای فرایند است . هر فرایند حالت کاربر ، دارای فضای آدرس مجازی خخصوصی شخصی است . برای یک فرایند 32 بیتی ، فضای آدرس مجازی معمولا محدوده 2 گیگابایتی از 0x00000000 تا 0x7FFFFFFF است . برای یک فرآیند 64 بیتی فضای آدرس مجازی محدوده 8 ترابایتی 0x000 00000000 تا 0x7FFFFFFFFFF است . طیفی از ویرچوال آدرس گاهی اوقات طیفی از ویرچوال مموریی نامیده میشود .
این نمودار برخی از ویژگی های آدرس مجازی را نشان میدهد .

این نمودار فضاهای آدرس مجازی را برای دو فرایند 64 بیتی نشان میدهد : Notepad.exe و MyApp.exe . هر فرایند دارای فضای آدرس مجازی خود است که از 0x000'0000000 تا 0x7FF'FFFFFFFF قرار دارد . هر بلوک سایه دار نشان دهنده یک صفحه (به اندازه 4 کیلوبایت) از حافظه مجازی یا فیزیکی است . توجه داشته باشید که فرایند Notepad از سه صفحه پیوندی از آدرس های مجازی استفاده میکند ، با شروع از آدرس 0x7F7'93950000 .اما این سه صفحه مجاور آدرس های مجازی به صفحات غیر مستقیم در حافظه فیزیکی نقش میشود . همچنین توجه کنید که هر دو فرایند با استفاده از یک صفحه از حافظه مجازی شروع از 0x7F7'93950000 استفاده میکنند ، اما آن صفحات مجازی به صفحات مختلف حافظه فیزیکی نقش میشوند .
فضای کاربر و فضای سیستم :
فرایند های مانند Notepad.exe و MyApp.exe در حالت کاربر اجرا میشوند . اجزاء اصلی سیستم عامل و بسیاری از درایور ها بیشتر در حالت کرنل مورد استفاده قرار میگیرند . هر پراسس حالت کاربر دارای فضای آدرس خود است ، اما تمام کد هایی که در حالت هسته اجرا میگردند ، یک فضای آدرس مجزا به نام فضای سیستم دارند (دارای فضای آدرس مشترک هستند) . فضای آدر مجازی برای فرآیند کاربر حالت فعلی کاربر ، user space نامیده میشود .
در ویندوز 32 بیت ، فضای آدرس مجازی موجود در دسترس 2 به توان 32 بایت (4 گیگابایت) است . معمولا 2 گیگابایت کمتر برای فضای کاربر میباشد و دو گیگابایت بالاتر برای فضای سیستر در نظر گرفته میشود .

در ویندوز 32 بیتی شما میتوانید گزینه ای (در هنگام بوت شدن) را مشخص کنید که بیش از 2 گیگابایت برای فضای کاربر در دسترس باشد . در نتیجه آدر مجازی کمتری در دسترس سیستم قرار میگیرد . شما میتوانید حجم فضای کاربر را تا 3 گیگا بایت افزایش دهید ، در این صورت فقط 1 گیگ فضا برای سیستم باقش میماند .
در ویندوز های 64 بیتی مقدار فضای آدرس مجازی 2 به توان 64 بایت (16 اگزابایت) میباشد . اما تنها بخش کوچکی از این محدوده استفاده میگردد . محدوده 8 ترابایت از 0x000'00000000 تا 0x7FF'FFFFFFFF برای فضای کاربر استفاده میشود و بخش هایی از 248 ترابایت از 0xFFFF0800'00000000 تا 0xFFFFFFFF'FFFFFFFF برای فضای سیستم استفاده میگردد .

کد در حال اجرا در حالت کاربر دسترسی به فضای کاربر دارد ، اما دسترسی به فضای سیستم ندارد . این محدودیت باعث میشود که کد کاربر حالت خواندن یا تغییر ساختار داده های محافظت شده سیستم عامل را نداشته باشد . کد در حال اجرا در حالت هسته دارای دسترسی به فضای کاربر و فضای سیستم میباشد .
درایور هایی که در حالت هسته اجرا میشوند باید در نوشتن یا خواندن به آدرس درفضای کاربر بسیار محتاط باشند . دیاگرام زیر دلید آن را نشان میدهند :
1.یک برنامه یوزر مد ، یک در خواست برای خواندن برخی از داده ها را به یک دستگاه میفرستد . تین برنامه آدرس اولیه یک بافر برای دریافت داده ها را فراهم میکند .
2.یک روتین دیوایس درایور در حالت اجرا در حالت هسته ، عملیات خواندن را شروع میکند و کنترل کننده را به تماس گیرنده خود بازمیگرداند .
3.سپس اینتراپت دستگاه هر تردی را که در حال اجرا است را قطع میکند .
4.در این مرحله ،درایور نباید داده ها را به آدرس اولیه ای ارسال کند که در برنامه کاربر ، در قسمت اول گفته شد . این آدرس در فضای آدرس مجازی پراسس است که درخواست را آغاز کرده است ، که به احتمال زیاد همانند پراسس فعلی نیست .
به عنوان بخشی از عملیات خواندن یا نوشتن ، پردازنده آدرس مجازی را به آدرس فیزیکی ترجمه میکند . دسترسی به حافظه از طریق یک آدرس مجازی مزایای زیر را دارد :
1_یک برنامه میتواند از محدوده مجاور آدرس های مجازی برای دسترسی به یک بافر حافظه بزرگ استفاده کند که در حافظه فیزیکی به یکدیگر متصل نیستند .
2_یک برنامه میتواند از طیفی از آدرس های مجازی برای دسترسی به بافری بزرگتر از حافظه فیزیکی موجود استفاده کند . همانطور که عرضه حافظه فیزیکی کوچک میشود ، مموری منیجر صفحات حافظه فیزیکی ( که به اندازه 4 کیاوبایت میباشد) را به فایل دیسک میفرستد . صفحات داده یا کد بین حافظه فیزیکی و دیسک به صورت مورد نیاز منتقل میگردد . (اولویت با پیج های قدیمی تر هست که دیرتر بهش مراجعه شده باشه)
3_آدرس های مجازی مورد استفاده در فرایندهای مختلف از یکدیگر جدا شده اند . کد در یک فرآیند نمیتواند حافظه فیزیکی را که توسط فرآیند دیگری یا سیستم عامل مورد استفاده قرار میگیرد تغییر دهد .
محدوده آدرس های مجازی که در فرآیند در دسترس است ، فضای آدرس مجازی برای فرایند است . هر فرایند حالت کاربر ، دارای فضای آدرس مجازی خخصوصی شخصی است . برای یک فرایند 32 بیتی ، فضای آدرس مجازی معمولا محدوده 2 گیگابایتی از 0x00000000 تا 0x7FFFFFFF است . برای یک فرآیند 64 بیتی فضای آدرس مجازی محدوده 8 ترابایتی 0x000 00000000 تا 0x7FFFFFFFFFF است . طیفی از ویرچوال آدرس گاهی اوقات طیفی از ویرچوال مموریی نامیده میشود .
این نمودار برخی از ویژگی های آدرس مجازی را نشان میدهد .

این نمودار فضاهای آدرس مجازی را برای دو فرایند 64 بیتی نشان میدهد : Notepad.exe و MyApp.exe . هر فرایند دارای فضای آدرس مجازی خود است که از 0x000'0000000 تا 0x7FF'FFFFFFFF قرار دارد . هر بلوک سایه دار نشان دهنده یک صفحه (به اندازه 4 کیلوبایت) از حافظه مجازی یا فیزیکی است . توجه داشته باشید که فرایند Notepad از سه صفحه پیوندی از آدرس های مجازی استفاده میکند ، با شروع از آدرس 0x7F7'93950000 .اما این سه صفحه مجاور آدرس های مجازی به صفحات غیر مستقیم در حافظه فیزیکی نقش میشود . همچنین توجه کنید که هر دو فرایند با استفاده از یک صفحه از حافظه مجازی شروع از 0x7F7'93950000 استفاده میکنند ، اما آن صفحات مجازی به صفحات مختلف حافظه فیزیکی نقش میشوند .
فضای کاربر و فضای سیستم :
فرایند های مانند Notepad.exe و MyApp.exe در حالت کاربر اجرا میشوند . اجزاء اصلی سیستم عامل و بسیاری از درایور ها بیشتر در حالت کرنل مورد استفاده قرار میگیرند . هر پراسس حالت کاربر دارای فضای آدرس خود است ، اما تمام کد هایی که در حالت هسته اجرا میگردند ، یک فضای آدرس مجزا به نام فضای سیستم دارند (دارای فضای آدرس مشترک هستند) . فضای آدر مجازی برای فرآیند کاربر حالت فعلی کاربر ، user space نامیده میشود .
در ویندوز 32 بیت ، فضای آدرس مجازی موجود در دسترس 2 به توان 32 بایت (4 گیگابایت) است . معمولا 2 گیگابایت کمتر برای فضای کاربر میباشد و دو گیگابایت بالاتر برای فضای سیستر در نظر گرفته میشود .

در ویندوز 32 بیتی شما میتوانید گزینه ای (در هنگام بوت شدن) را مشخص کنید که بیش از 2 گیگابایت برای فضای کاربر در دسترس باشد . در نتیجه آدر مجازی کمتری در دسترس سیستم قرار میگیرد . شما میتوانید حجم فضای کاربر را تا 3 گیگا بایت افزایش دهید ، در این صورت فقط 1 گیگ فضا برای سیستم باقش میماند .
در ویندوز های 64 بیتی مقدار فضای آدرس مجازی 2 به توان 64 بایت (16 اگزابایت) میباشد . اما تنها بخش کوچکی از این محدوده استفاده میگردد . محدوده 8 ترابایت از 0x000'00000000 تا 0x7FF'FFFFFFFF برای فضای کاربر استفاده میشود و بخش هایی از 248 ترابایت از 0xFFFF0800'00000000 تا 0xFFFFFFFF'FFFFFFFF برای فضای سیستم استفاده میگردد .

کد در حال اجرا در حالت کاربر دسترسی به فضای کاربر دارد ، اما دسترسی به فضای سیستم ندارد . این محدودیت باعث میشود که کد کاربر حالت خواندن یا تغییر ساختار داده های محافظت شده سیستم عامل را نداشته باشد . کد در حال اجرا در حالت هسته دارای دسترسی به فضای کاربر و فضای سیستم میباشد .
درایور هایی که در حالت هسته اجرا میشوند باید در نوشتن یا خواندن به آدرس درفضای کاربر بسیار محتاط باشند . دیاگرام زیر دلید آن را نشان میدهند :
1.یک برنامه یوزر مد ، یک در خواست برای خواندن برخی از داده ها را به یک دستگاه میفرستد . تین برنامه آدرس اولیه یک بافر برای دریافت داده ها را فراهم میکند .
2.یک روتین دیوایس درایور در حالت اجرا در حالت هسته ، عملیات خواندن را شروع میکند و کنترل کننده را به تماس گیرنده خود بازمیگرداند .
3.سپس اینتراپت دستگاه هر تردی را که در حال اجرا است را قطع میکند .
4.در این مرحله ،درایور نباید داده ها را به آدرس اولیه ای ارسال کند که در برنامه کاربر ، در قسمت اول گفته شد . این آدرس در فضای آدرس مجازی پراسس است که درخواست را آغاز کرده است ، که به احتمال زیاد همانند پراسس فعلی نیست .
Paged pool and Nonpaged pool :
در فضای کاربری ، تمام صفحات حافظه فیزیکی را میتوان به عنوان یک فایل دیسک به صورت صحیح برگرداند . در فضای سیستم ، برخی صفحات فیزیکی میتوانند از بیین بروند و برخی نیز نمیتوانند . فضای سیستم دارای دومنطقه برای تخصیص حافظه پویا میباشد :paged pool و nonpaged pool
در حالت paged pool حافظه میتواند به صورت فایل (در صورت نیاز) به دیسک منتقل گردد .
در حالت nonpaged pool هرگز حافظه نمیتواند به دیسک منتقل گردد .