الدرس 17: Pipes و FIFO — الـ IPC بين العمليات
الـ pipe هو آلية اتصال أحادية الاتجاه بين العمليات — ما تكتبه إحداها تقرأه الأخرى. كل shell pipeline (cmd1 | cmd2 | cmd3) مبني من pipes مجهولة الاسم. الـ FIFO (named pipe) يوسّع الفكرة لتشمل العمليات غير المترابطة. في NVIDIA، تمرّر خطوط أنابيب الاستدلال (inference) على GPU متعددة العمليات رموز العمل
الـ pipe يشبه أنبوب الماء: عملية واحدة تصبّ الماء (تكتب)، وأخرى تسحبه (تقرأ). يتدفق الماء في اتجاه واحد فقط، ولا يمكنك سحب إلا ما تم صبّه.
- pipe
- بافر IPC أحادي الاتجاه يديره النواة (kernel) — عملية تكتب إليه وأخرى تقرأ منه. يُنشأ بواسطة pipe(fds) الذي يعيد زوجًا من الـ FDs: fds[0]=قراءة، fds[1]=كتابة.
- FIFO (named pipe)
- pipe له اسم في نظام الملفات. يُنشأ بواسطة mkfifo(path, mode). يسمح للعمليات غير المترابطة (غير المرتبطة عبر fork) بالتواصل عبر مدخل في نظام الملفات.
- pipe مجهول الاسم
- pipe بلا اسم في نظام الملفات — لا يمكن استخدامه إلا بين عملية أب وأبنائها الناتجين عن fork (الذين ورثوا الـ FDs عبر fork). هذا هو الـ pipe الذي يشغّل shell pipelines.
- named pipe
- اسم آخر لـ FIFO — pipe يمكن فتحه بالاسم مثل ملف عادي. تتدفق البيانات عبر النواة (kernel) ولا تُخزَّن على القرص، رغم وجود مدخل في الـ directory.
- half-close
- إغلاق طرف واحد فقط من زوج الـ FD الخاص بالـ pipe. عندما تُغلق كل أطراف الكتابة، تُعيد القراءة من طرف القراءة القيمة 0 (EOF). ضروري للاتصال الصحيح في fork+pipe.