מרוץ תהליכים

מתוך ויקיפדיה, האנציקלופדיה החופשית
קפיצה אל: ניווט, חיפוש

במדעי המחשב, מרוץ תהליכים (Race condition) או לעתים תחרות או תנאי מרוץ, הוא מצב שבו מספר תהליכים או תהליכונים מנסים בו זמנית להשיג גישה למשאב משותף. כיוון שהגישה למשאב המשותף נעשית במסגרת קטע קריטי, המאפשר גישה רק למספר מוגבל של תהליכים או תהליכונים (ולרוב רק לאחד), במצב כזה מתקיימת תחרות בתנאי כל הקודם זוכה.

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

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

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

מרוץ תהליכים כפרצת אבטחה[עריכת קוד מקור | עריכה]

בתנאים מסוימים, מרוץ תהליכים עלול לגרום לבאג משמעותי אשר יחשוף את המכונה לפגיעות שפצחנים יוכלו לנצל. לדוגמה, באקטובר 2016, תוקנה פרצה המכונה Dirty COW (מסוגנן כ-dirtyc0w), אשר עלולה להוביל למצב של הסלמת הרשאות.[1][2] הפרצה נבעה מהאופן שבו הקרנל של לינוקס מבצע העתקה בזמן כתיבה (copy on write), כאשר קיימים מספר תהליכים הקוראים וכותבים במקביל את המצב של דף הזיכרון.

הערות שוליים[עריכת קוד מקור | עריכה]

  1. ^ הפרסום הראשוני, CVE-2016-5195, באתר Red Hat
  2. ^ פירוט מקיף אודות הפרצה