(운영체제) API? ABI? 리눅스 시스템 프로그래밍

2022. 10. 25. 16:52컴퓨터 공학/운영체제

반응형

<리눅스 시스템 프로그래밍> 책을 읽다가 사람들이 별로 모를거 같은 ABI가 나와서 

 

ABI에 대해서 문서화를 하려고 한다.

 

 

개발자라면 모두가 원하는게 있을 것이다.

바로 작성한 프로그램이 잘 동작하는 것...!

 

 

어떤 환경에서도  프로그램이 잘 동작하길 원할 것이고, 이것이 시스템 프로그래밍의 영역으로 왔을 때는

영향을 주는 2가지를 고려하게 된다.

 

 

바로 API와 ABI이다.

 

 

🧐What is API?


API란 뭘까?

 

API는 소프트퉤어의 소스 코드 레벨에서 서로 인터페이스 하는 방식을 정의한다. 일반적으로 API의 표준 인터페이스는 함수이며 
상위 레벨의 소프트웨어에서 더 하위 레벨의 소프트웨어를 호출할 수 있다. - 리눅스 시스템 프로그래밍, 36p

 

API는 Application Programming Interface(애플리케이션 프로그램 인터페이스)의 줄임말입니다. API의 맥락에서 애플리케이션이라는 단어는 고유한 기능을 가진 모든 소프트웨어를 나타냅니다. 인터페이스는 두 애플리케이션 간의 서비스 계약이라고 할 수 있습니다. 이 계약은 요청과 응답을 사용하여 두 애플리케이션이 서로 통신하는 방법을 정의합니다. API 문서에는 개발자가 이러한 요청과 응답을 구성하는 방법에 대한 정보가 들어 있습니다. - AWS

 

책에서는 AWS 내용에 반박하는 부분이 있다.

 

바로 '계약'과 관련한 부분인데, 책에서는 쌍방계약이 아니므로 '계약'이라고 보기는 어렵다고...ㅋㅋㅋㅋ

 

 

모든 프로그램은 양쪽 모두(사용자와 제공자)가 API를 준수할 경우에만 동작한다.

그리고 소스코드 수준에서 호환된다.

 

 

대표적인 API 예시로 웹 API가 있을 것이다.

어떤 요청을 어떻게 해야하는지...등

 

 

 

 

🧐What is ABI?


그럼 ABI는 뭘까?

 

ABI는 특정 아키텍처 간에서 동작하는 소프트웨어 간의 바이너리 인터페이스를 정의한다.

 

API는 소스코드 수준에서 호환된다면, ABI는 바이너리 호환성을 보장하며, 이 덕분에 소스코드를 다시 컴파일하는 수고 없이 같은 ABI를 지원하는 시스템이라면 동일한 기능을 수행하도록 보장한다.

 

 

ABI는 주로 콜링 컨벤션, 바이트 순서, 시스템 콜 실행 등과 관련이 있는데, 

예를 들면 함수가 실행되는 방식, 인자가 함수로 전달되는 방식 등을 말하는 것이다.

 

 

 

 

 

 

결국 API와 ABI 모두 호환성에 영향을 주고 있고,  이 두가지를 잘 지켜야만이 

잘 동작하는 프로그램을 만들 수 있다.

반응형