واجهة التطبيق الثنائية

مقارنة عالية المستوى بين واجهات برمجة التطبيقات (APIs) وواجهات برمجة التطبيقات الثنائية (ABIs) داخل النواة وبين النواة ومساحة المستخدم
تُعرّف نواة لينكس ومكتبة GNU C واجهة برمجة تطبيقات لينكس (API) . بعد التجميع، توفر الملفات الثنائية واجهة ثنائية التطبيق (ABI). يُعد الحفاظ على استقرار هذه الواجهة الثنائية على المدى الطويل أمرًا بالغ الأهمية لمطوري البرامج المستقلين (ISVs) .

واجهة التطبيق الثنائية ( ABI ) هي واجهة يوفرها البرنامج ، وهي مُعرَّفة للوصول إلى كود الآلة داخل العملية . غالبًا ما يكون البرنامج المُعرِّض مكتبة ، والمُستخدِم برنامجًا .

تُعتبر واجهة التطبيق الثنائية (ABI) ذات مستوى تجريد منخفض نسبيًا. وتعتمد توافقية الواجهة على الجهاز المستهدف ومجموعة أدوات بناء البرمجيات . في المقابل، تُحدد واجهة برمجة التطبيقات (API) الوصول في شفرة المصدر ، وهي صيغة عالية المستوى نسبيًا، مستقلة عن الأجهزة، وسهلة القراءة . تُحدد واجهة برمجة التطبيقات واجهةً على مستوى شفرة المصدر، قبل الترجمة، بينما تُحدد واجهة التطبيق الثنائية واجهةً للشفرة المُترجمة.

تُعدّ توافقية واجهة برمجة التطبيقات (API) عادةً من أهمّ الاعتبارات في تصميم النظام ومجموعة الأدوات. مع ذلك، قد يضطر المبرمج إلى التعامل مع واجهة التطبيق الثنائية (ABI) مباشرةً عند كتابة برنامج بلغات متعددة أو عند استخدام مُجمِّعات متعددة للغة نفسها.

تُمكّن واجهة التطبيق الثنائية الكاملة (ABI) البرنامج الذي يدعمها من العمل دون تعديل على أنظمة تشغيل متعددة توفر هذه الواجهة. يجب أن يوفر النظام المستهدف جميع المكتبات المطلوبة (التي تُنفذ واجهة التطبيق الثنائية)، وقد تكون هناك متطلبات أخرى.

وصف

تشمل جوانب واجهة التطبيق الثنائية (ABI) ما يلي:

  • مجموعة تعليمات المعالج ، مع تفاصيل مثل بنية ملف التسجيل، وأنواع الوصول إلى الذاكرة ، وما إلى ذلك.
  • حجم وتخطيط ومحاذاة أنواع البيانات الأساسية التي يمكن للمعالج الوصول إليها مباشرة
  • اتفاقية الاستدعاء ، التي تتحكم في كيفية تمرير وسائط الدوال واسترجاع القيم المُعادة؛ على سبيل المثال، تتحكم في ما يلي:
    • كيفية تنظيم مكدس الاستدعاءات
    • سواء تم تمرير جميع المعاملات على مكدس الاستدعاءات، أو تم تمرير بعضها في السجلات
    • ما هي السجلات المستخدمة لكل معلمات وظيفية؟
    • ما هي السجلات التي يجب على المتلقي الاحتفاظ بها (استعادة قيمتها في حالة تغييرها)؟
    • ما إذا كان يتم دفع أول مُعامل دالة يتم تمريره على مكدس الاستدعاءات أولاً أم أخيراً
    • سواء كان المتصل أو المستدعى مسؤولاً عن تنظيف مكدس الاستدعاءات بعد استدعاء الدالة
  • تشويه الأسماء [ 1 ]
  • انتشار الاستثناء [ 2 ]
  • كيف ينبغي للتطبيق إجراء استدعاءات النظام إلى نظام التشغيل، وما إذا كانت واجهة التطبيق الثنائية (ABI) تحدد استدعاءات النظام المباشرة بدلاً من استدعاءات الإجراءات إلى أجزاء استدعاء النظام ، وأرقام استدعاءات النظام
  • في حالة نظام تشغيل كامل ABI، يكون التنسيق الثنائي لملفات الكائنات ومكتبات البرامج وما إلى ذلك.

