PDA

View Full Version : توضیح در مورد virtual Addressing



r00tkit
جمعه 28 اسفند 1388, 00:44 صبح
سلام یه نفر لطف کنه در مورد این جمله توضیح بده


http://www.barnamenevis.biz/forum/showthread.php?p=127730


مدیر حافظه ویندوز های 32 بیتی میتونه برای هر پروسه چهار گیگابایت فضا اختصاص بده که دو گیگ اون برای بخش سطح کاربر و دو گیگ اون برای بخش سطح کرنل در نظر گرفته میشه
یعنی چی تقسیم به دو بخش ؟

Microsoft® Windows® Internals, Fourth Edition: Microsoft Windows Server™ :


The size of the virtual address space varies for each hardware platform. On 32-bit x86 systems, the total virtual address space has a theoretical maximum of 4 GB. By default, Windows allocates half this address space (the lower half of the 4 GB virtual address space, from x00000000 through x7FFFFFFF) to processes for their unique private storage and uses the other half (the upper half, addresses x80000000 through xFFFFFFFF) for its own protected operating system memory utilization. The mappings of the lower half change to reflect the virtual address space of the currently executing process, but the mappings of the upper half always consist of the operating system's virtual memory

vcldeveloper
جمعه 28 اسفند 1388, 02:19 صبح
یعنی چی تقسیم به دو بخش ؟
یعنی کل این 4 گیگا بایت مجازی در اختیار Process قرار نمیگیره، بلکه شیوه کار ویندوز به این شکل هست که اجزاء سطح کرنل خودش را در 2 گیگابایت اول از حافظه مجازی همه Processها Map میکنه. به این ترتیب ویندوز کارهای مدیریتی خودش را انجام میده، Porcessها هم اگر نیاز به استفاده از سرویسی در این فضای آدرس داشته باشند، این سرویس از قبل برایشان لود شده و آماده هست. 2 گیگابایت دوم در اختیار خودِ Process قرار میگیره، و Process میتونه ازش برای امورات خودش استفاده کنه. در واقع شما اینطور در نظر بگیرید که 2 گیگابایت از حافظه مجازی بین همه Processها مشترک هست، و تفاوت Processها با هم از نظر محتوای حافظه در 2 گیگابایت دوم از حافظه مجازی اختصاص داده شده به آن Process هست.

البته اینکه گفته میشه 2 گیگابایت از فضای آدرس هر Process در اختیار کرنل ویندوز هست، به معنی آن نیست که ویندوز هر بار که Processایی اجرا میشه، این داده ها را کپی میکنه و به فضای آدرس آن Process منتقل میکنه! بلکه این داده ها یک بار لود میشند، و هر Processآیی که شروع به کار میکنه، 2 گیگابایت اول از حافظه مجازی اختصاص یافته به آن، به این داده های لود شده از کرنل اشاره می کنند.

البته اگر در یک سیستم 32 بیتی Processایی به بیش از 2 گیگابایت نیاز داشته باشه، میتونه 1 گیگابایت از فضای اختصاص داده شده به کرنل را برای خودش درخواست کنه. در اون صورت، 1 گیگابایت اول فضای حافظه مجازی به کرنل ویندوز اختصاص پیدا میکنه، و 3 گیگابایت بعدی به Process.

pswin.pooya
جمعه 06 فروردین 1389, 19:14 عصر
به نظر من توی آدرس دهی مجازی اختصاص حافظه و یا تقسیم کردن اون معنی نداره.

احتمالا منظور اینه که چون x86 به صورت ذاتی با سگمنت ها کار میکنه توی حالت محافظت شده (32 بیتی) از تقسیم حافظه به دو قسمت استفاده میکنه که با استفاده از صفحه بندی این مورد کنار میره.

معمولا سیستم عامل ها دو نوع توصیفگر عمومی میسازن: یکی برای کرنل و یکی هم برای کاربر که بازم معمولا این دو از صفر تا چهار گیگ هستند. (خود grup هم این شکلی عمل میکنه). حالا احتمال داره ویندوز به دلایل خاصی مود کاربر رو از 2 تا چهار گیگ گذاشته باشه.