סימני מים

הבעיה:

כאשר החוצץ מלא, ותהליך מבקש לכתוב מספר תוים נגיע למצב הבא:

  1. התפנה מקום אחד בחוצץ.
  2. המקום נצרך ואין מקום פנוי נוסף Ü resched.
  3. מתפנה מקום נוסף.
  4. חזור ל- 1.

במצב זה, תהליך המבקש לכתוב מספר תוים יבצע resched על כל תו. פעולה זו הינה יקרה, ובעיקר מיותרת.

למשל, תהליך המבקש לכתוב 100 תוים כאשר יש רק 30 מקומות פנויים בחוצץ, ע”י (CONSOLE, buf, 100) write, יכתוב 30 תוים ואח”כ על כל תו נוסף תתבצע החלפת תהליכים.

סימני מים - הפתרון:

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

בכך אנו חוסכים מספר רב של החלפות תהליכים.

הערות ודגשים

  • אם נרצה, למשל, לגרום ל-XINU לנתח את הקלט של המשתמש ולהגיב בהתאם - למשל - אם נרצה שבמקרה שיוקש רצף מסוים של תווים XINU תבצע פעולה כלשהי, נוסיף את הקוד המתאים ב-ttyiproc().
  • המיקום בו נוצרים התהליכים ttyoproc, ttyiproc. באיתחול המערכת main קוראים ל-sysinit. הפונקציה קוראת לאופרטור המופשט init(0), כאשר 0 מציין את מזהה ההתקן (tty). init קוראת ל-ttyinit, שיוצרים את התהליכים של tty.
  • עדיפות תהליך הפלט: TTYOPRIO. עדיפות תהליך הקלט: TTYIPRIO.


תגיות המסמך:

מאת: באסל

תודה

הסברתם את זה, כמו שאר הנושאים, באופן הכי ברור שיש.
שיתוף:
| עוד