תרגול vm Flashcards
מהי פרגמנטציה חיצונית ופנימית
חיצונית
בזבוז בהסתכלות מבחוץ
על מקטעי הזכרון יש חורים
פנימית
לדוגמה קומפיילר מיישר את כל הבקשות לגודל של מכפלה מסויימת
ואז נוצר בזבוז פנימי בתוך כל בלוק
מהו
MMU
רכיב חומרה בתוך המעבד
אשר אחראי לתרגום כתובת וירטואלית לפיזית
Memory management unit
מה זה אומר מרחב זכרון של תהליך
כל תהליך חי בבועה משל עצמו
וחושב שהוא התהליך היחידי שרץ על הזכרון במחשב
מה זה
swapping
מערכת ההפעלה מעבירה זכרון לדיסק
ככה נוצר אשליה לתהליך שהוא יכול לגשת להשתמש ביותר זכרון ממש שיש בכל המחשב
הסבר את היתרונות הבאים של זכרון וירטואלי
Demanded pagin
Deduplication
Cow
לא באמת מקצים את הזכרון עד לגישה הראשונה אליו
Lazy allocation בתכלס
אם יש כמה תהליכים אשר משתמשים באותו הזכרון לקריאה בלבד כמו libc אין צורך לשכפל את הזכרון
בעת fork לדוגמה כל הזכרון מסומן כקריאה בלבד לשני התהליכים ואז הראשון שרוצה להשתמש בו גורם להעתקה שלו ברקע
מה זה דף ומה זה מסגרת
דף בזכרון וירטואלי
מסגרת בפיזי
שניהם 4k
מסגרת ב32ביט
כמה דפים יכולים להיות לכל מרחב וירטואלי
בIA32
מליון בערך
המרחב שאפשר לגשת אליו הוא 2 בחזקת 32
גודל כל דף הוא 4 קילו שזה 2 בחזקת 12
זה חלקי זה נקבל מליון
כמה ביטים צריך בשביל לסמן את מספר הדף
בia32
אם יש מליון דפים
שזה 2 בחזקת 20 אז צריך 20 ביטים
איך עובד המיפוי ברמת הביטים
בין זכרון וירטואלי לפיזי
בia32
20 הביט העליונים יהיו לסימון מספר המסגרת
אמרנו שיש מליון לכן 20
ו12 הביטים התחתונים יסמנו את ההיסט בתוך המסגרת כי היא בגודל 4 קילו בייט לכן 12
איך ממופה ההיסט ומספר הדף למסגרת
בia32
ההיסט זהה לא צריך תרגום
המספר דף למסגרת בטבלת הדפים
למה אי אפשר
או לא פיזבילי
לעשות טבלת דפים לינארית
כלומר מערך אחד לאחד
כי בפועל התהליכים לרוב הם קטנים ולא ניגשים לכל מרחב הזכרון שלהם
כמו כן לכל דף נצטרך לשמור את מספר הדף ועוד סיבות בקרה מה שיגרום לגודל של
4 מגה ב32 ביט
ו512 גיגה ב64 ביט
וזה לכל תהליך
הסבר את הרעיון הכללי של טבלת דפים הררכית
נקודת ההנחה היא שרוב התהליכים לא משתמשים בכל הזכרון שלהם ואפילו רק בחלק קטן ממנו
לכן נוסיף עוד שכבת אבסטרקציה
נחלק את הדפים לבלוקים
עם 1024 כניסות בכל אחד
ותהיה טבלה שתסמן האם בלוק מוקצה או לא
כמה כניסות לכל בלוק בטבלת דפים
Ia32
1024
בלוק הוא בעצמו מסגרת לכן בגודל 4 קילו
וזה חלקי 4 בייט של כל כניסה
לכן 1024
PGD ראשי תיבות
Page global directory
מהו pgd
טבלת הדפים ההירכית
מסמנת לכל בלוק האם מוקצה או לא מוקצה
בתוך כל בלוק יהיה מיפוי של הדפים המוקצים
אם לא אז יש במקום שלה null
אם כן יהיה מצביע לטבלת דפים בבלוק
PDE
PTE
Pde page directory entry
Pte page table entry
רשומות בטבלה ההיררכית שה pde מצביע עליה
רגיסטר
Cr3
מצביע לשורש טבלת הדפים של התהליך הנוכחי
כתובת פיזית
אחרת רקורסיה אינסופית
איך מתבצע תרגום מכתובת וירטואלית לפיזית בטבלת דפים היררכית
Ia32
יש 32 ביט של כתובת
ה12 התחתונים הם הoffset שנשמר זהה
אנחנו יודעים להגיע לpgd בעזרת cr3
ה10 העליונים יסמנו את הכניסה בpgd
לפיהם נוכל לדעת מה הכתובת של הpage table של הבלוק הזה
כעת ניקח את ה10 ביטים הבאים והם יהיו
האינדקס בתוך הpage table
כעת הגענו למסגרת הפיזית ונשתמש בoffset
מה גודל של כל כניסה בטבלת הדפים
Ia32
32 ביט
20 לסימון המסגרת
12 לבקרה
מהו ביט 0 בכל PTE
זהו ביט הpresent
הוא מסמן האם הדף נמצא בזכרון הפיזי 1
או לא 0
מה זה אומר שביט
Present=0
אם כל הביטים הם 0 אז הדף לא ממופה כלל
אם לפחות אחד הביטים הוא לא 0 אז הדף דופדף לדיסק ובpte יהיה את הכתובת שלו בswap area
ביט בקרה
Accessed
מודלק כל פעם שיש גישה לדף
מכובים באופן מחזורי
כדי לאכוף פינוי דפים לדיסק
ביט בקרה dirty
מודלק בכל פעם שיש כתיבה לנתון בדף
משמש את מערכת ההפעלה כדי לדעת שיש מידע שצריך להכתב לדיסק
ביט בקרה
Read/write
0 קריאה בלבד
1 קריאה וכתיבה