응용 프로그램 이진 인터페이스![]() ![]() 응용 프로그램 이진 인터페이스(application binary interface, ABI)는 소프트웨어가 노출하는 인터페이스로, 프로세스 내 기계어 접근을 위해 정의된다. 노출되는 소프트웨어는 라이브러리이고, 소비 주체는 프로그램이다. ABI는 상대적으로 낮은 추상화 수준에 있다. 인터페이스 호환성은 대상 하드웨어와 소프트웨어 빌드 툴체인에 따라 달라진다. 반면, 응용 프로그래밍 인터페이스(API)는 상대적으로 높은 수준의 하드웨어 독립적이고 인간이 읽을 수 있는 형식인 소스 코드로의 접근을 정의한다. API는 컴파일 전 소스 코드 수준에서 인터페이스를 정의하지만, ABI는 컴파일된 코드에 대한 인터페이스를 정의한다. API 호환성은 일반적으로 시스템 설계 및 툴체인의 관심사이다. 그러나 프로그래머는 여러 언어로 프로그램을 작성하거나 동일한 언어에 대해 여러 컴파일러를 사용할 때 ABI를 직접 다루어야 할 수 있다. 완전한 ABI는 ABI를 지원하는 프로그램이 해당 ABI를 제공하는 여러 운영 체제에서 수정 없이 실행될 수 있도록 한다. 대상 시스템은 필요한 라이브러리(ABI를 구현하는)를 제공해야 하며, 다른 전제 조건이 있을 수 있다. 설명ABI가 다루는 인터페이스 측면은 다음과 같다.
ABI에는 인텔 이진 호환성 표준(iBCS)[3] 및 다양한 명령어 세트에 대한 System V Release 4 ABI가 포함된다. 임베디드 ABI임베디드 ABI (EABI)는 임베디드 운영체제에서 사용되며, 파일 형식, 자료형, 레지스터 사용법, 스택 프레임 구성, 임베디드 소프트웨어 프로그램의 함수 매개변수 전달과 같은 측면을 지정한다. EABI를 지원하는 각 컴파일러 및 어셈블러는 다른 컴파일러 및 어셈블러가 생성한 코드와 호환되는 목적 파일을 생성한다. 이를 통해 개발자는 한 컴파일러가 생성한 라이브러리를 다른 컴파일러가 생성한 목적 파일과 링크할 수 있다. 일반적으로 EABI는 대상 임베디드 시스템의 제한된 리소스에 대해 성능에 최적화되어 있다. 따라서 EABI는 일반적으로 데스크톱 운영 체제에서 볼 수 있는 커널과 사용자 공간 사이의 추상화를 생략할 수 있다. 예를 들어, 더 작은 실행 파일과 더 빠른 로딩을 위해 동적 링킹을 피할 수 있고, 고정된 레지스터 사용은 더 작은 스택과 커널 호출을 허용하며, 특권 모드에서 응용 프로그램을 실행하면 장치 드라이버 호출의 간접 없이 사용자 지정 하드웨어 작업에 직접 접근할 수 있다.[4] EABI의 선택은 성능에 영향을 미칠 수 있다.[5][6] 널리 사용되는 EABI에는 파워PC,[4] ARM,[7] 및 MIPS EABI가 포함된다.[8] C 라이브러리와 같은 특정 소프트웨어 구현은 더 구체적인 ABI를 형성하기 위해 추가적인 제한을 부과할 수 있다. 한 가지 예는 ARM용 GNU OABI 및 EABI인데, 둘 다 ARM EABI의 하위 집합이다.[9] 같이 보기각주
외부 링크 |
Portal di Ensiklopedia Dunia