מרוץ תהליכים
במדעי המחשב, מרוץ תהליכים (Race condition) או לעיתים תחרות או תנאי מרוץ, הוא מצב שבו התנהגותה של מערכת (בדרך כלל מרובת תהליכונים או אוסף של מספר תהליכים העובדים יחדיו במסגרת מערכת) תלויה בסדר התזמון של התהליכונים (או התהליכים), או באירועים אחרים במערכת שלא קורים בתזמון צפוי. תכונה זו עלולה לגרום להתנהגות בלתי צפויה ואפילו לבאג, אם המתכנת שכתב את התוכנה לא לקח בחשבון ההרצות האלו. חמור מכך, ייתכן שכמעט כל ההרצות יתנהגו כמצופה להוציא מספר בודד של הרצות שבהן התוכנית תקולה; דבר המקשה לזהות מצב שכזה.
אם התחרות היא בין תהליכים או תהליכונים מסוגים שונים, באופן המשפיע על התנהגות המערכת נרצה להבטיח סדר מסוים ולא לאפשר תחרות חופשית. דרך אחת להבטיח סדר היא על ידי סנכרון.
מקובל להדגים את הבעיה באמצעות מרוץ סוסים שבו כל סוס מייצג אלמנט אחר של התוכנה. כך למשל ממשק המשתמש מיוצג על ידי סוס אחד, וקישוריות הרשת על ידי אחר. על מנת שהתוכנית תפעל כנדרש, על סוס מסוים, נאמר מספר 5, לזכות בתחרות. אם אכן יזכה – התוכנית תפעל כראוי, בעוד שאם סוס אחר יזכה, התוכנית עלולה לקרוס.
כיוון שמדובר בתחרות, התוצאות לא ידועות מראש ובעולם המחשבים גם יכולות להשתנות בין מערכות שונות. לכן כדי להבטיח את ניצחונו של סוס מסוים, על הרצים לתאם ביניהם את הריצה.
בהקשר של נכונות מערכות מקביליות, תנאי בסיסי לכך שמערכת היא נכונה, הוא אם בכל הרצה התנהגותה שקולה. בלשון אחרת, במערכת מקבילית נכונה אין מרוץ תהליכים.
מרוץ תהליכים כפרצת אבטחה
[עריכת קוד מקור | עריכה]בתנאים מסוימים, מרוץ תהליכים עלול לגרום לבאג משמעותי אשר יחשוף את המכונה לפגיעות שפצחנים יוכלו לנצל. לדוגמה, באוקטובר 2016, תוקנה פרצה המכונה Dirty COW (מסוגנן כ-dirtyc0w), אשר עלולה להוביל למצב של הסלמת הרשאות.[1][2] הפרצה נבעה מהאופן שבו הקרנל של לינוקס מבצע העתקה בזמן כתיבה (copy on write), כאשר קיימים מספר תהליכים הקוראים וכותבים במקביל את המצב של דף הזיכרון.
הערות שוליים
[עריכת קוד מקור | עריכה]- ^ הפרסום הראשוני, CVE-2016-5195, באתר Red Hat
- ^ פירוט מקיף אודות הפרצה