OS5_virtual_memory

Download Report

Transcript OS5_virtual_memory

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