واسط دودویی کاربردی: تفاوت میان نسخهها
بدون خلاصۀ ویرایش |
اصلاح نویسههای عربی، اصلاح فاصلهٔ مجازی، اصلاح ارقام، اصلاح سجاوندی، اصلاح املا، ابرابزار |
||
خط ۱: | خط ۱: | ||
یک '''میانای<ref>{{یادکرد فرهنگستان | مصوب=واسط، میانا | بیگانه=interface | بیگانه در فارسی= | حوزه=رایانه و فنّاوری اطلاعات، مهندسی مخابرات | دفتر=نخست | بخش=فارسی | سرواژه=واسط1}}</ref> دودویی کاربردی''' یا '''واسط دودویی کاربردی''' {{به انگلیسی|application binary interface}} در [[علوم رایانه]]، با کوتهنوشت '''ABI''' یک [[واسط (رایانش)|واسط]] است که بین دو «پودمان برنامه دودویی» وجود دارد. |
یک '''میانای<ref>{{یادکرد فرهنگستان | مصوب=واسط، میانا | بیگانه=interface | بیگانه در فارسی= | حوزه=رایانه و فنّاوری اطلاعات، مهندسی مخابرات | دفتر=نخست | بخش=فارسی | سرواژه=واسط1}}</ref> دودویی کاربردی''' یا '''واسط دودویی کاربردی''' {{به انگلیسی|application binary interface}} در [[علوم رایانه]]، با کوتهنوشت '''ABI''' یک [[واسط (رایانش)|واسط]] است که بین دو «پودمان برنامه دودویی» وجود دارد. معمولاً یکی از این پودمانها یک [[کتابخانه (رایانش)|کتابخانه]] یا وسیله [[سیستمعامل]] است، و دیگری یک برنامه است که توسط یک کاربر در حال اجرا است. |
||
یک ABI در واقع دارد نحوه دسترسی به ساختمان داده یا رویه محاسباتی را در [[کد ماشین]] تعریف |
یک ABI در واقع دارد نحوه دسترسی به ساختمان داده یا رویه محاسباتی را در [[کد ماشین]] تعریف میکند، که این کد ماشین یک قالب سطح پایین و وابسته به سختافزار است. در مقابل این دیدگاه، مفهوم [[واسط برنامهنویسی کاربردی|API]] است که این دسترسی را در [[کد منبع]] تعریف میکند، که کد منبع یک قالب نسبتاً سطح بالا، مستقل از سختافزار، و معمولاً [[فرمت خواندنی برای انسان|انسان-خواندنی]] است. یک بخش معمول از یک ABI تعریف [[قرارداد تماسگرفتن]] است، که تعیین میکند که چگونه داده به عنوان ورودی ارائه گردد، یا به عنوان خروجی، از رویههای محاسباتی خوانده شود. [[قراردادهای فراخوانی اکس۸۶|قراردادهای تماسگیری x86]] مثالهایی در این زمینه اند. |
||
یک مفهوم پیوسته با ABI (که |
یک مفهوم پیوسته با ABI (که میتواند استانداردسازی شود یا نشود)، کارهای نویسنده یک [[کامپایلر]]، سیستمعامل، یا کتابخانه است. با این حال، یک برنامهنویس کاربردی موقعی که «یک برنامه را به صورت مخلوطی از چند زبان برنامهنویسی مینویسد» یا حتی موقعی که «یک برنامه نوشته شده به یک زبان را با چند کامپالر متفات کامپایل میکند» با ABIها سروکار دارد. |
||
== توصیف == |
== توصیف == |
||
ABIها شامل این جزییات هستند: |
|||
* مجموعه دستورالعمل یک پردازنده (با جزییاتی مثل ساختار فایل ثبات، سازمان پشته، انواع دسترسی به حافظه و غیره). |
* مجموعه دستورالعمل یک پردازنده (با جزییاتی مثل ساختار فایل ثبات، سازمان پشته، انواع دسترسی به حافظه و غیره). |
||
* اندازه، چیدمانها، و [[تراز ساختمان داده|ترازهای]] [[نوع داده|انواع داده]] اصلی که پردازه |
* اندازه، چیدمانها، و [[تراز ساختمان داده|ترازهای]] [[نوع داده|انواع داده]] اصلی که پردازه میتواند به آنها به صورت مستقیم دسترسی یابد. |
||
* [[قرارداد تماسگرفتن|قرارداد تماس]]، که نحوه ارسال |
* [[قرارداد تماسگرفتن|قرارداد تماس]]، که نحوه ارسال آرگومانهای [[رویه (علوم رایانه)|تابع]]، و بازیابی مقادیر بازگشتی را کنترل میکند. مثلاً این موارد را کنترل میکند: |
||
** آیا همه پارامترها باید روی پشته قرار گیرند یا بعضی از آنها در ثبات قرار گیرند |
** آیا همه پارامترها باید روی پشته قرار گیرند یا بعضی از آنها در ثبات قرار گیرند |
||
** کدام ثبات برای کدان عملکرد تابعی استفاده شود؛ |
** کدام ثبات برای کدان عملکرد تابعی استفاده شود؛ |
||
** آیا اولین پارامتر تابعی قرارگرفته روی پشته، اول یا آخر روی پشته نشانده |
** آیا اولین پارامتر تابعی قرارگرفته روی پشته، اول یا آخر روی پشته نشانده شدهاست. |
||
* یک برنامهکاربردی چگونه باید با سیستمعامل [[تماس با سامانه (رایانه)|تماس سامانهای]] بگیرد، و اگر ABI تماسهای سامانهای مستقیم را به جای تماسهای رویهای به [[شگرد تهرسید|تهرسیدهای]] تماس سامانهای تعیین |
* یک برنامهکاربردی چگونه باید با سیستمعامل [[تماس با سامانه (رایانه)|تماس سامانهای]] بگیرد، و اگر ABI تماسهای سامانهای مستقیم را به جای تماسهای رویهای به [[شگرد تهرسید|تهرسیدهای]] تماس سامانهای تعیین نمودهاست، باید اعداد تماس سامانهای تعیین شود. |
||
* و در حالتی که با یک ABI سیستمعاملی کامل سروکار داریم، قالب دودویی [[آبجکت فایل]]، کتابخانه برنامه، و غیره. |
* و در حالتی که با یک 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 کامل، مثل [[: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++]]،<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های توکار == |
||
یک واسط دودویی کاربردی توکار {{به انگلیسی|embedded-application binary interface}} با کوتهنوشت EABI قراردادهای استانداردی برای [[قالب پرونده]]، انواع داده، استفاده از ثبات، سازماندهی [[پشته تماس|فریم پشته]]، و قراردادن پارامتر تابعی یک برنامه نرمافزاری توکار، برای استفاده با یک [[:en:Embedded_operating_system|سیستمعامل توکار]] را تعیین |
یک واسط دودویی کاربردی توکار {{به انگلیسی|embedded-application binary interface}} با کوتهنوشت EABI قراردادهای استانداردی برای [[قالب پرونده]]، انواع داده، استفاده از ثبات، سازماندهی [[پشته تماس|فریم پشته]]، و قراردادن پارامتر تابعی یک برنامه نرمافزاری توکار، برای استفاده با یک [[:en:Embedded_operating_system|سیستمعامل توکار]] را تعیین میکند. |
||
[[کامپایلر|کامپایلرهایی]] که از 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–30 |
||
| publisher = Freescale Semiconductor, Inc |
| publisher = Freescale Semiconductor, Inc |
||
| |
| url = http://www.nxp.com/files/32bit/doc/app_note/PPCEABI.pdf |
||
}}</ref> انتخاب EABI |
}}</ref> انتخاب EABI میتواند روی کارایی تأثیر بگذارد.<ref>{{cite web |
||
|title=Debian ARM accelerates via EABI port |
|title=Debian ARM accelerates via EABI port |
||
|date=16 October 2016 |
|date=16 October 2016 |
||
خط ۵۶: | خط ۵۵: | ||
}}</ref> |
}}</ref> |
||
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> |
|||
== پانویس == |
== پانویس == |
||
{{پانویس}} |
{{پانویس|۲}} |
||
== منابع == |
== منابع == |
||
* {{یادکرد-ویکی|پیوند=https://en.wikipedia.org/wiki/Application_binary_interface|عنوان=Application binary interface|زبان=انگلیسی|بازیابی=9 بهمن 1399}} |
* {{یادکرد-ویکی|پیوند=https://en.wikipedia.org/wiki/Application_binary_interface|عنوان=Application binary interface|زبان=انگلیسی|بازیابی=9 بهمن 1399}} |
||
{{سیستمعامل}} |
{{سیستمعامل}} |
نسخهٔ ۲۸ ژانویهٔ ۲۰۲۱، ساعت ۱۵:۲۵
یک میانای[۱] دودویی کاربردی یا واسط دودویی کاربردی (به انگلیسی: 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 هستند.[۱۰]
پانویس
- ↑ «واسط، میانا» [رایانه و فنّاوری اطلاعات، مهندسی مخابرات] همارزِ «interface»؛ منبع: گروه واژهگزینی. جواد میرشکاری، ویراستار. دفتر اول. فرهنگ واژههای مصوب فرهنگستان. تهران: انتشارات فرهنگستان زبان و ادب فارسی. شابک ۹۶۴-۷۵۳۱-۳۱-۱ (ذیل سرواژهٔ واسط1)
- ↑ Intel Binary Compatibility Standard (iBCS)
- ↑ "Itanium C++ ABI". (compatible with multiple architectures)
- ↑ "Itanium C++ ABI: Exception Handling". (compatible with multiple architectures)
- ↑ ۵٫۰ ۵٫۱ "EABI Summary". PowerPC Embedded Application Binary Interface: 32-Bit Implementation (PDF) (Version 1.0 ed.). Freescale Semiconductor, Inc. 1 October 1995. pp. 28–30.
- ↑ "Debian ARM accelerates via EABI port". Linuxdevices.com. 16 October 2016. Archived from the original on 21 January 2007. Retrieved 11 October 2007.
- ↑ 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.
- ↑ "ABI for the Arm Architecture". Developer.arm.com. Retrieved 4 February 2020.
- ↑ Eric Christopher (11 June 2003). "mips eabi documentation". https://sourceware.org/legacy-ml/binutils/2003-06/msg00436.html.
- ↑ "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.
منابع
- مشارکتکنندگان ویکیپدیا. «Application binary interface». در دانشنامهٔ ویکیپدیای انگلیسی، بازبینیشده در ۹ بهمن ۱۳۹۹.