تتضمن واجهات التطبيقات الثنائية معيار التوافق الثنائي من إنتل (iBCS) [ 3 ] وواجهات التطبيقات الثنائية System V الإصدار 4 لمجموعات التعليمات المختلفة.

واجهة برمجة التطبيقات المدمجة

يحدد ABI المضمن ( EABI )، المستخدم في نظام التشغيل المضمن ، جوانب مثل تنسيقات الملفات وأنواع البيانات واستخدام السجلات وتنظيم إطار المكدس وتمرير معلمات الوظائف لبرنامج برمجي مضمن .

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

عادةً ما يتم تحسين واجهة التطبيق الثنائية المُحسّنة (EABI) لتحقيق الأداء الأمثل في ظل الموارد المحدودة للنظام المُدمج المُستهدف. ولذلك، قد تتجاهل واجهة EABI التجريدات بين نواة النظام ومساحة المستخدم الموجودة عادةً في أنظمة تشغيل سطح المكتب . على سبيل المثال، قد يتم تجنب الربط الديناميكي للسماح بملفات تنفيذية أصغر حجمًا وتحميل أسرع، كما أن استخدام السجلات الثابتة يسمح بمكدسات واستدعاءات نواة أكثر إحكامًا، وتشغيل التطبيق في وضع مميز يسمح بالوصول المباشر إلى عمليات الأجهزة المُخصصة دون الحاجة إلى استدعاء برنامج تشغيل الجهاز. [ 4 ] يُمكن أن يؤثر اختيار واجهة EABI على الأداء. [ 5 ] [ 6 ]

تشمل واجهات التطبيقات الثنائية المُحسّنة (EABIs) واسعة الاستخدام واجهات PowerPC [ 4 ] و Arm [ 7 ] و MIPS [ 8 ] . قد تفرض تطبيقات برمجية محددة ، مثل مكتبة C، قيودًا إضافية لتشكيل واجهات تطبيقات ثنائية أكثر تحديدًا؛ ومن الأمثلة على ذلك واجهة GNU OABI وEABI لمعالجات ARM، وكلاهما عبارة عن مجموعات فرعية من واجهة ARM EABI [ 9 ] .

انظر أيضاً

مراجع

  1. "Itanium C++ ABI" .(متوافق مع بنى معمارية متعددة)
  2. "Itanium C++ ABI: معالجة الاستثناءات" .(متوافق مع بنى معمارية متعددة)
  3. "معيار التوافق الثنائي من إنتل (iBCS)" .
  4. 1 2 "ملخص واجهة التطبيقات الثنائية المضمنة (EABI)". واجهة التطبيقات الثنائية المضمنة لمعالجات PowerPC: تطبيق 32 بت (ملف PDF) (الإصدار 1.0 ). شركة فري سكيل لأشباه الموصلات، 1 أكتوبر 1995، الصفحات 28-30 .  
  5. "تسريع دبيان ARM عبر منفذ EABI" . Linuxdevices.com. ١٦ أكتوبر ٢٠١٦. مؤرشف من الأصل في ٢١ يناير ٢٠٠٧. تم الاطلاع عليه في ١١ أكتوبر ٢٠٠٧ .
  6. أندريس كالديرون ونيلسون كاستيلو (14 مارس 2007). "لماذا يُعدّ EABI من ARM مهمًا؟" . Linuxdevices.com. مؤرشف من الأصل في 31 مارس 2007. تم الاطلاع عليه في 11 أكتوبر 2007 .
  7. "واجهة التطبيق الثنائية لهندسة Arm" . Developer.arm.com . تم الاطلاع عليه بتاريخ 4 فبراير 2020 .
  8. إريك كريستوفر (11 يونيو 2003). "توثيق MIPS EABI" . binutils@sources.redhat.com (قائمة بريدية) . تم الاطلاع عليه في 19 يونيو 2020 .
  9. "ArmEabiPort" . ويكي دبيان . من الناحية الدقيقة، فإن كلاً من واجهات التطبيقات الثنائية القديمة والجديدة لمعمارية ARM هي مجموعات فرعية من مواصفات ARM EABI، ولكن في الاستخدام اليومي، يُستخدم مصطلح "EABI" للإشارة إلى الجديد الموصوف هنا، و"OABI" أو "old-ABI" للإشارة إلى القديم.