Search

응용 프로그램이 운영체제마다 다른 이유

class
운영체제 심화
상태
완료
날짜

응용 프로그램이 운영체제마다 다른 이유

응용 프로그램이 운영체제마다 다른 이유는 여러 가지가 있지만, 가장 중요한 이유는 API와 ABI의 차이라고 생각합니다. 이러한 차이로 인해 응용 프로그램은 각 운영체제에 맞춰 개발되어야 합니다.
사실 궁극적으로는 하드웨어 아키텍처, 즉 ABI 때문에 API까지 달라지는 것입니다.
운영 체제의 API
운영체제는 응용 프로그램이 하드웨어 리소스에 접근하고, 시스템 서비스를 이용할 수 있도록 중개자 역할을 합니다. 이를 위해 각 운영체제는 고유한 API를 제공합니다. 예를 들어, Windows는 WinAPI를, macOS는 Cocoa, iOS는 Cocoa Touch를 제공합니다.
이 API들은 하드웨어의 세부 사항을 추상화하여 개발자가 직접 하드웨어를 제어하지 않아도 되게 만들지만, 운영 체제마다 제공하는 API가 다르기 때문에 응용 프로그램이 OS에 따라 다르게 작성되어야 합니다.
하드웨어의 차이 ABI
서로 다른 운영체제가 설치되는 하드웨어도 다양합니다. 예를 들어, Windows는 다양한 제조업체의 PC와 호환되도록 설계되었지만, macOS는 주로 Apple의 Mac 하드웨어에 최적화되어 있습니다.
이러한 하드웨어 차이는 ABI의 차이를 발생시킵니다. 각 하드웨어 아키텍처에 맞게 설계된 프로세서 구조, 메모리 관리 방식, 레지스터 관리 방식이 달라지기 때문입니다. 결과적으로 운영체제마다 ABI가 달라집니다.
ABI(Application Binary Interface) ABI란 응용 프로그램과 운영체제 사이의 인터페이스로, 실행 가능한 코드가 시스템의 하드웨어와 올바르게 상호 작용하도록 정의하는 데 필요한 규약과 규칙을 명시합니다.
1.
데이터 타입의 크기와 정렬 : ABI는 특정 데이터 타입이 메모리에서 차지하는 바이트 수와 해당 데이터가 어떻게 정렬되어야 하는지 정의합니다. 예를 들어, 32비트 시스템과 64비트 시스템은 정수형 데이터 타입의 크기가 다를 수 있습니다.
2.
레지스터 사용 : 프로세서 아키텍처는 다양한 레지스터를 가지고 있으며, ABI는 이 레지스터들이 어떻게 사용되어야 하는지 명시합니다. 예를 들어, 어떤 함수의 반환 값은 특정 레지스터를 통해 전달될 수 있으며, 매개변수는 다른 레지스터를 통해 전달됩니다.
3.
호출 규약 : 함수가 호출될 때 매개변수와 반환값을 어떻게 처리할지를 정의합니다. 이는 매개변수가 레지스터를 통해 전달될지, 스택을 통해 전달될지 등을 결정합니다. 다른 아키텍처는 다른 호출 규약을 사용할 수 있습니다.