הקצאת זכרון פיזי ב- windows

zvivered

New member
הקצאת זכרון פיזי ב- windows

שלום, לפי ה- Platform SDK ניתן להקצות זכרון פיזי באמצעות VirtualAlloc. הכוונה להקצות זכרון שעליו אני יודע בודאות שהוא RAM ולא על ה- דיסק. האם למישהו יש נסיון בנדון ? ניסיתי ע"י: p=VirtualAlloc(0,0x70000000,MEM_RESERVE|MEM_PHYSICAL,PAGE_READWRITE); קיבלתי פוינטר לזכרון אולם זה בלתי הגיוני כי אין לי 0x70000000 בתים בזכרון פיזי שהם 1.75GB . תודה.
 

ChipsMan

New member
זה מאוד הגיוני

ההקצאה עצמה נעשית בזיכרון הפיזי, אבל המיפוי לכתובות וירטואליות עדיין קיים. אני ממליץ לך לקרוא על מנגנון ה-paging במערכות מודרניות על מנת להבין לעומק כיצד זה עובד. באופן כללי, paging נועד לאפשר הקצאות לא רציפות בזיכרון הפיזי כך שלתוכנות שרצות זה ייראה כמו בלוק זיכרון רציף. כמובן שהכתובות במקרה זה לא תואמות בכלל את הכתובות הפיזיות בזיכרוןץ
 

DNile

New member
יש לציין -

השימוש בדגל הזה הוא מאוד מאוד מאוד מאוד מאוד לא רצוי, אם אינך יודע בדיוק מה הוא מבצע, ואיך מתנהל ניהול הזכרון בחלונות. הזכרון שתעבוד איתו תמיד ימצא בRAM כשאתה צריך אותו. השאלה היא מה קורה כשאתה לא צריך אותו - אז מערכת ההפעלה מרשה לעצמה להעתיק את המידע משם לדיסק, ולאחזר אותו כשהיא צריכה. שימוש מיותר ולא נכון בMEM_PHYSICAL יכול לפגוע קשות בביצועי המערכת. ראה הוזהרת.
 

ChipsMan

New member
אממ.. לפי מה שכתוב ב-MSDN..

הזיכרון שמוקצה על ידי MEM_PHYSICAL תמיד יושב ב-RAM. אלא אם כן הבנת הנקרא שלי לא משהו
בכל מקרה, הכתובת שמקבלים כתוצאה מההקצאה היא אף פעם לא כתובת אמיתית פיסית בזיכרון. לכל תוכנית יש זיכרון וירטואלי, והכתובות הן תמיד כתובות וירטואליות.
 

DNile

New member
כן כן... כושר ההתבטאות שלי לא משהו.

התכוונתי שגם אם הוא לא ישתמש בMEM_PHYSICAL, הזכרון שהוא יצטרך תמיד ימצא בRAM. רק כשהוא כבר לא צריך את זה, אז זה חוזר להרד דיסק.
 

gilad_no

New member
לא בחלונות

לא ניתן להכריח מיפוי כתובת לזיכרון פיזי. בלינוקס הדבר אפשרי כדי למנוע בעיות אבטחה (PAGING לקובץ ואז קריאת סיסמאות ממנו למשל...), אבל בחלונות ההגדרה הנ"ל היא רק בגדר "המלצה" לקרנל להעדיף להשאיר את ההקצאה בזיכרון הפיזי. הקרנל עדיין יעביר את הזיכרון לקובץ כאשר ייתחשק לו.
 
למעלה