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

بدون خلاصه ویرایش
جز (Hooman Mallahzadeh صفحهٔ رابط دودویی نرم‌افزار را به واسط دودویی کاربردی منتقل کرد)
یک '''میانای دودویی کاربردی''' یا '''واسط دودویی کاربردی''' {{به انگلیسی|application binary interface}} در [[علوم رایانه]]، با کوته‌نوشت '''ABI''' یک [[واسط (رایانش)|واسط]] است که بین دو «پودمان برنامه دودویی» وجود دارد. معمولا یکی از این پودمان ها یک [[کتابخانه (رایانش)|کتابخانه]] یا وسیله [[سیستم‌عامل]] است، و دیگری یک برنامه است که توسط یک کاربر در حال اجرا است.
 
یک ABI در واقع دارد نحوه دسترسی به ساختمان داده یا رویه محاسباتی را در [[کد ماشین]] تعریف می کند، که این کد ماشین یک قالب سطح پایین و وابسته به سخت افزار است. در مقابل این دیدگاه، مفهوم [[واسط برنامه‌نویسی کاربردی|API]] است که این دسترسی را در [[کد منبع]] تعریف می کند، که کد منبع یک قالب نسبتا سطح بالا، مستقل از سخت‌افزار، و معمولا [[فرمت خواندنی برای انسان|انسان-خواندنی]] است. یک بخش معمول از یک ABI تعریف [[قرارداد تماس‌گرفتن]] است، که تعیین می کند که چگونه داده به عنوان ورودی ارائه گردد، یا به عنوان خروجی، از رویه های محاسباتی خوانده شود. [[قراردادهای فراخوانی اکس۸۶|قراردادهای تماس‌گیری x86]] مثال‌هایی در این زمینه اند.
 
یک مفهوم پیوسته با ABI (که می تواند استانداردسازی شود یا نشود)، کارهای نویسنده یک کامپایلر،[[کامپایلر]]، سیستم‌عامل، یا کتابخانه است. با این حال، یک برنامه‌نویس کاربردی موقعی که «یک برنامه را به صورت مخلوطی از چند زبان برنامه‌نویسی می نویسد» یا حتی موقعی که «یک برنامه نوشته شده به یک زبان را با چند کامپالر متفات کامپایل می کند» با ABI ها سروکار دارد.
 
== توصیف ==
 
* مجموعه دستورالعمل یک پردازنده (با جزییاتی مثل ساختار فایل ثبات، سازمان پشته، انواع دسترسی به حافظه و غیره).
* اندازه، چیدمان‌ها، و [[تراز ساختمان داده|ترازهای]] [[نوع داده|انواع داده]] اصلی که پردازه می تواند به آنها به صورت مستقیم دسترسی یابد.
* [[قرارداد تماس،تماس‌گرفتن|قرارداد تماس]]، که نحوه ارسال آرگومان های تابع،[[رویه (علوم رایانه)|تابع]]، و بازیابی مقادیر بازگشتی را کنترل می کند. مثلا این موارد را کنترل می کند:
** آیا همه پارامترها باید روی پشته قرار گیرند یا بعضی از آن‌ها در ثبات قرار گیرند
** کدام ثبات برای کدان عملکرد تابعی استفاده شود؛
** آیا اولین پارامتر تابعی قرارگرفته روی پشته، اول یا آخر روی پشته نشانده شده است.
* یک برنامه‌کاربردی چگونه باید با سیستم‌عامل [[تماس با سامانه (رایانه)|تماس سامانه‌ای]] بگیرد، و اگر ABI تماس‌های سامانه‌ای مستقیم را به جای تماس‌های رویه‌ای به [[شگرد ته‌رسید|ته‌رسیدهای]] تماس سامانه‌ای تعیین نموده است، باید اعداد تماس سامانه‌ای تعیین شود.
* و در حالتی که با یک ABI سیستم‌عاملی کامل سروکار داریم، قالب دودویی فایل[[آبجکت شیء،فایل]]، کتابخانه برنامه، و غیره.
 
