عدم توافق البرامج

عدم توافق البرامج هو سمة من سمات مكونات أو أنظمة البرامج التي لا يمكنها العمل معًا بكفاءة على نفس الحاسوب ، أو على حواسيب مختلفة متصلة بشبكة حاسوب . قد تكون هذه المكونات أو الأنظمة مصممة للعمل بشكل تعاوني أو مستقل. أما توافق البرامج فهو سمة من سمات مكونات أو أنظمة البرامج التي يمكنها العمل معًا بكفاءة على نفس الحاسوب، أو على حواسيب مختلفة متصلة بشبكة حاسوب. من الممكن أن تكون بعض مكونات أو أنظمة البرامج متوافقة في بيئة ما وغير متوافقة في بيئة أخرى.

أمثلة

مأزق

ضع في اعتبارك البرامج التسلسلية من الشكل التالي:

طلب المورد أ طلب المورد ب نفّذ الإجراء باستخدام A وB إصدار المورد ب إصدار المورد أ

قد يستخدم برنامج معين طابعة (المورد أ) وملفًا ( المورد ب) من أجل طباعة الملف.

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

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

طلب المورد ب طلب المورد أ نفّذ الإجراء باستخدام A وB إصدار المورد أ إصدار المورد ب

الموارد A و B هي نفسها كما في المثال السابق - وليست مجرد متغيرات وهمية ، وإلا فإن البرامج متطابقة.

كما في السابق، إذا كان هناك العديد من هذه البرامج، Q1 وQ2 وQ3، التي تعمل في نفس الوقت باستخدام الموارد كما في السابق، فلن تكون هناك مشكلة.

مع ذلك، إذا تم ضبط عدة عمليات P للتشغيل في نفس الوقت مع عدة عمليات Q، فقد تنشأ حالة تعطل . تجدر الإشارة إلى أن التعطل ليس بالضرورة أن يحدث، ولكنه قد يحدث.

ب: طلب المورد أ س: طلب المورد ب س: طلب المورد أ (محظور من قبل ب) P: طلب المورد B (محظور بواسطة Q) ...

الآن لا يمكن لـ P ولا Q المضي قدماً 1 .

هذا مثال من نوع الأمثلة التي قد تُظهر فيها البرامج عدم التوافق.

عدم توافق الواجهة

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

لنأخذ المثال التالي:

يستدعي المكون P المكون Q بالمعاملين x و y. في هذا المثال، قد يكون y عددًا صحيحًا.
تقوم الدالة Q بإرجاع f(x) وهو المطلوب ولا يساوي الصفر أبدًا، وتتجاهل y.

يوجد نوع مختلف من Q، وهو Q ' ، وله سلوك مشابه، مع الاختلافات التالية:

إذا كانت قيمة y تساوي 100، فإن Q ' لا تنتهي.

إذا لم يستدعِ P الدالة Q مطلقًا مع ضبط قيمة y على 100، فإن استخدام Q ' بدلاً من ذلك يُعدّ عملية حسابية متوافقة . أما إذا استدعى P الدالة Q مع ضبط قيمة y على 100، فإن استخدام Q ' بدلاً من ذلك سيؤدي إلى عملية حسابية غير منتهية.

وإذا افترضنا كذلك أن f(x) لها قيمة عددية، فإن المكون Q '' يُعرَّف على النحو التالي:

يتصرف Q '' مثل Q باستثناء أن إذا كانت قيمة y تساوي 100، فإن Q '' لا تنتهي إذا كانت قيمة y تساوي 101، فإن Q '' تُرجع 0.9 * f(x) إذا كانت قيمة y تساوي 102، فإن Q '' تُرجع قيمة عشوائية إذا كانت قيمة y تساوي 103، فإن Q '' تُرجع 0.

قد يتسبب ذلك في سلوك غير متوقع. إذا استدعى البرنامج الآن الدالة Q '' بقيمة 101، فستكون نتائج الحساب غير صحيحة، ولكنها قد لا تؤدي إلى فشل البرنامج. أما إذا استدعى البرنامج الدالة Q '' بقيمة 102، فستكون النتائج غير متوقعة، وقد يحدث فشل ، ربما بسبب القسمة على صفر أو أخطاء أخرى مثل تجاوز سعة الحساب . وإذا استدعى البرنامج الدالة Q '' بقيمة 103، ففي حال استخدام البرنامج للنتيجة في عملية قسمة، فقد يحدث خطأ القسمة على صفر.

يوضح هذا المثال كيف يمكن أن يكون البرنامج P1 متوافقًا دائمًا مع برنامج آخر Q1، ولكن يمكن إنشاء برامج أخرى Q1' و Q1 ' بحيث يكون P1 و Q1' غير متوافقين في بعض الأحيان، ويكون P1 و Q1 ' غير متوافقين دائمًا.

عدم توافق الأداء

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

بالنسبة لبعض البرامج P و Q، قد يعتمد توافق أدائها على بيئة التشغيل. فقد تكون غير متوافقة بشكل كبير عند تشغيلها على جهاز كمبيوتر ذي ذاكرة رئيسية محدودة، بينما قد يكون من الممكن تشغيلها بكفاءة على جهاز ذي ذاكرة أكبر. وقد تكون بعض البرامج غير متوافقة في الأداء في جميع بيئات التشغيل تقريبًا.

انظر أيضاً

مراجع

  • سي إم كريشنا، كي جي شين، أنظمة الوقت الحقيقي، ماكجرو هيل، 1997