ویرگول
ورودثبت نام
سید عمید قائم مقامی
سید عمید قائم مقامیبرنامه نویسی سیستم ویندوز و مهندسی معکوس و علاقه مند به آموزش.
سید عمید قائم مقامی
سید عمید قائم مقامی
خواندن ۲ دقیقه·۹ روز پیش

مبانی (فضای آدرس‌های مجازی):

Virtual Address Space در ویندوز

کی از مهم‌ترین مفاهیم در معماری سیستم‌عامل‌های مدرن، به‌ویژه ویندوز، فضای آدرس مجازی یا Virtual Address Space (VAS) است. بدون درک این مفهوم، فهم دقیق عملکرد برنامه‌ها، مدیریت حافظه، و حتی خطاهایی مثل Access Violation تقریباً غیرممکن است.

Virtual Address Space چیست؟

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

در واقعیت، برنامه مستقیماً به RAM دسترسی ندارد؛ بلکه آدرس‌هایی که برنامه می‌بیند مجازی هستند و ویندوز آنها را به آدرس‌های واقعی در RAM یا حتی روی دیسک نگاشت (Map) می‌کند.

به عبارت ساده:

VAS = تصویری مجازی از حافظه برای هر پروسس.

هر پروسس فکر می‌کند کل این فضا را خودش دارد.

اما سیستم‌عامل آن را مدیریت و به حافظه حقیقی تبدیل می‌کند.

چرا فضای آدرس مجازی وجود دارد؟

وجود VAS سه مزیت مهم دارد:

1. ایزوله‌کردن پروسس‌ها (Process Isolation)

هر برنامه فقط فضای خودش را می‌بیند؛ بنابراین:

هیچ برنامه‌ای نمی‌تواند حافظه برنامه دیگر را خراب کند

امنیت سیستم بسیار بیشتر می‌شود

2. استفاده بهینه از حافظه

برنامه لزوماً نیاز ندارد همه چیز را در RAM نگه دارد.

ویندوز می‌تواند بخش‌های بلااستفاده را روی دیسک (Page File) ذخیره کند.

3. ساده‌تر شدن مدیریت حافظه برای برنامه‌نویس

برنامه‌نویس لازم نیست نگران آدرس‌های واقعی فیزیکی باشد.


اندازه فضای آدرس مجازی

در ویندوز 32 بیت

  • کل فضای آدرس: ۴ گیگابایت

  • تقسیم پیش‌فرض:

    • ۲ گیگابایت برای پروسس

    • ۲ گیگابایت برای کرنل

با سوییچ /3GB می‌توان این نسبت را به ۳/۱ تغییر داد.

در ویندوز 64 بیت

  • فضای آدرس بسیار بزرگ‌تر است

  • ویندوز محدودیت‌هایی اعمال می‌کند، اما معمولاً:

    • پروسس‌های ۶۴ بیتی: تا ۱۲۸ ترابایت

    • پروسس‌های ۳۲ بیتی روی ویندوز ۶۴ بیتی: همان ۴ گیگابایت

به‌خاطر معماری 64bit، هر برنامه عملاً یک فضای آدرس عظیم دارد.


مثالی ساده برای درک بهتر:

فرض کنید 3 برنامه در حال اجرا هستند:

کروم و فایرفاکس و نوت پد

هر سه ممکن است آدرس 0x00400000 را استفاده کنند.

اما هر کدام فضای مجازی جداگانه دارند و این آدرس در هر برنامه به مکان کاملاً متفاوتی در RAM نگاشت شده است.

پس تداخلی بین آنها پیش نمی‌آید.


چرا آدرس‌دهی مجازی مهم است؟

1.جلوگیری از کرش‌های امنیتی

2.امکان اجرای چندین برنامه همزمان

3.افزایش ظرفیت حافظه با استفاده از Pagefile

4.اجرای برنامه‌های بسیار بزرگ

اگر مدیریت حافظه فیزیکی مستقیم بود، کوچک‌ترین اشتباه در کد یک برنامه می‌توانست کل سیستم را از کار بیندازد.


نگاهی عمیق تر

در معماری Windows NT، مدیریت حافظه بر پایه یک مدل یکپارچه و کاملاً انتزاعی از آدرس‌دهی مجازی است. هر پروسس یک Virtual Address Space مستقل دارد که توسط کرنل ایجاد، مدیریت و ایزوله می‌شود.
این فضا اساساً یک Address Space Abstraction است که ویندوز آن را به مجموعه‌ای از صفحات (Pages) با اندازه ثابت بخش‌بندی می‌کند.

معماری اصلی: Page-Based Virtual Memory

ویندوز از Paging با اندازه صفحه 4KB (و 2MB/1GB برای Huge Pages بسته به معماری و تنظیمات) استفاده می‌کند.

هر آدرس مجازی → با استفاده از Page Table ها → به آدرس فیزیکی نگاشت می‌شود.

Telegram: @CaKeegan
Gmail : amidgm2020@gmail.com

مدیریت حافظهسیستم عامل
۰
۰
سید عمید قائم مقامی
سید عمید قائم مقامی
برنامه نویسی سیستم ویندوز و مهندسی معکوس و علاقه مند به آموزش.
شاید از این پست‌ها خوشتان بیاید