خب اومدم یک پست شبانه بذارم و برم تا چند روز دیگه که با یک محتوای خوب برگردم :3
براتون سوال نشده که چرا ویندوزهای ۳۲ بیتی نمیتونستن بیشتر از ۴ گیگ رم رو ببینن؟
خب من یک ویدئویی رو توی اینستاگرام دیدم و برام جالب بود و رفتم درموردش تحقیق کردم؛ عملاً میتونستن ببینن، همونطوری که هسته لینوکس روی ۳۲ بیت میتونست بیشتر از ۴ گیگ رو ببینه اما...
اول بذاریم ببینیم این ۴ گیگ از کجا اومد:
در سیستمهای ۳۲ بیتی، آدرسدهی حافظه با ۳۲ بیت انجام میشه.
هر بیت فقط دو حالت داره (۰ یا ۱)، پس تعداد آدرسهای ممکن برابره با:
2^32 = 4/294/967/296
چون حافظه به صورت بایتبهبایت آدرسدهی میشه، این عدد دقیقاً میشه حدود ۴ گیگابایت (دقیقترش ۴ گیبیبایت). یعنی پردازنده بدون هیچ کمکی، فقط میتونه تا ۴ گیگ حافظه فیزیکی رو مستقیم ببینه.
اما اینجا یه چیز جالب به اسم PAE وارد میشه
Physical Address Extension یا همون PAE، یه قابلیت سختافزاریه که اینتل از زمان پنتیوم پرو (۱۹۹۵) اضافه کرد.
با فعال کردن PAE، پردازنده از آدرس فیزیکی ۳۲ بیتی به ۳۶ بیتی ارتقا پیدا میکنه.
نتیجه؟ حداکثر حافظه فیزیکی قابل آدرسدهی میشه:
2^36 = 64 GB
یعنی از نظر سختافزاری، پردازندههای ۳۲ بیتی با PAE کاملاً قادر بودن تا ۶۴ گیگ رم رو مدیریت کنن.
لینوکس از سال ۱۹۹۹ (کرنل ۲.۳.۲۳ به بعد) پشتیبانی کامل از PAE رو داشت و نسخههای PAE کرنل لینوکس روی ماشینهای ۳۲ بیتی میتونستن بدون مشکل تا ۶۴ گیگ رم رو ببینن و استفاده کنن.
پس چرا ویندوز ۳۲ بیتی محدود به ۴ گیگ موند؟
اینجا دیگه محدودیت فنی نبود، بلکه تصمیم مایکروسافت بود.
مایکروسافت PAE رو در نسخههای سرور ویندوز (مثل Windows Server 2003 Enterprise و Datacenter) فعال کرد و اونا میتونستن تا ۶۴ یا حتی ۱۲۸ گیگ رم رو ببینن.
ولی در نسخههای کلاینت (ویندوز XP، ویستا، ۷ و حتی ۱۰ نسخه ۳۲ بیتی) عمداً این قابلیت رو محدود کردن و سقف رو روی ۴ گیگ نگه داشتن.
دلیل اصلیش؟ درایورها.
خیلی از درایورهای سختافزاری (مخصوصاً پرینتر، کارت صدا، وبکم و دستگاههای جانبی مصرفکننده) فرض میکردن که آدرس فیزیکی همیشه داخل ۳۲ بیت جا میشه. وقتی PAE فعال میشد و حافظه بالای ۴ گیگ استفاده میشد، این درایورها بیتهای بالایی آدرس رو دور میریختن و سیستم کرش میکرد (بلواسکرین معروف).
مایکروسافت برای جلوگیری از این مشکلات سازگاری، در نسخههای خانگی ویندوز، حتی وقتی PAE برای قابلیتهایی مثل DEP (Data Execution Prevention) فعال بود، باز هم اجازه نمیداد حافظه بالای ۴ گیگ استفاده بشه.
نکته دیگه: چرا حتی با ۴ گیگ رم هم معمولاً فقط ۳.۲ تا ۳.۵ گیگ دیده میشد؟
چون بخشی از فضای آدرس ۴ گیگی توسط سختافزار رزرو میشد (Memory-Mapped I/O).
کارت گرافیک، بایوس، دستگاههای PCI و... بخشی از این فضای آدرس رو برای خودشون برمیداشتن. در نتیجه رم واقعی قابل استفاده کمتر از ۴ گیگ میشد. به این میگن «۳ گیگ بَریِر» یا ۳GB Barrier.
https://en.wikipedia.org/wiki/Physical_Address_Extension
@SohrabContents
Post #2663
3.96K
Forwarded from sohrab::stdout
Wikipedia Physical Address Extension memory management feature- ❤ 42
- 👍 8
- 🔥 3
- 👎 1