280 likes | 582 Vues
(יתכן שכדאי לעבור ל class19 של csapp ). זיכרון וירטואלי. זיכרון וירטואלי מבוסס על שקפים מ 'מערכות הפעלה' 234119. תהליך 1. תהליך 2. תהליך 3. שטח זיכרון פנוי. מ"ה. ניהול זיכרון ראשי. זיכרון המחשב מחולק בין מ ” ה ובין התהליכים השונים.
E N D
(יתכן שכדאי לעבור ל class19 של csapp) זיכרון וירטואלי זיכרון וירטואלי מבוסס על שקפים מ 'מערכות הפעלה' 234119
תהליך 1 תהליך 2 תהליך 3 שטח זיכרון פנוי מ"ה ניהול זיכרון ראשי • זיכרון המחשב מחולק בין מ”ה ובין התהליכים השונים. • בעבר כל מרחב הזיכרון של תהליך במצב ריצה היה בזיכרון הראשי לפני תחילת הריצה. • כאשר נוצר תהליך חדש, היה מוקצה לו שטח זיכרון פנוי שיכול להכיל את כל מרחב הזיכרון שלו. • כאשר הסתיים התהליך, שוחרר הזיכרון שהוקצה לו.
הבעיה • בד"כ הזיכרון הראשי במחשב לא גדול מספיק לספק את דרישת הזיכרון של כל התהליכים הרצים ''בו-זמנית'' (או אפילו אחד!).
פתרונות ראשוניים: • לחסוך: • קוד התהליך בדרך כלל מנופח עכב כך שהוא מכיל ספריות שהתהליך לא משתמש בהן בפועל. • האם אפשר לחסוך קִישוּר עם קוד לא נדרש? • כן, בעזרת קישור דינמי.
פתרונות ראשוניים: • לשתף: • במקרים רבים רצים תהליכים שיכולים לשתף ספריות. • בפועל, קוד הספריות משוכפל בזיכרון. • האם אפשר להימנע מהשכפול? • פתרונות אפשריים: ספריות משותפות, מנוהלות על ידי מ"ה.
זיכרון פיזי / לוגי • נפריד את הזיכרון הפיזי מהזיכרון הלוגי של התהליך • לצורך כך נדרש לתמיכת חומרה, ומערכת ההפעלה. • החומרה מספקת מנגנון בשם MMU לתרגום בין הכתובת הלוגית לפיזית • רכיב זה מנהל גם אספקטים אחרים של הזיכרון, כגון כל מערכת ה cache.
Physical Memory User Program MMU Logical addr. Physical addr. MMU = Memory Management Unit • MMU נמצא במקום הבא:
טבלת הדפים • נִצוֹר אזורי זיכרון בגודל אחיד בשם דפים (pages). • כל X בתים (דף אחד) רציפים בזיכרון יקבלו מלת תרגום ב- MMU. • עתה, נתאים דפים לוגיים לדפים פיזיים (מסגרות - frames). בעת החלפת הקשר, טבלת הדפים של התהליך עולה למקום מוגדר מראש בזיכרון. ה MMU פונה למקום זה.
מערכת ההפעלה ודפדוף • מבני נתונים של מערכת ההפעלה כוללים: • טבלת מסגרות: לכל מסגרת בזיכרון הפיזי: פנויה / מוקצת (ולמי). • טבלת דפים לכל תהליך.
המיפוי • כמות הזיכרון הדרוש:לדף זיכרון בגודל 2b, דרושים b ביטים. דוגמא: האות F כתובת לוגית 5 = 00101 דף #: 001 Offset: 01 תרגום: דף 1 מתרגם למסגרת 6 מסגרת #: 110 Offset: 01 תוצאת התרגום: כתובת פיזית 25 = 11001
Paging = דפדוף • מספרים: • גודל דף מקובל: 0.5Kb עד 8Kb. • מספר הדפים: sizeof mem / size of page • מעבד Intel 386 הוא המעבד הראשון של Intel בסדרת ה- x86 שתמך בדפדוף.
swapping • חלק מהדיסק מוקדש ל - 'אחסון זמני' של דפים אשר כרגע אינם נמצאים בשימוש. • זה מאפשר מצב בו גודל הזיכרון הפיזי גדול יותר מהזיכרון הלוגי.
swapping ו paging • כשתהליך בביצוע מעלים את טבלת הדפים שלו לזיכרון. • לכל רשומה בטבלת הדפים יש דגל: בצענו swap in לדף או לא. • אם הדגל מורם, הרי שניתן להמשיך בתרגום ולגשת לזיכרון. • אם לא, מ"ה מבצעת swap in, ואולי גם swap out כדי לפנות מסגרת.
טבלת הדפים Memory (RAM) Valid Virtual Page Number 1 1 0 1 1 1 0 1 0 page table (physical page or disk address) 1 Disk Storage
כיצד זה עובד? • כשניגשים לדף שאינו נמצא בזיכרון הראשי, נוצרת פסיקה בשם page fault. • מערכת ההפעלה: • תופסת את הפסיקה, • מעבירה את התהליך למצב המתנה, • מבצעת swapping, • מחזירה את התהליך לריצה. • מערכת זיכרון המממשת מודל זה נקראת virtual memory (זיכרון מדומה)
הבהרות לגבי זיכרון מדומה • כל תהליך יכול להשתמש בזיכרון רציף של עד GB 4 (אם המחשב הוא 32 סיביות). • כלומר שני תהליכים יכולים להתייחס לאותה כתובת לוגית x, אך זה ימופה לכתובות פיזיות שונות. • כמה מה RAM יכול להיות מוקדש לתהליך מסוים ברגע נתון ? • לכאורה 4GB. • למעשה, בחלונות למשל עד 2GB מוקדשים למ"ה. 2GB אלה נשארים בזיכרון – לא עושים להם swap-out.
הבהרות לגבי זיכרון מדומה • מרחב הכתובות הפיזי יכול להיות גדול יותר מ 4GB. • הכתובת נשמרת על ידי יותר מ 32 סיביות (על ידי שימוש ב (double-word. • בגרסה מסוימת של linux, למשל, זה 36 סיביות ולכן המגבלה של RAM + swap space היא 4 * 16 = 64GB. • ... אך התועלת בכך היא רק בסביבה מרובת תהליכים.
הבהרות לגבי זיכרון מדומה • האם יש טעם להרחיב את הזיכרון למעל 4GB? • לכאורה זה יכול לחסוך swapping כי מידע של מספר תהליכים יישמר בזיכרון. • בפועל זה לא יעבוד כי כל המערכת מוגבלת לשליחת כתובות ברוחב 32 סיביות. למשל לא ניתן לשלוח כתובת כזאת על ה bus. • מסקנה: רק במערכות 64 סיביות.
Translation Lookaside Buffer (TLB) • TLB משמש כזיכרון מטמון של תרגומים. TLB מכיל חומרה שמחפשת במקביל אחר רשומות תרגומים קיימים. • (נשים לב שבהחלפת תהליכים, ה TLB צריך להימחק!). • TLB מהיר יותר מזיכרון רגיל, והחיפוש בו נעשה במחיר של גישה אחת. • אחוז הפעמים שגישה לזיכרון נפתרת באמצעות ה TLB נקרא hit ratio.
זמן גישה לזיכרון • נחשב את זמן הגישה לזיכרון הממוצע בדרך הבאה: 80% hit ratio 20 nanosec TLB search 100 nanosec mem access מכאן: effective access time = 0.8*120 + 0.2*220 = 140 nanosec כלומר 40% האטה לעומת גישה בודדת. (220 = 100 גישה לטבלה, 100 לערך מהזיכרון, 20 גישה לזיכרון-מטמון בו לא מצאנו) • אבל: עבור 98% hit ratio נקבל: effective access time = 0.98 * 120 + 0.02*220 = 122 nanosec כלומר 22% האטה לעומת גישה אחת.
בעיות... • כמה דפים להביא כשנוצר page fault ואילו? • אילו דפים להוציא (כשצריך לפנות מקום) ? • איך נמנע ממצב בו המעבד עסוק כל הזמן בהחלפת דפים והתהליכים לא מתקדמים בריצתם (דִשְדוּש -- thrashing) ? • חידה: שני תהליכים שצורכים מעט זיכרון רצים בו זמנית. • האם יש חשש לדשדוש ?