You are on page 1of 4

‫הרצאה ‪ 12‬מערכות הפעלה‬

‫מצגת ‪ DeadLock - 7‬שקף ‪.31‬‬

‫‪ (a‬תנאי הכרחי ל ‪ DeadLock‬זה ‪ ,Hold & Wait‬אם אף אחד לא מחזיק כלום‪ ,‬תנאי זה לא מתקיים‬
‫ומכיוון שזהו תנאי הכרחי‪ ,‬לא מתקיים ‪DeadLock‬‬

‫‪ )b‬קיים תזמון בו התרדים יכולים לסיים‪ ,‬לכן המצב בטוח‬

‫‪ )c‬לא קיים מצב כזה לכן לא בטוח‬

‫האלגוריתם הבנקאי‪:‬‬

‫האלגוריתם החיצוני‬
‫‪ .1‬התהליך מבקש הקצאת משאב מהמערכת‪.‬‬
‫‪ .2‬המערכת מסמלצת את ההקצאה‪.‬‬
‫‪ .3‬המערכת בודקת האם המצב הנוצר בטוח ‪ -‬בעזרת האלגוריתם הפנימי‪.‬‬
‫‪ .4‬אם כן‪ ,‬ההקצאה מאושרת‪ .‬אם לא‪ ,‬לא‪.‬‬

‫האלגוריתם הפנימי‬
‫‪ .1‬בחר תהליך מסויים שיכול לסיים‪ .‬תן לו את כל המשאבים הדרושים‬
‫‪ .2‬ברגע שמסיים ‪ -‬שחרר את כל המשאבים שלו‪.‬‬
‫‪ .3‬סמן את התהליך כמי שסיים‪.‬‬
‫‪ .4‬אם כולם סיימו אז המצב הוא בטוח‬
‫‪ .5‬אם תהליך לא יכול לסיים‪ ,‬המצב לא בטוח‪.‬‬

‫משאבים מרובים‪:‬‬
‫בדומה לאלגוריתם הפנימי (באמצעות וקטורים ומטריצות)‬

‫בדוגמא בשקף ‪:35‬‬


‫‪ - E‬כמות המשאבים הכוללת‬
‫‪ - A‬כמות המשאבים הפנויים‬
‫‪ - C‬כמות המשאבים שהקצנו‬
‫‪ - R‬משאבים הזקוקים לסיום‬

‫במקרה הלא בטוח ש ‪ E‬רוצה לקחת ‪, Scanner‬‬


‫חיסור אחד הוקטורים שב ‪ R‬ב ‪ A‬נותן מספר שלילי ולכן זה מוביל למצב לא בטוח‪.‬‬

‫הימנעות מדדלוק לא פרקטי‪:‬‬


‫‪-‬מספר משאבים עבור תהליך אינו ידוע מראש‪.‬‬
‫‪-‬משאבים יכולים להיעלם‪.‬‬
‫‪-‬משאבים חדשים (או תהליכים) יכולים להופיע‪.‬‬

‫‪Deadlock Detection and Recovery‬‬


‫זיהוי מעגלים בגרף התהליכים‪-‬משאבים‪ ,‬ע"י אלגוריתם ‪. DFS‬‬

‫מתי מערכת צריכה לבדוק ‪?Deadlock‬‬


‫‪ -‬במקצבי זמן‬
‫‪ -‬כאשר ה ‪ CPU‬עובד באופן קיצוני‪.‬‬

‫שחזור ( ‪)Recovery‬‬
‫‪ - preemtion‬לא ישים‪.‬‬
‫‪rollback‬‬
‫‪kill process‬‬
‫שורה תחתונה ‪ -‬קשה לשחזר מצב של ‪ ,deadlock‬עדיף להמנע‪.‬‬

‫זיהוי איזה תהליך להרוג‬


‫‪ -‬תעדוף‬
‫‪ -‬זמן שהתהליך חושב וכמה זמן עוד ימשיך‪.‬‬
‫‪ -‬כמות משאבים שהיו בשימוש‬
‫‪ -‬כמות משאבים שידרשו בעתיד‬
‫‪ -‬כמה תהליכים צריך להרוג‬
‫‪ -‬תהליך אינטרקטיבי או ‪batch‬‬

‫(דילוג על ‪)Combined approach‬‬

‫‪Additional deadlock issues‬‬

‫מצגת ‪:Memory-part1 8‬‬

‫‪Swapping‬‬
‫‪ -‬לקחת את כל התהליך ולהוריד‪/‬להעלות אותו לזיכרון‪.‬‬
‫‪ -‬זמן ההעברה גדול! הזמן פרופורציונלי לכמות הזכרון לו עושים ‪swap‬‬
‫‪ -‬יוצר חורים בזיכרון‬
‫‪ -‬אין צורך להקצות ‪ swap space‬ל ‪deamons‬‬
‫‪ -‬לא בשימוש יותר‪.‬‬

