סמפורים

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

אחד מסוגי התיאום הינו מניעה הדדית.

מערכת ההפעלה מיישמת מניעה הדדית עבור קטעי קוד קריטיים בעזרת disable/restore.

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

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

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

תגיות המסמך:

מאת: באסל

תודה

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