واسط دودویی کاربردی: تفاوت میان نسخه‌ها

از ویکی‌پدیا، دانشنامهٔ آزاد
محتوای حذف‌شده محتوای افزوده‌شده
بدون خلاصۀ ویرایش
برچسب‌ها: افزودن پیوند بیرونی به جای ویکی‌پیوند ویرایشگر دیداری: به ویرایشگر منبع تغییر داده شده
بدون خلاصۀ ویرایش
خط ۱۸: خط ۱۸:


== ABI های کامل ==
== ABI های کامل ==
یک ABI کامل، مثل [[:en:Intel_Binary_Compatibility_Standard|استاندارد سازگاری دودویی اینتل]] (iBCS) این امکان را فراهم می سازد تا یک برنامه از یک سیستم‌عامل که از آن ABI پشتیبانی می کند، بدون هیچ دستکاری روی هر سامانه دیگر مشابه (پشتیبانی کننده از ABI) اجرا گردد، برای این موضوع باید کتابخانه های مشترک لازم وجود داشته باشد، و پیش‌نیازهای مشابه برآورده گردد.
یک ABI کامل، مثل [[:en:Intel_Binary_Compatibility_Standard|استاندارد سازگاری دودویی اینتل]] (iBCS)<ref>[http://www.everything2.com/index.pl?node=iBCS Intel Binary Compatibility Standard (iBCS)]</ref> این امکان را فراهم می سازد تا یک برنامه از یک سیستم‌عامل که از آن ABI پشتیبانی می کند، بدون هیچ دستکاری روی هر سامانه دیگر مشابه (پشتیبانی کننده از ABI) اجرا گردد، برای این موضوع باید کتابخانه های مشترک لازم وجود داشته باشد، و پیش‌نیازهای مشابه برآورده گردد.


دیگر ABI ها جزییاتی مثل [[دستکاری نام|دستکاری نام C++]]، انتشار حالت [[رسیدگی به استثناء|استثنا]]، و قراداد تماس‌گیری بین کامپایلرها در یک بن‌سازه را استاندارد سازی می کند، اما نیازی به سازگاری بین بن‌سازه‌ایی ندارد.
دیگر ABI ها جزییاتی مثل [[دستکاری نام|دستکاری نام C++]]،<ref>{{cite web|url=https://itanium-cxx-abi.github.io/cxx-abi/|title=Itanium C++ ABI}} (compatible with multiple architectures)</ref> انتشار حالت [[رسیدگی به استثناء|استثنا]]،<ref>{{cite web|url=http://itanium-cxx-abi.github.io/cxx-abi/abi-eh.html|title=Itanium C++ ABI: Exception Handling}} (compatible with multiple architectures)</ref> و قراداد تماس‌گیری بین کامپایلرها در یک بن‌سازه را استاندارد سازی می کند، اما نیازی به سازگاری بین بن‌سازه‌ایی ندارد.


== ABI های توکار ==
== ABI های توکار ==
خط ۲۷: خط ۲۷:
[[کامپایلر|کامپایلرهایی]] که از EABI پشتیبانی می کنند، [[آبجکت کد|آبجکت کدی]] می سازند که با کد تولید شده دیگر کامپایلرهای مشابه سازگار است، این موضوع به توسعه‌دهنده ها امکان پیوند کتابخانه‌های ساخته شده با یک کامپایلر را با آبجکت کد تولید شده با یک کامپایلر دیگر می دهد. توسعه‌دهندگانی که کد [[زبان اسمبلی]] خودشان را می نویسند هم ممکن است بخواهند با کد اسمبلی تولید شده با کامپابلر سازگار، واسط سازی انجام دهند.
[[کامپایلر|کامپایلرهایی]] که از EABI پشتیبانی می کنند، [[آبجکت کد|آبجکت کدی]] می سازند که با کد تولید شده دیگر کامپایلرهای مشابه سازگار است، این موضوع به توسعه‌دهنده ها امکان پیوند کتابخانه‌های ساخته شده با یک کامپایلر را با آبجکت کد تولید شده با یک کامپایلر دیگر می دهد. توسعه‌دهندگانی که کد [[زبان اسمبلی]] خودشان را می نویسند هم ممکن است بخواهند با کد اسمبلی تولید شده با کامپابلر سازگار، واسط سازی انجام دهند.


EABI ها برای بهینه سازی کارایی در داخل منابع محدود یک سامانه توکار طراحی شده اند. بنابراین، EABI ها، بیشتر انتزاع هایی که بین کد کاربر و هسته در سیستم‌عامل های پیچیده وجود دارد را حذف می کنند. برای مثال از [[پیونددهنده پویا|پیوند پویا]] جلوگیری می شود، تا اجرایی کوچکتری ایجاد شود، و بازگذاری سریعتر شود، همچنین استفاده از ثبات های ثابت، به ما امکان ایجاد پشته ها و تماس هسته ای فشرده تر را می دهد، و اجرای برنامه کاربردی در حالت مجوزدهی شده، امکان دسترسی مستقیم به عملیات های سخت افزاری سفارشی بدون تغییر مسیر بواسطه تماس به یک درایور دستگاه را می دهد. انتخاب EABI می تواند روی کارایی تاثیر بگذارد.
EABI ها برای بهینه سازی کارایی در داخل منابع محدود یک سامانه توکار طراحی شده اند. بنابراین، EABI ها، بیشتر انتزاع هایی که بین کد کاربر و هسته در سیستم‌عامل های پیچیده وجود دارد را حذف می کنند. برای مثال از [[پیونددهنده پویا|پیوند پویا]] جلوگیری می شود، تا اجرایی کوچکتری ایجاد شود، و بازگذاری سریعتر شود، همچنین استفاده از ثبات های ثابت، به ما امکان ایجاد پشته ها و تماس هسته ای فشرده تر را می دهد، و اجرای برنامه کاربردی در حالت مجوزدهی شده، امکان دسترسی مستقیم به عملیات های سخت افزاری سفارشی بدون تغییر مسیر بواسطه تماس به یک درایور دستگاه را می دهد.<ref name="ppc-eabi">{{cite book
| title = PowerPC Embedded Application Binary Interface: 32-Bit Implementation
| date = 1 October 1995
| edition = Version 1.0
| chapter = EABI Summary
| pages = 28&ndash;30
| publisher = Freescale Semiconductor, Inc
| url = http://www.nxp.com/files/32bit/doc/app_note/PPCEABI.pdf
}}</ref> انتخاب EABI می تواند روی کارایی تاثیر بگذارد.<ref>{{cite web
|title=Debian ARM accelerates via EABI port
|date=16 October 2016
|publisher=Linuxdevices.com
|url=http://linuxdevices.com/news/NS9048137234.html
|access-date=11 October 2007
|archive-url=https://web.archive.org/web/20070121183413/http://www.linuxdevices.com/news/NS9048137234.html
|archive-date=21 January 2007
|url-status=dead
}}</ref><ref>{{cite web
|author=Andrés Calderón and Nelson Castillo
|title=Why ARM's EABI matters
|date=14 March 2007
|publisher=Linuxdevices.com
|url=http://linuxdevices.com/articles/AT5920399313.html
|access-date=11 October 2007
|archive-url=https://web.archive.org/web/20070331193917/http://www.linuxdevices.com/articles/AT5920399313.html
|archive-date=31 March 2007
|url-status=dead
}}</ref>


EABI هایی که امروزه زیاد استفاده می شوند شامل: [[پاورپی‌سی|PowerPC]]، [[معماری آرم|Arm]] EABI و [[معماری میپس|MIPS]] EABI هستند. پیاده سازی های نرم افزاری خاص مثب کتابخانه C ممکن است محدودیت های اضافی را تحمیل کند، و این موجب ایجاد یک ABI واقعی تر (با غیرانتزاعی تر) می شود؛ یک مثل GNU OABI و EABI برای ARM است که هردو آن‌ها زیرمجموعه ARM EABI هستند.
EABI هایی که امروزه زیاد استفاده می شوند شامل: [[پاورپی‌سی|PowerPC]]،<ref name="ppc-eabi"/> [[معماری آرم|Arm]] EABI<ref>{{cite web|url=https://developer.arm.com/architectures/system-architectures/software-standards/abi |title=ABI for the Arm Architecture |publisher=Developer.arm.com |access-date=4 February 2020}}</ref> و [[معماری میپس|MIPS]] EABI هستند.<ref>{{cite mailing list |url=https://sourceware.org/legacy-ml/binutils/2003-06/msg00436.html |author=Eric Christopher |title=mips eabi documentation |mailing-list=binutils@sources.redhat.com |date=11 June 2003 |access-date=19 June 2020}}</ref> پیاده سازی های نرم افزاری خاص مثب کتابخانه C ممکن است محدودیت های اضافی را تحمیل کند، و این موجب ایجاد یک ABI واقعی تر (با غیرانتزاعی تر) می شود؛ یک مثل GNU OABI و EABI برای ARM است که هردو آن‌ها زیرمجموعه ARM EABI هستند.<ref>{{cite web |title=ArmEabiPort |url=https://wiki.debian.org/ArmEabiPort |website=Debian Wiki |quote=Strictly speaking, both the old and new ARM ABIs are subsets of the ARM EABI specification, but in everyday usage the term "EABI" is used to mean the new one described here and "OABI" or "old-ABI" to mean the old one.}}</ref>


== پانویس ==
== پانویس ==

نسخهٔ ‏۲۸ ژانویهٔ ۲۰۲۱، ساعت ۱۵:۲۲

یک میانای دودویی کاربردی یا واسط دودویی کاربردی (به انگلیسی: application binary interface) در علوم رایانه، با کوته‌نوشت ABI یک واسط است که بین دو «پودمان برنامه دودویی» وجود دارد. معمولا یکی از این پودمان ها یک کتابخانه یا وسیله سیستم‌عامل است، و دیگری یک برنامه است که توسط یک کاربر در حال اجرا است.

یک ABI در واقع دارد نحوه دسترسی به ساختمان داده یا رویه محاسباتی را در کد ماشین تعریف می کند، که این کد ماشین یک قالب سطح پایین و وابسته به سخت افزار است. در مقابل این دیدگاه، مفهوم API است که این دسترسی را در کد منبع تعریف می کند، که کد منبع یک قالب نسبتا سطح بالا، مستقل از سخت‌افزار، و معمولا انسان-خواندنی است. یک بخش معمول از یک ABI تعریف قرارداد تماس‌گرفتن است، که تعیین می کند که چگونه داده به عنوان ورودی ارائه گردد، یا به عنوان خروجی، از رویه های محاسباتی خوانده شود. قراردادهای تماس‌گیری x86 مثال‌هایی در این زمینه اند.

یک مفهوم پیوسته با ABI (که می تواند استانداردسازی شود یا نشود)، کارهای نویسنده یک کامپایلر، سیستم‌عامل، یا کتابخانه است. با این حال، یک برنامه‌نویس کاربردی موقعی که «یک برنامه را به صورت مخلوطی از چند زبان برنامه‌نویسی می نویسد» یا حتی موقعی که «یک برنامه نوشته شده به یک زبان را با چند کامپالر متفات کامپایل می کند» با ABI ها سروکار دارد.

توصیف

ABI ها شامل این جزییات هستند:

  • مجموعه دستورالعمل یک پردازنده (با جزییاتی مثل ساختار فایل ثبات، سازمان پشته، انواع دسترسی به حافظه و غیره).
  • اندازه، چیدمان‌ها، و ترازهای انواع داده اصلی که پردازه می تواند به آنها به صورت مستقیم دسترسی یابد.
  • قرارداد تماس، که نحوه ارسال آرگومان های تابع، و بازیابی مقادیر بازگشتی را کنترل می کند. مثلا این موارد را کنترل می کند:
    • آیا همه پارامترها باید روی پشته قرار گیرند یا بعضی از آن‌ها در ثبات قرار گیرند
    • کدام ثبات برای کدان عملکرد تابعی استفاده شود؛
    • آیا اولین پارامتر تابعی قرارگرفته روی پشته، اول یا آخر روی پشته نشانده شده است.
  • یک برنامه‌کاربردی چگونه باید با سیستم‌عامل تماس سامانه‌ای بگیرد، و اگر ABI تماس‌های سامانه‌ای مستقیم را به جای تماس‌های رویه‌ای به ته‌رسیدهای تماس سامانه‌ای تعیین نموده است، باید اعداد تماس سامانه‌ای تعیین شود.
  • و در حالتی که با یک ABI سیستم‌عاملی کامل سروکار داریم، قالب دودویی آبجکت فایل، کتابخانه برنامه، و غیره.

ABI های کامل

یک ABI کامل، مثل استاندارد سازگاری دودویی اینتل (iBCS)[۱] این امکان را فراهم می سازد تا یک برنامه از یک سیستم‌عامل که از آن ABI پشتیبانی می کند، بدون هیچ دستکاری روی هر سامانه دیگر مشابه (پشتیبانی کننده از ABI) اجرا گردد، برای این موضوع باید کتابخانه های مشترک لازم وجود داشته باشد، و پیش‌نیازهای مشابه برآورده گردد.

دیگر ABI ها جزییاتی مثل دستکاری نام C++،[۲] انتشار حالت استثنا،[۳] و قراداد تماس‌گیری بین کامپایلرها در یک بن‌سازه را استاندارد سازی می کند، اما نیازی به سازگاری بین بن‌سازه‌ایی ندارد.

ABI های توکار

یک واسط دودویی کاربردی توکار (به انگلیسی: embedded-application binary interface) با کوته‌نوشت EABI قراردادهای استانداردی برای قالب پرونده، انواع داده، استفاده از ثبات، سازماندهی فریم پشته، و قراردادن پارامتر تابعی یک برنامه نرم‌افزاری توکار، برای استفاده با یک سیستم‌عامل توکار را تعیین می کند.

کامپایلرهایی که از EABI پشتیبانی می کنند، آبجکت کدی می سازند که با کد تولید شده دیگر کامپایلرهای مشابه سازگار است، این موضوع به توسعه‌دهنده ها امکان پیوند کتابخانه‌های ساخته شده با یک کامپایلر را با آبجکت کد تولید شده با یک کامپایلر دیگر می دهد. توسعه‌دهندگانی که کد زبان اسمبلی خودشان را می نویسند هم ممکن است بخواهند با کد اسمبلی تولید شده با کامپابلر سازگار، واسط سازی انجام دهند.

EABI ها برای بهینه سازی کارایی در داخل منابع محدود یک سامانه توکار طراحی شده اند. بنابراین، EABI ها، بیشتر انتزاع هایی که بین کد کاربر و هسته در سیستم‌عامل های پیچیده وجود دارد را حذف می کنند. برای مثال از پیوند پویا جلوگیری می شود، تا اجرایی کوچکتری ایجاد شود، و بازگذاری سریعتر شود، همچنین استفاده از ثبات های ثابت، به ما امکان ایجاد پشته ها و تماس هسته ای فشرده تر را می دهد، و اجرای برنامه کاربردی در حالت مجوزدهی شده، امکان دسترسی مستقیم به عملیات های سخت افزاری سفارشی بدون تغییر مسیر بواسطه تماس به یک درایور دستگاه را می دهد.[۴] انتخاب EABI می تواند روی کارایی تاثیر بگذارد.[۵][۶]

EABI هایی که امروزه زیاد استفاده می شوند شامل: PowerPC،[۴] Arm EABI[۷] و MIPS EABI هستند.[۸] پیاده سازی های نرم افزاری خاص مثب کتابخانه C ممکن است محدودیت های اضافی را تحمیل کند، و این موجب ایجاد یک ABI واقعی تر (با غیرانتزاعی تر) می شود؛ یک مثل GNU OABI و EABI برای ARM است که هردو آن‌ها زیرمجموعه ARM EABI هستند.[۹]

پانویس

  1. Intel Binary Compatibility Standard (iBCS)
  2. "Itanium C++ ABI". (compatible with multiple architectures)
  3. "Itanium C++ ABI: Exception Handling". (compatible with multiple architectures)
  4. ۴٫۰ ۴٫۱ "EABI Summary". PowerPC Embedded Application Binary Interface: 32-Bit Implementation (PDF) (Version 1.0 ed.). Freescale Semiconductor, Inc. 1 October 1995. pp. 28–30.
  5. "Debian ARM accelerates via EABI port". Linuxdevices.com. 16 October 2016. Archived from the original on 21 January 2007. Retrieved 11 October 2007.
  6. Andrés Calderón and Nelson Castillo (14 March 2007). "Why ARM's EABI matters". Linuxdevices.com. Archived from the original on 31 March 2007. Retrieved 11 October 2007.
  7. "ABI for the Arm Architecture". Developer.arm.com. Retrieved 4 February 2020.
  8. Eric Christopher (11 June 2003). "mips eabi documentation". https://sourceware.org/legacy-ml/binutils/2003-06/msg00436.html.
  9. "ArmEabiPort". Debian Wiki. Strictly speaking, both the old and new ARM ABIs are subsets of the ARM EABI specification, but in everyday usage the term "EABI" is used to mean the new one described here and "OABI" or "old-ABI" to mean the old one.

منابع