disable/restore – מניעה הדדית ברמת מערכת ההפעלה

קטעים רבים של קוד מערכת ההפעלה הם קטעים קריטיים אותם נרצה לבצע ללא החלפת תהליכים.

אומנם מערכת ההפעלה יכולה שלא ליזום החלפת תהליכים, אולם פסיקות חומרה עלולות לגרום להחלפה, ולכן בקטעים קריטיים נרצה למנוע פסיקות חומרה.

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

כל קריאת מערכת עטופה, וחייבת להיות עטופה, בצמד disable/restore.

מאחר ש-disable שומר את המצב הנוכחי של הדגלים ו-restore מחזיר את אותו המצב, ניתן להשתמש בהם בצורה מקוננת, תוך שמירה על הכללים הבאים:

  1. לא יתקיימו שתי קריאות ל-disable עם אותו פרמטר ל-disable.
  2. הפונקציה הקוראת ל-disable היא הקוראת ל-restore בסיום הקטע הקריטי.

מקרו נוסף הוא enable המאפשר להדליק את דגל הפסיקות, ללא קשר לערכו האחרון בעת כיבויו. לא רצוי להשתמש במאקרו זה, ו-XINU במימושה הנוכחי אינה משתמשת בו.

למשתמש אסור לקרוא ל-disable/restore/enable. במערכות הפעלה מתקדמות המשתמש אינו יכול לקרוא להן.

תגיות המסמך:

מאת: באסל

תודה

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