שיעור 17: Pipes ו-FIFO — IPC בין תהליכים
pipe הוא מנגנון תקשורת חד-כיווני בין תהליכים — מה שאחד כותב, השני קורא. כל pipeline של shell (cmd1 | cmd2 | cmd3) מוקם מ-pipes אנונימיים. FIFO (named pipe) מרחיב את הרעיון לתהליכים שלא קשורים בקשר fork. ב-NVIDIA, pipelines של multi-process GPU inference מעבירים work tokens בין stages דרך pipes.
pipe הוא כמו צינור מים: תהליך אחד שופך מים (כותב), תהליך שני שואב (קורא). המים זורמים רק בכיוון אחד ורק כמה שנשפך כבר שאפשר לשאוב.
- pipe
- מנגנון IPC חד-כיווני בגרעין — בافر קטן שתהליך כותב אליו ותהליך אחר קורא ממנו. נוצר עם pipe(fds) שמחזיר זוג FDs: fds[0]=קריאה, fds[1]=כתיבה.
- FIFO (named pipe)
- pipe עם שם בפסיסטמת הקבצים. נוצר עם mkfifo(path, mode). מאפשר לתהליכים שלא קשורים בקשר fork לתקשר דרך קובץ בfile system.
- pipe אנונימי
- pipe ללא שם בפסיסטמת הקבצים — יכול לשמש רק בין תהליך-הורה לצאצאיו (שירשו את ה-FDs דרך fork). זה ה-pipe של shell pipelines.
- pipe עם שם
- שם נוסף ל-FIFO — pipe שניתן לפתוח בשם כמו קובץ רגיל. הנתונים עוברים דרך גרעין ולא נשמרים בדיסק, גם אם יש שם בdirectory.
- half-close
- סגירת רק אחד מ-FDs של pipe. כאשר כל הקצוות הכותבים סגורים, קריאה מהקצה הקורא תחזיר 0 (EOF). חיוני לתקשורת תקינה ב-fork+pipe.