סמפור (מדעי המחשב) – הבדלי גרסאות
תוכן שנמחק תוכן שנוסף
Luckas-bot (שיחה | תרומות) מ בוט מוסיף: hi:सेमाफोर (प्रोग्रामिंग) |
אין תקציר עריכה |
||
שורה 1:
ב[[מדעי המחשב]]], '''סמפור''' (semaphore) הוא מנגנון ל[[סנכרון (מדעי המחשב)|סנכרון]] (תאום פעולה) בין כמה תהליכים הפועלים ב[[מחשב]] במקביל
==תאור הבעיה==
פתרונות לבעיה יכללו תמיד המתנה עד אשר תנאי כלשהו יתקיים, כתנאי לכניסת התהליך לקטע הקריטי (עד אשר תנאי כלשהו יתקיים, אל תבצע פעולה). מימוש המתנה כזו יעשה על ידי [[לולאה|לולאת]] WHILE. אולם, המתנה בתוך [[לולאה|לולאת]] WHILE, דורשת זמן [[מעבד]]. בנוסף לכך, קיימת סכנה כי בעת ביצוע קטע הקוד לכניסה לקטע הקריטי, אשר מורכב ממספר פקודות (או מפקודה אחת אשר מורכבת ממספר פקודות מכונה), "יחטף" המעבד מהתהליך וכך עלול לקרות מצב כי המשך הביצוע יסתמך על נתונים לא מעודכנים. אחד הפתרונות שהוצעו לבעיה היה הוספת רכיב [[חומרה]] אשר מבצע סדרת פקודות ב[[פעולה אטומית|צורה אטומית]], אשר לא מאפשרת ל[[מערכת הפעלה|מערכת ההפעלה]] (או למתזמן) לקטוע את ביצוע סדרת הפקודות. אולם פתרון זה לא מנע את בזבוז משאבי המעבד בהמתנה לקיום התנאי לכניסה לקטע הקריטי. ▼
כאשר קיימים מספר תהליכים אשר קיימת ביניהם [[השפעה הדדית]], לרוב בשל גישה למשאב משותף כלשהו (למשל, תא [[זיכרון (מחשב)|זיכרון]] או [[קובץ]] משותפים). את הבעיה פותרים על ידי הגדרת "[[קטע קריטי]]", אשר כל אחד מן התהליכים יוכל להיכנס אליו או לצאת ממנו רק לאחר ביצוע מספר פעולות, שמטרתן להבטיח כי בכל נקודת זמן רק תהליך אחד נמצא בתוך קטע הקוד הקריטי שלו.
==פתרון באמצעות לולאה==
כיום נהוג לפתור בעיה זו על ידי שימוש ב'''סמפורים''': מעין דגל אשר כדי לשנות את ערכו התהליך נדרש לבקש ממערכת ההפעלה. במידה והדגל כבר "נתפס" על ידי תהליך אחר, מערכת ההפעלה תעביר את התהליך למצב שינה (SLEEPING או WAITING בהתאם לסוג מערכת ההפעלה), ותעיר אותו על ידי משלוח [[פסיקה (מחשב)|פסיקה]]▼
▲פתרונות לבעיה יכללו תמיד המתנה עד אשר תנאי כלשהו יתקיים, כתנאי לכניסת התהליך לקטע הקריטי (עד אשר תנאי כלשהו יתקיים, אל תבצע פעולה). מימוש המתנה כזו יעשה על ידי [[לולאה|לולאת while]]
(INTERRUPT) ברגע שהדגל "משוחרר" על ידי התהליך שתפס אותו. בצורה כזו מתאפשר סנכרון ללא בזבוז זמן מעבד, וכן מובטח לנו כי מערכת ההפעלה מפקחת על מצב הדגל ושינוי של ערכו מבוצע בצורה אטומית (לא ניתן לחטוף לתהליך את המעבד בזמן שינוי ערך הדגל). ▼
אחד הפתרונות שהוצעו לבעיה היה הוספת רכיב [[חומרה]] אשר מבצע סדרת פקודות ב[[פעולה אטומית|צורה אטומית]], אשר לא מאפשרת ל[[מערכת הפעלה|מערכת ההפעלה]] (או למתזמן) לקטוע את ביצוע סדרת הפקודות. אולם פתרון זה לא מנע את בזבוז משאבי המעבד בהמתנה לקיום התנאי לכניסה לקטע הקריטי.
==פתרון הבעיה באמצעות סמפור==
▲כיום נהוג לפתור בעיה זו על ידי שימוש
(INTERRUPT) ברגע שהדגל "משוחרר" על ידי התהליך שתפס אותו.
▲
[[קטגוריה:תהליכים (מדעי המחשב)]]
|