PDA

View Full Version : مدیریت حافظه در Windows



ICEMAN
پنج شنبه 05 اردیبهشت 1387, 09:02 صبح
سلام ...
چند تا سوال تو این زمینه دارم گفتم
1 ) وقتی روی Heap حافظه ای Allocate می کنیم این حافظه Share هست یعنی بقیه Thread های اون Process بهش دسترسی دارن یا نه؟

2) وقتی فایلی رو Map میکنیم و یه Idname براش تعیین میکنیم تا بقیه Process ها هم بهش دسترسی داشته باشن .میشه مثل یه فایل معمولی Lock یا UnLock ش کرد ؟
-کلا حافظه چه heap چه Memory Map ها رو میشه Lock کرد یا نه ؟

3) وقتی .dll رو با LoadLibrary لود میکنیم توی 2GB اشتراکی Load میشه و بقیه میتونن بهش دسترسی داشته باشن .میشه این دسترسی ها رو محدود کرد یعنی در هر زمان فقط 1 یا چند Process دسترسی داشته باشن

ممنون

ICEMAN
جمعه 06 اردیبهشت 1387, 12:22 عصر
شاید نباید تو این بخش این سوال و میپرسیدم

Inprise
جمعه 06 اردیبهشت 1387, 12:33 عصر
- بله
- نه
- بطور معمول با API نه . ولی میتونی توابعش رو هوک کنی و فقط اگر پروسه مورد نظرت در حال فراخوانیشون بود طبیعی ریترن کنی و الا بپری جای دیگه و الی آخر

Nima_NF
جمعه 06 اردیبهشت 1387, 13:38 عصر
1) در مورد heap بله حافظه بین تمامی thread ها مشترک هست چون فضای ادرس آن ها یکی هست ، اما اگر قفل شود فقط همان thread می تواندحافظه اختصاص دهد یا آزاد کند.

2) توابع مخصوص lock برای heap وجود دارد اما برای سایر موارد مثل map که حافظه مشترک باشد شما باید با روش های همزمان سازی مثل mutex و semaphore و... این کار را برای دسترسی غیر عمزمان انجام دهید. اگر هم که فایل هست از طریق تغییر حق دسترسی ها احتمالا بتوان کار هایی انجام داد.

3) در مورد loadlibrary تا جایی که من می دانم در فضای آدرس پروسه کنونی لود می کند، لذا پروسه های دیگر باید loadlibrary را فراخوانی کنند تا handle معتبر خود را دریافت کنند.
خوب می توان از این قابلیت استفاده کرد و در DllMain با استفاده از یک سمافور عمومی سیستم فقط در صورتی که یک بار load شده باشد و شمارنده به یک رسیده باشد اجازه اجرای مجدد را نداد ، یعنی در غیر این صورت برای سایر پروسه ها FALSE برگرداند تا dll را در لود نکند .


LoadLibrary: Maps the specified executable module into the address space of the calling process

ICEMAN
شنبه 07 اردیبهشت 1387, 09:03 صبح
از همه ممنون از توضیحات شما به این 2 لینک رسیدم که خیلی کمکم کرد

Managing Heap Memory in Win32




The purpose of heaps in Win32
General heap behavior
Two types of heaps in Win32
Global and local memory functions
Win32 heap memory functions
Overhead on heap memory allocations
Summary and recommendations
http://msdn2.microsoft.com/en-us/library/ms810603.aspx

Memory Management Functions



General Memory Functions
Data Execution Prevention Functions
File Mapping Functions
AWE Functions
Heap Functions
Virtual Memory Functions
Global and Local Functions
Obsolete Functionshttp://msdn.microsoft.com/library/shared/deeptree/asp/rightframe.asp?dtcfg=/library/deeptreeconfig.xml&url=/library/en-us/memory/base/memory_management_functions.asp?frame=true&hidetoc=false


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