תהליך (מדעי המחשב)

תהליך (באנגלית: Process) במדעי המחשב, הוא מופע של תוכנית מחשב שמופעל על ידי מערכת מחשב שיש לה היכולת להפעיל מספר תהליכים בו זמנית.

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

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

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

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

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

קישורים חיצוניים

 הערות שוליים 

*