== ABI های کامل ==
یک ABI کامل، مثل [[:en:Intel_Binary_Compatibility_Standard|استاندارد سازگاری دودویی اینتل]] (iBCS) این امکان را فراهم می سازد تا یک برنامه از یک سیستم‌عامل که از آن ABI پشتیبانی می کند، بدون هیچ دستکاری روی هر سامانه دیگر مشابه (پشتیبانی کننده از ABI) اجرا گردد، برای این موضوع باید کتابخانه های مشترک لازم وجود داشته باشد، و پیش‌نیازهای مشابه برآورده گردد.
 
دیگر ABI ها جزییاتی مثل [[دستکاری نام|دستکاری نام C++]]، انتشار حالت استثنا،[[رسیدگی به استثناء|استثنا]]، و قراداد تماس‌گیری بین کامپایلرها در یک بن‌سازه را استاندارد سازی می کند، اما نیازی به سازگاری بین بن‌سازه‌ایی ندارد.
 
== ABI های توکار ==
یک واسط دودویی کاربردی توکار {{به انگلیسی|embedded-application binary interface}} با کوته‌نوشت EABI قراردادهای استانداردی برای [[قالب پرونده،پرونده]]، انواع داده، استفاده از ثبات، سازماندهی [[پشته تماس|فریم پشته،پشته]]، و قراردادن پارامتر تابعی یک برنامه نرم‌افزاری توکار، برای استفاده با یک [[:en:Embedded_operating_system|سیستم‌عامل توکار]] را تعیین می کند.
 
[[کامپایلر|کامپایلرهایی]] که از EABI پشتیبانی می کنند، ابجکن[[آبجکت کد|آبجکت کدی]] می سازند که با کد تولید شده دیگر کامپایلرهای مشابه سازگار است، این موضوع به توسعه‌دهنده ها امکان پیوند کتابخانه‌های ساخته شده با یک کامپایلر را با آبجکت کد تولید شده با یک کامپایلر دیگر می دهد. توسعه‌دهندگانی که کد [[زبان اسمبلی]] خودشان را می نویسند هم ممکن است بخواهند با کد اسمبلی تولید شده با کامپابلر سازگار، واسط سازی انجام دهند.
 
EABI ها برای بهینه سازی کارایی در داخل منابع محدود یک سامانه توکار طراحی شده اند. بنابراین، EABI ها، بیشتر انتزاع هایی که بین کد کاربر و هسته در سیستم‌عامل های پیچیده وجود دارد را حذف می کنند. برای مثال از [[پیونددهنده پویا|پیوند پویا]] جلوگیری می شود، تا اجرایی کوچکتری ایجاد شود، و بازگذاری سریعتر شود، همچنین استفاده از ثبات های ثابت، به ما امکان ایجاد پشته ها و تماس هسته ای فشرده تر را می دهد، و اجرای برنامه کاربردی در حالت مجوزدهی شده، امکان دسترسی مستقیم به عملیات های سخت افزاری سفارشی بدون تغییر مسیر بواسطه تماس به یک درایور دستگاه را می دهد. انتخاب EABI می تواند روی کارایی تاثیر بگذارد.
 
EABI هایی که امروزه زیاد استفاده می شوند شامل: PowerPC،[[پاورپی‌سی|PowerPC]]، [[معماری آرم|Arm]] EABI و [[معماری میپس|MIPS]] EABI هستند. پیاده سازی های نرم افزاری خاص مثب کتابخانه C ممکن است محدودیت های اضافی را تحمیل کند، و این موجب ایجاد یک ABI واقعی تر (با غیرانتزاعی تر) می شود؛ یک مثل GNU OABI و EABI برای ARM است که هردو آن‌ها زیرمجموعه ARM EABI هستند.
 
== منابع ==