موصى به, 2022

اختيار المحرر

الفرق بين fork () و vfork ()

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

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

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

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

تعريف شوكة ()

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

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

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

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

تعريف vfork ()

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

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

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

الاختلافات الأساسية بين fork () و vfork ()

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

استنتاج:

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

Top