‫)‪Multiprogramming with Fixed Partitions(OS/360 MFT‬‬

‫כדי למנוע חורים בזיכרון (שתהליך קטן נכנס למקום של תהליך גדול)‪,‬‬
‫קיים תור בו מחפשים את התהליך הגדול ביותר בתור המתאים למקום שהתפנה‪.‬‬
‫הבעיה‪ :‬יכול לגרום להרעבה של תהליכים קטנים‪.‬‬
‫פתרון‪" :‬קופה מהירה בסופר" נקצה זיכרון שמיועד לתהליכים קטנים‪.‬‬

‫)‪Memory Allocation - Keeping Track (bitmaps; linked lists‬‬


‫ייצוג הזיכרון ע"י מפת ביטים או רשימה מקושרת‪.‬‬

‫‪ - bitmap‬פשוט יותר אבל צריך להחזיק ביט עבור כל תא בזיכרון‪ ,‬חיפוש מהיר יותר‪ ,‬ויכולת‬
‫להחזיק יותר מידע‬

‫רשימה‪ -‬הקצאת המבנה קטנה יותר‪ ,‬חיפוש ארוך יותר‬

‫מתי מבצעים ‪?Swapping‬‬


‫‪Kernel runs out of memory -‬‬
‫‪a fork system call – no space for child process -‬‬
‫‪a brk system call to expand a data segment -‬‬
‫‪a stack becomes too large -‬‬
‫‪A swapped-out process becomes ready -‬‬
‫מי?‬
‫כמה?‬

‫‪Binding of Instructions and Data to Memory‬‬


‫מתי מבצעים חישוב כתובות וזיכרון‪:‬‬
‫‪ .1‬בזמן קומפילציה ‪ -‬מיקום הזכרון ידוע מראש‪ ,‬חייבים לקמפל מחדש אם מיקום ההתחלה‬
‫משתנה‪.‬‬
‫‪ -Load time .2‬זמן טעינה‪ ,‬אם ידוע שכל התהליך יושב ברצף בזכרון‪ ,‬נוכל לשמור את ה‪.offset‬‬
‫‪ - execution time .3‬הקישור מתבצע בזמן ריצה‪ ,‬נדרש כאשר תהליך יכול לשנות את מיקום‬
‫הזכרון שלו במהלך הריצה‪.‬‬

‫‪ 2 ,1‬דורשים שתהליך יחזור בדיוק לאותו מקום במהלך ‪.swap‬‬

‫‪Dynamic Linking‬‬
‫שמירת פונקציות שמשתמשים בהם הרבה למשל כמו ‪ ,printf‬שאין צורך להרבה עותקים‪,‬‬
‫מחזיקים משהו קטן ‪ ,stub‬שמצביע על המיקום שלו בדיסק לשימוש חוזר‪ .‬ככה אנחנו חוסכים‬
‫מקום עבור משהו שידוע שישתמשו בו הרבה‪.‬‬

‫אסטרטגיות‬
‫‪ first fit -‬המקום הראשון שמצאתי‪.‬‬
‫‪ next fit -‬במקום להתחיל כל פעם מהתחלה (יכול לקחת הרבה זמן עד שנמצא את הראשון)‪,‬‬
‫נתחיל לחפש מהמקום האחרון‪.‬‬
‫‪ best fit -‬נעבור על הכל‪ ,‬ונחפש את המקום הכי קטן שמתאים‪.‬‬
‫חסרון‪ - :‬עוברים על הכל‬
‫‪ -‬יווצרו המון חורים קטנים שלא מתאימים לכלום (הכנסנו ‪ 3‬למקום של‬
‫‪)4‬‬
‫‪ worst fit -‬כמו ‪ best fit‬רק גרוע יותר‪.‬‬
‫‪ quick fit -‬מספר תורים המחזיקים אינדקסים לחורים בגדלים שונים‪ .‬הבעיה‪ :‬לוקח זיכרון‪ ,‬מבנה‬
‫נתונים מסובך לאתחול‪.‬‬

‫השניים הראשונים הם אלה שבשימוש הרבה פעמים בגלל הפשטות שלהם‪.‬‬

‫‪Fragmentation‬‬
‫‪ -    External Fragmentation‬נוצרו לנו חורים‪ ,‬קיים זיכרון לקיים את הבקשה‪ ,‬אבל הוא לא רציף‪.‬‬
‫‪ - Internal Fragmentation‬הקצנו יותר מידי לתהליך ולא משתמשים בכל הזכרון‪.‬‬

‫פתרונות‪:‬‬
‫‪ -‬הזזת בלוקים‬
‫‪Compaction -‬‬

‫‪" -    The Buddy Algorithm‬אלגוריתם אח שלי"‬

‫מחלקים את הזכרון לחלקים של ‪ .2‬עד שמוצאים חלק מספיק קטן שיכול לקיים את הבקשה‪.‬‬
‫ה ‪ 2‬שהתפצלו הם אלה שיתאחדו אחר כך מחדש כשיתפנו‪.‬‬

‫‪Logical    vs. Physical Address Space‬‬


‫מרחב כתובות לוגי ‪ -‬מרחב כתובות פיזי (יש וירטואלי)‬
‫לוגי ‪ -‬מרחב הכתובות שרואה תהליך מסויים‪ .‬מתייחס רק לזיכרון שרלוונטי אליו‪.‬‬
‫פיזי ‪ -‬מה באמת נמצא עכשיו בזיכרון הפיזי‪.‬‬
‫וירטואלי ‪ -‬כל המאגר שנמצא על הדיסק‪ ,‬לא זיכרון אמיתי‪ ,‬כאילו שיש זיכרון (וירטואלי) ‪ -‬לא‬
‫לבלבל עם לוגי‪.‬‬

‫‪paging‬‬
‫שני סוגים‪:‬‬
‫‪ -‬חלוקה לפי גדלים קבועים ‪paging -‬‬
‫‪ -‬חלוקה לפי נושאים ‪ -‬סגמנטים‬

‫‪Paging and Virtual Memory‬‬


‫‪ -‬תמיכה במרחב זכרון נפרד מהזכרון הפיזי‪.‬‬
‫‪ -‬רק חלק מהתכנית נמצא בזכרון‪ ,‬תכנית יכול להיות גדולה יותר מהזכרון הפיזי‪.‬‬

‫‪page table‬‬

You might also like