عملية الطفل
العملية الفرعية في الحوسبة هي عملية يتم إنشاؤها بواسطة عملية أخرى ( العملية الأصلية ). وتتعلق هذه التقنية بأنظمة التشغيل متعددة المهام ، وتُسمى أحيانًا بالعملية الفرعية أو تقليديًا بالمهمة الفرعية .
هناك إجراءان رئيسيان لإنشاء عملية فرعية: استدعاء نظام fork (المفضل في الأنظمة الشبيهة بنظام Unix ومعيار POSIX ) و spawn (المفضل في نواة (NT) الحديثة لنظام التشغيل Microsoft Windows ، وكذلك في بعض أنظمة التشغيل التاريخية).
تاريخ
يعود تاريخ العمليات الفرعية إلى أواخر الستينيات، حيث ظهرت في شكل مبكر في المراجعات اللاحقة لنظام التشغيل IBM OS/360 ، وهو نظام متعدد البرامج بعدد ثابت من المهام الإصدار الثاني (MFT-II)، والذي قدم مفهوم المهام الفرعية (انظر المهمة ). يعتمد الشكل الحالي في نظام يونكس على نظام Multics (1969)، بينما يعتمد شكل ويندوز NT على نظام OpenVMS (1978)، من نظام RSX-11 (1972).
أطفال من صنع الشوكة
ترث العملية الفرعية معظم سماتها ، مثل مُعرّفات الملفات ، من العملية الأصلية. في أنظمة يونكس ، تُنشأ العملية الفرعية عادةً كنسخة من العملية الأصلية، باستخدام استدعاء النظام fork . ويمكن للعملية الفرعية بعد ذلك استبدال نفسها ببرنامج مختلف (باستخدام exec ) حسب الحاجة. [ 1 ]
قد تُنشئ كل عملية العديد من العمليات الفرعية، ولكن سيكون لها عملية أصلية واحدة على الأكثر؛ وإذا لم يكن للعملية عملية أصلية، فهذا يشير عادةً إلى أنها أُنشئت مباشرةً بواسطة النواة . في بعض الأنظمة، بما في ذلك الأنظمة المبنية على لينكس ، تبدأ النواة العملية الأولى (المسماة init ) عند بدء التشغيل ولا تنتهي أبدًا (انظر عملية بدء تشغيل لينكس )؛ وقد تُشغَّل عمليات أخرى بدون عملية أصلية لتنفيذ مهام مختلفة في مساحة المستخدم . هناك طريقة أخرى لبقاء العملية بدون عملية أصلية وهي توقف عمليتها الأصلية، تاركةً عملية يتيمة ؛ ولكن في هذه الحالة، ستتبناها init قريبًا .
تُرسل إشارة SIGCHLD إلى العملية الأب للعملية الابنة عند خروجها ، أو مقاطعتها، أو استئنافها بعد المقاطعة. ويتم تجاهل الإشارة افتراضيًا. [ 2 ]
الأطفال الذين تم إنشاؤهم بواسطة التكاثر
نهاية الحياة
عندما تنتهي عملية فرعية، يتم إرجاع بعض المعلومات إلى العملية الأصلية.
عندما تنتهي عملية فرعية قبل أن تستدعي العملية الأصلية دالة الانتظار (wait )، يحتفظ نظام التشغيل ببعض المعلومات حول العملية، مثل حالة خروجها ، لتمكين العملية الأصلية من استدعاء دالة الانتظار لاحقًا. [ 3 ] ولأن العملية الفرعية لا تزال تستهلك موارد النظام دون أن تُنفَّذ، تُعرف باسم العملية الزومبي (zoom-process ). ويتم استدعاء دالة الانتظار (wait ) عادةً في معالج إشارة SIGCHLD.
يسمح معيار POSIX.1-2001 للعملية الأصلية باختيار قيام النواة بإنهاء العمليات الفرعية تلقائيًا عن طريق تعيين خاصية تجاهل إشارة SIGCHLD إلى SIG_IGN (مع أن التجاهل هو الوضع الافتراضي، إلا أن الإنهاء التلقائي لا يحدث إلا إذا تم تعيين الخاصية إلى تجاهل صراحةً [ 4 ] )، أو عن طريق تعيين علامة SA_NOCLDWAIT لإشارة SIGCHLD. تلتزم نواة Linux 2.6 بهذا السلوك، ويدعم FreeBSD كلا الطريقتين منذ الإصدار 5.0. [ 5 ] ومع ذلك، ونظرًا للاختلافات التاريخية بين سلوكيات System V و BSD فيما يتعلق بتجاهل إشارة SIGCHLD، يظل استدعاء دالة wait هو النموذج الأكثر قابلية للتطبيق لتنظيف العمليات الفرعية المتفرعة. [ 6 ]
انظر أيضاً
مراجع
- ↑ تستند هذه المقالة إلى مواد مأخوذة من Child+process في قاموس الحوسبة المجاني على الإنترنت قبل 1 نوفمبر 2008 وتم دمجها بموجب شروط "إعادة الترخيص" الخاصة بـ GFDL ، الإصدار 1.3 أو أحدث.
- ↑ – مرجع تعريفات القواعد، مواصفات يونكس الموحدة ، الإصدار 5 من مجموعة Open Group
- ↑ : انتظر حتى يتغير حالة العملية – دليل مبرمج لينكس – استدعاءات النظام من Manned.org
- ↑ "نواة لينكس: الإشارات" . Win.tue.nl. تم الاطلاع عليه بتاريخ 30-04-2014 .
- ↑أُرشف بتاريخ 29 سبتمبر 2011 في أرشيف الإنترنت (Wayback Machine) .
- ↑ : فحص وتغيير إجراء الإشارة – دليل مبرمج لينكس – استدعاءات النظام من Manned.org
روابط خارجية
- عملية (حوسبة)
