תרגול 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 קריאה וכתיבה
ביט בקרה
User/supervisor
0 גישה לקוד הגרעין בלבד
1 גישה לכל תהליך
Tlb ראשי תיבות
Translation lookaside buffer
איפה נשמר הtlb
בזכרון ייעודי ומהיר בתוך המעבדחלק מהmmu
למה צריך את הtlb
בממוצע כחצי מהפקודות ניגשות לזכרון
וכל אחת מהם דורשת חיפוש בכל היררכית הדפים
עי שמירה של טבלה קטנה עם התרגומים האחרונים נחסוך הרבה בקשות לזכרון בתקווה
מה מכילה כל רשומה בtlb
מספר דף
מספר מסגרת
ביטי בקרה
Acecced,dirty…
מה קורה לתוכן הtlb בעת שינוי cr3
פסילה של כל תוכן הtlb
Tlb flush
איך מערכת ההפעלה שומרת על נכונות הtlb
מתי
אם הגרעין מוחק כניסה בטבלת הדפים כדי למפות אותה לדיסק
הוא חייב גם למחוק אותה מהtlb כי הוא עדיין מצביע למסגרת שכבר מופתה החוצה
בעת החלפת הקשר cr3 משתנה
אחרת התהליך החדש עלול לגשת למסגרות של התהליך הקודפ
מתי לינוקס לא תפסול את תוכן הtlb?
ולמה זה כדאי
כדי למנוע פגיעה בביצועים!
אם החלפת ההקשר היא בין שתי חוטים של אותו תהליך מרחב הזכרון נשאר כשהיה ואפשר לשמור אותו
אם החלפת ההקשר היא לתהליך גרעין
משום שאין לגרעין טבלת דפים משלו אין להם מרחב זכרון משלם והם עובדים כל מרחב הזכרון של הגרעין
יכול להיות שתהליך ביקש עדכון מהקרנל למבנה נתונים שלו לדוגמה קידום הseek
מה החלק של מה בתרגום הדפים
מה החלק התוכנתי בכל התהליך
בעצם כל התהליך למעט page fualt הוא תהליך חומרתי
Tlb and page walk
בכמה ביטים משתמשים באמת מתוך ה64 בx64
ומה גודל מרחב הזכרון לכל תהליך
48 ביטים
256 טרה
מה גודל מרחב הזכרון הפיזי ב
X64
האם הוא שווה לגודל מרחב הזכרון הוירטואלי
52 ביטים
בעוד שהווירטואלי הוא רק 40
מה גודל כניסה בטבלת הדפים ב
X64
מספר מסגרת מכיל 40 ביטים כגודל הדף המקסימלי
ההסבר לא הכי משכנע אבל לא נורא
12 ביטים לדגלים
קיבלנו 52
אבל ליישור לחזקת 2 נקבל 64 ביטים
כלומר 8 בתים
כמה כניסות pte בכל מסגרת
ב64
כמה ביטים צריך בשביל לייצג אותו
512
כלומר 9 ביטים לייצוג
4 אלף חלקי 8 גודל כל כניסה
ולוג של גל זה יתן 9
גודל דף סטדנרטי ב
64
גם 4k
כמה רמות תרגום ב
X64
וכמה ב
32
ב32
יש 2 רמות תרגום
ב64
יש 4 רמות
איך ממופים הביטים שאיתם מתרגמים כתובת וירטואלית לפיזית ב
64
ה12 התחתונים הם offset בדומה ל32
ומשם למעלה יש 4 רמות של אינדוקס כשבכל אחד יש 9 ביטים לכל אינדקס כי אמרנו שיש 512 כניסות
נשארו ביטים 48 עד 63 שאינם בשימוש
מה זה דפים גדולים
האם גם ב32 וגם ב64
רק ב64
הרעיון הוא להשתמש בפחות רמות של תרגום ולנצל את זה בשביל להוסיף עוד לoffset
כך שבמקום 4k שמיוצג עי 12 ביטים נוכל להשתמש בביטים שהיו של התרגום
מסתבר שלפי ההרצאה אפשר גם ב32
מה היתרונות והחסרות של דפים גדולים
יתרונות
אלו יתרונות שנובעים מכך שיש פחות דפים
משפרים ביצועים מבחינת זה שהם מקטינים את כמות התרגומים
מגדילים את יעילות הtlb
מקצרים את הpage walk
חסרונות
פרגמנטציה פנימית יכולה להיות
פרגמנטציה חיצונית ומחסור בזכרון רציף אם משתמשים גם בדפים קטנים וגם בגדולים
פוגעים בביצועים מבחינת latency
כי לדוגמה pagefualt יהיה ארוך יותר כי יותר מידע צריך להטען מהדיסק
מהו מנגנון
Read ahead
לינוקס מזהה גישה סדרתית לדיסק וטוענת מבעוד מועד את הדפים הבאים כדי לחסוך שגיאות דף
האם דפים גדולים חוסכים לנו את כמות שגיאות הדפים בגישה סדרתית?
לא
בגלל מנגנון read ahead אנחנו מקבלים זאת בכל מקרה
האם זהו יתרון שדפים גדולים מורידים את מספר חריגות הדפים
לאו דווקא
לדוגמה שירות אינטרנט שרגיש לדיליי יפגע מאוד אם הוא יצטרך לחכות יותר זמן לטעינה של הדף הגדול
לאיזה 2 חלקים מפוצל מרחב הזכרון
ואיך הם מתחלקים בין תהליכים
החצי העליון
מרחב זכרון של הגרעין
נשאר זהה בין כל התהליכים
החצי התחתון
מרחב זכרון של המשתמש
משתנה כל פעם בין תהליכים
האם מרחב הזכרון של המשתמש ושל הגרעין יכולים לדופדף לדיסק
רק המשתמש
המרחב זכרון של הגרעין לעולם לא ימופה לדיסק
מה זה אומר שמרחב הזכרון של הגרעין נשאר זהה בין כל התהליכים
הכתובות הווירטואליות של כל אובייקט בגרעין נשארת קבועה בין כל התהליכים
מהו memory descriptor
איך קוראים למבנה שמייצג אותו
מתאר הזכרון של התהליך
מיוצג על ידי מבנה mm_struct
איפה שמור מתאר מרחב הזכרון
בpcb
תחת שדה
mm