שיעור 13: מרחב הכתובות הווירטואלי
כל תהליך בלינוקס רואה מרחב כתובות וירטואלי משלו — אשליה של זיכרון פרטי. השיעור מסביר את פריסת ה-VAS (text/data/heap/stack/mmap), מראה כיצד לקרוא את /proc/self/maps, ומסביר מדוע ASLR חשובה לאבטחה.
מרחב כתובות וירטואלי הוא כמו בית מספרים: כל תהליך חושב שיש לו בית ענק לבדו, אבל OS מתרגם את המספרים לכתובות פיזיות אמיתיות.
- מרחב כתובות וירטואלי (VAS)
- מרחב כתובות פרטי שכל תהליך מקבל. הכתובות הווירטואליות מתורגמות לכתובות פיזיות על-ידי ה-MMU.
- stack (מחסנית)
- אזור זיכרון שגדל כלפי מטה (כתובות נמוכות יותר). מכיל משתנים מקומיים, כתובות חזרה וframes של פונקציות. מוגבל בגודל.
- heap (ערמה)
- אזור זיכרון דינמי שגדל כלפי מעלה. מנוהל על-ידי malloc/new. מחייב שחרור מפורש או garbage collection.
- אזור mmap
- אזור שנוצר על-ידי קריאת מערכת mmap() — מכיל ספריות shared (.so), קבצים ממופים, ואנונימי mapping.
- ASLR
- Address Space Layout Randomisation — OS מרנדם את כתובות הטעינה של stack/heap/mmap בכל הרצה כדי לקשות ניצול פגיעויות.