מה בעצם ההבדל בין תהליך לתהליכון ?

ilanor05

New member
מה בעצם ההבדל בין תהליך לתהליכון ?

ומה ההבדל הישומי בינהם ביוניקס ובויינדוס?
 

vinney

Well-known member
address space

לתהליכונים יש מרחב כתובות משותף, לתהליכים נפרד. יש גם הבדלים בתיזמונים - תהליכונים יכולים להיות מתוזמנים על ידי תהליך האב עצמו, תהליכים - על ידי המערכת. בחלונות אין כזה דבר fork, לכן אפשר להגיד שקיימים רק תהליכונים מבחינת המתכנת (אפשר ליצור תהליך על ידי exec אבל לא לפצל תהליך רץ לשניים).
 

hatulflezet

New member
ואם אני לא טועה

בלינוקס זה הפוך - הכל זה processes - אין threads מבחינת המערכת. למשל - כל thread יופיע כמופע נוסף של התוכנית שמריצה אותו ב-TOP.
 

DadleFish

New member
בקרנל 2.6

יש כבר תמיכה מסודרת ב-NPTL ו-thread-ים הם אובייקטים בקרנל.
 

DadleFish

New member
בקרנל 2.6

יש כבר תמיכה מסודרת ב-NPTL ו-thread-ים הם אובייקטים בקרנל.
 

vinney

Well-known member
נשמע לא טוב

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

DadleFish

New member
מזתומרת "ב-UNIX"?

באיזה UNIX בדיוק? באיזה סביבות? יש מה שנקרא PTHREADS, או Posix Threads. עד לגרסה 2.6 של הקרנל בלינוקס, מדובר היה בספריה חיצונית לקרנל שממשה thread-ים מחוץ לקרנל. ב-2.6 יש מה שקרוי NPTL, או Native Pthreads Library, שמכניס למעשה את ה-thread-ים לתוך הקרנל.
 

vinney

Well-known member
בדיוק לזה התכוונתי

שמעתי משהו כזה על LINUX, נראה לי שעניין הTHREADS זה הדבר האחרון בPOSIX שלינוקס הייתה צריכה להשלים. UNIX זה כל מערכת הפעלה שעומדת בכל תקני הPOSIX לעניין. MAC לצורך העניין היא UNIX. כנראה שגם LONGHORN תהיה. חוץ מהUNIX המקורי שזה סימן מסחרי של (לא זוכר מה זה עכשיו, אבל AT&T במקור). זה כמו PC, ככה קוראים לכל תואמי PC.
 

DadleFish

New member
fork בגדול

לוקחת את כל הזכרון של ה-process הנוכחי, כולל מיקום ההרצה בקוד, ויוצרת תהליך חדש עם אותו זכרון. שני ה-process-ים השונים ימשיכו מנקודת היציאה מה-fork כאשר מה שמבדיל ביניהם זה הערך המוחזר מ-fork. ב-process הראשון שקרא ל-fork, הערך המוחזר יהיה ה-process ID של ה-process השני; וב-process השני יתקבל ערך מוחזר מיוחד (נדמה לי ש-0) שיציין שזה ה-process השני; ומאותה נקודה ימשיך כל תהליך בעבודתו. במערכות מתקדמות (כולל לינוקס) ממומש גם virtual fork שלא מעתיק את כל הזכרון אלא כשבאמת צריך (כלומר, כשהזכרון של ה-process משתנה). זה יכול לחסוך הרבה זמן בזמן ה-fork, שזו פעולה כבדה ותובענית מהמערכת.
 

vinney

Well-known member
נכון, ועוד

זה אכן 0, וב vfork משתמשים בדרך כלל בשביל הרצת תוכניות: תהליך הבן קורא ל exec אחרי הvfork ועם חזרה מ exec מת. ככה לא צריך לשכפל את כל הaddress space כל פעם שמריצים תוכנית שממילא יוצרת תהליך משלה. אם אנני טועה זאת הייתה הסיבה שהמציאו את vfork, למרות שאפשר לחשוב על עוד הרבה שימושים לה.
 

scalla

New member
רגע אני לא בטוח שהבנתי

האם זה מעין DLL שנטען לזיכרון?? כנגד מה זה שקול בחלונות או מק OS ??
 

vinney

Well-known member
לא, לא בדיוק

גם DLL מועלה בצורה כזאת, כי זה בסך הכל סוג של תוכנית מדובר במה שנקרא "שירותי מערכת" (system calls) של מערכת ההפעלה. שם EXEC הוא כללי, לא בהכרח זהה לשם הAPI במערכת ההפעלה, ומה שEXEC עושה הוא מעלה תוכנית חיצונית ומריץ אותה. בC יש כמה פונקציות שמבצעות EXEC, בינהם יש את system שעושה (בUNIX) את vfork ואז מריצה את SHELL ברירת מחדל ומעבירה לו את הפרמטר שקיבלה.
 

DadleFish

New member
לא, זה לא קשור ל-DLL

אין משהו שקול לזה ב-WINDOWS. אני לא יודע לגבי MAC אבל ייתכן שיש שם FORK. בקצרה - שוב - FORK יוצר תהליך חדש שתמונת הזכרון שלו זהה לתמונת הזכרון של ה-process הנוכחי, אבל זה process נפרד למעשה, כך שהם ממשיכים מאותו רגע לרוץ במערכת במקביל.
 
למעלה