الفرق بين الشوكة () و vfork ()

مؤلف: Laura McKinney
تاريخ الخلق: 2 أبريل 2021
تاريخ التحديث: 1 قد 2024
Anonim
الفرق بين الشوكة () و vfork () - تقنية
الفرق بين الشوكة () و vfork () - تقنية

المحتوى


على حد سواء فرع() و vfork () هي مكالمات النظام الذي ينشئ عملية جديدة مماثلة للعملية التي استدعت fork () أو vfork (). عن طريق فرع() يسمح بتنفيذ عملية الوالدين والطفل في وقت واحد. الطريق الاخر، vfork () يعلق تنفيذ العملية الأصل حتى تكمل العملية الفرعية تنفيذها. الفرق الأساسي بين استدعاء نظام fork () و vfork () هو أن العملية التابعة التي تم إنشاؤها باستخدام fork لها مساحة عنوان منفصلة مثل تلك الخاصة بالعملية الأصل. من ناحية أخرى ، يتعين على العملية الفرعية التي تم إنشاؤها باستخدام vfork مشاركة مساحة العنوان الخاصة بعملية الأصل.

دعونا نجد بعض الاختلافات بين fork () و vfork () بمساعدة مخطط المقارنة الموضح أدناه.

  1. رسم بياني للمقارنة
  2. تعريف
  3. الاختلافات الرئيسية
  4. خاتمة

رسم بياني للمقارنة

أساس للمقارنةفرع()vfork ()
الأساسيتحتوي العملية الفرعية وعملية الأصل على مساحات عنوان منفصلة.تشترك العملية الفرعية والعملية الأصل في مساحة العنوان نفسها.
إعدامتنفيذ الوالدين والطفل في وقت واحد.تظل العملية الأم معلقة حتى تكمل العملية الفرعية تنفيذها.
تعديلإذا غيرت العملية الفرعية أي صفحة في مساحة العنوان ، تكون غير مرئية للعملية الأصل لأن مساحة العنوان منفصلة.إذا قامت العملية الفرعية بتبديل أي صفحة في مساحة العنوان ، تكون مرئية للعملية الأصلية لأنها تشترك في نفس مساحة العنوان.
نسخ عند الكتابةيستخدم fork () النسخ عند الكتابة كبديل حيث يشارك الوالد والطفل نفس الصفحات حتى يعدل أي منهما الصفحة المشتركة.vfork () لا يستخدم النسخ على الكتابة.


تعريف الشوكة ()

ال فرع() هو استخدام استدعاء النظام لإنشاء عملية جديدة. العملية الجديدة التي تم إنشاؤها بواسطة استدعاء fork () هي العملية التابعة ، للعملية التي استدعت استدعاء نظام fork (). رمز العملية التابعة مطابق لرمز العملية الأصل. بعد إنشاء العملية الفرعية ، تبدأ كلتا العمليتين ، مثل العملية الأصل والتابعة ، في التنفيذ من البيان التالي بعد الشوكة () ويتم تنفيذ كلتا العمليتين الوقت ذاته.

عملية الأصل وعملية تابعة لها مساحة العنوان منفصلة. وبالتالي ، عندما تقوم أي من العمليات بتعديل أي عبارة أو متغير في التعليمات البرمجية. لن ينعكس في رموز العملية الأخرى. دعنا نفترض إذا قامت العملية التابعة بتعديل الكود ، فلن يؤثر ذلك على العملية الأم.

بعض عملية الطفل بعد إنشائها يدعو على الفور إكسيك (). استدعاء النظام exec () يستبدل العملية مع البرنامج المحدد في المعلمة الخاصة به. إذن مساحة العنوان المنفصلة للعملية الفرعية غير مجدية. البديل الوحيد هنا هو النسخ على الكتابة.


ال نسخ عند الكتابة اسمح للوالدين والطفل بمشاركة نفس مساحة العنوان. إذا كتبت أي من العمليات على الصفحات في مساحة العنوان ، يتم إنشاء نسخة من مساحة العنوان للسماح لكلا العملية بالعمل بشكل مستقل.

تعريف vfork ()

الإصدار المعدل من fork () هو vfork (). ال vfork () يستخدم نظام الدعوة أيضا لإنشاء عملية جديدة. على غرار الشوكة () ، هنا أيضًا العملية الجديدة التي تم إنشاؤها هي العملية الفرعية ، العملية التي تم استدعاء vfork (). رمز العملية الفرعية مطابق أيضًا لرمز العملية الأصل. هنا ، عملية الطفل يعلق التنفيذ العملية الأصل حتى تكمل تنفيذها حيث أن كلا العملية تشترك في نفس مساحة العنوان المراد استخدامها.

كما يشارك الطفل والأم العملية نفس مساحة العنوان. إذا كانت أي من العمليات تعدل الشفرة ، تكون مرئية للعملية الأخرى التي تشارك نفس الصفحات. دعونا نفترض ما إذا كانت العملية الأصل تغير الكود ؛ وسوف تنعكس في رمز عملية الطفل.

باستخدام vfork () لا يخلق مساحات عنوان منفصلة للعمليات التابعة والوالدية. وبالتالي ، يجب أن يكون نفذت حيث تدعو عملية الطفل إكسيك () مباشرة بعد إنشائها. لذلك ، لن يكون هناك هدر لمساحة العنوان ، وهذا هو فعالة طريقة لخلق عملية. لا يستخدم vfork نسخ عند الكتابة.

  1. الفرق الأساسي بين الشوكة و vfork هو أن العملية الفرعية التي أنشأتها فرع لديه مساحة ذاكرة منفصلة من العملية الأم. ومع ذلك ، فإن العملية التابعة التي أنشأتها vfork مشاركة استدعاء النظام نفس مساحة العنوان من العملية الأم.
  2. العملية الفرعية التي تم إنشاؤها باستخدام شوكة تنفيذ في وقت واحد مع العملية الأم. من ناحية أخرى ، تم إنشاء عملية تابعة باستخدام vfork تعليق تنفيذ العملية الأصل حتى اكتمال تنفيذها.
  3. نظرًا لأن مساحة الذاكرة الخاصة بعملية الوالدين والطفل هي عبارة عن تعديل منفصل يتم بواسطة أي من العمليات لا يؤثر على صفحات الآخرين. ومع ذلك ، بما أن العملية الأصل والتابعة تشترك في تعديل عنوان الذاكرة نفسه الذي تقوم به أي عملية في مساحة العنوان.
  4. يستخدم fork () استدعاء النظام نسخ عند الكتابة كبديل ، والذي يتيح للطفل والوالد مشاركة نفس مساحة العنوان حتى يقوم أي منهما بتعديل الصفحات. من ناحية أخرى ، فإن vfork لا يستخدم النسخ على الكتابة.

خاتمة:

يجب تنفيذ استدعاء نظام vfork () عند استدعاء عملية تابعة exec () مباشرة بعد إنشائها باستخدام fork (). نظرًا لأن مساحة العنوان المنفصلة الخاصة بالعملية الأصل والوالدين لن تكون مفيدة هنا