@שמואל-רובין
כדי להבין את זה, צריך להכיר כמה מושגים בסיסיים על איך ווינדוס מנהלת זיכרון:
Committed Memory (זיכרון מוקצה): כשתהליך נפתח, הוא מבקש ממערכת ההפעלה להקצות לו גודל מסוים של זיכרון (למשל 2 ג'יגה), אבל בפועל הוא לא משתמש בכולו באותו רגע.
Working Set (זיכרון עבודה): זה השטח שבפועל התהליך תופס פיזית בזיכרון ה-RAM באותו רגע.
את ה-Working Set הזה ווינדוס מחלקת לשני סוגים:
Private Memory (זיכרון פרטי): זיכרון ששייך אך ורק לתוכנה הספציפית (שם היא שומרת את הנתונים שלה). לתוכנות אחרות אין גישה אליו.
Shareable Memory (זיכרון משותף): כשפותחים תוכנה, היא לרוב צריכה להשתמש בקבצי מערכת וספריות (קבצי DLL). במקום לטעון את אותם קבצי DLL לזיכרון מחדש עבור כל תוכנה ולבזבז המון מקום, ווינדוס טוענת אותם פעם אחת לזיכרון ה"משותף". כשתוכנה חדשה נפתחת וצריכה את אותו קובץ, ווינדוס פשוט "מפנה" אותה לקובץ שכבר קיים בזיכרון.
אז איפה נוצר הפער בחישוב?
מכיוון שהזיכרון המשותף משמש המון תהליכים במקביל, אי אפשר לשייך אותו רק לתוכנה אחת. אם מנהל המשימות היה סופר אותו לכל תוכנה בנפרד, היו נוצרות כפילויות עצומות והיינו מקבלים סכום שעובר את סך הראם הפיזי שיש במחשב.
לכן, מנהל המשימות מציג לכם כברירת מחדל רק את הזיכרון הפרטי (Private) של כל תהליך, ומשמיט את החלק המשותף.
עוד שתי סיבות לפערים:
זיכרון מטמון (Cache): ווינדוס מנצלת זיכרון "פנוי" כדי לטעון מראש קבצים שהיא חושבת שתוכנות יצטרכו (כדי שהמחשב ירוץ מהר יותר). הזיכרון הזה נראה "תפוס" במד הכללי, אבל הוא למעשה זמין וישוחרר מיד אם תוכנה תהיה זקוקה לו.
חומרה ומערכת: חלק מהזיכרון שמור מראש לחומרה (כמו כרטיס המסך) ולליבת מערכת ההפעלה, ולא מוצג תחת שורות התהליכים הרגילים.
הערה: עשיתי כאן כמה הפשטות לשם הבהירות. מי שרוצה לראות את התמונה המלאה והמדויקת, יכול להשתמש ב-Resmon (צג המשאבים שמובנה בווינדוס) או בכלים מתקדמים כמו RAMMap ו-Process Explorer.
גילוי נאות - כשכתבתי את הפוסט הוא יצא לי מבולגן ועמוס במושגים טכניים אז נתתי לג'מיני שיארגן לי אותו
מקווה שיצא ברור