1. ISA
- Instruction Set Architecture
- CPU가 이해하고 실행할 수 있는 명령어 집합.
- 특정 아키텍처의 하드웨어와 소프트웨어 간의 인터페이스.
- 각각의 아키텍처는 고유한 ISA를 가짐.
- 이 명령어 집합들은 운영체제와 어플리케이션에 사용됨.
2. CPU 아키텍처
- CPU의 설계와 명령어 집합(ISA)을 정의하는 방식.
- 아키텍처란 다른 하드웨어와 소프트웨어 간의 상호 작용을 가능하게 하는 인터페이스.
- CPU의 내부 구성 요소, 데이터 버스, 레지스터, ISA를 포함하는 개념.
CPU 아키텍처는 하드웨어 시스템의 전반적인 구조와 동작을 나타내는 개념. ISA는 CPU가 이해하고 실행할 수 있는 명령어 집합을 정의하는 개념. 엄밀하게는 약간의 차이가 있지만, 상호 교환 가능한 용어.
2-1. CPU 아키텍처 종류
x86
- Intel 기반 32bit CPU
- x86은 32bit CPU의 대표명사처럼 불림
- Windows, Linux, Mac OS (BigSur까지) 지원
x86_64 (amd64)
- Intel 기반 64bit CPU, x86과 호환됨.
- Windows, Linux, Mac OS (BigSur까지) 지원
arm
- RISC(Reduced Instruction Set Computer) 아키텍처
- 저전력 소비, 높은 효율성
- arm 기반 32bit CPU
- x86과 아예 달라서 호환 안 됨.
- Linux, Mac OS (Monterey부 터), Android, iOS
arm64
- arm 기반 64bit CPU
- 32bit arm과 호환됨
- Linux, Mac OS (Monterey부터), Android, iOS
- 같은 소스 코드이지만 컴파일 환경이 다르면 다른 실행 파일이 생성됨.
- x86_64에서 실행하도록 컴파일 된 파일은 x86_64의 ISA를 사용해서 컴파일됨.
- arm64에서 실행하도록 컴파일 된 파일은 arm64의 ISA를 사용해서 컴파일됨.
- x86_64에서 실행되도록 컴파일된 파일을 arm64에서 실행하려면 해당 파일을 arm64 ISA에 맞게 재컴파일하여 새로운 실행 파일을 생성하거나, 크로스 컴파일러를 사용해야 함.
3. 크로스 컴파일
- A 머신에서 컴파일러를 돌려서 B 머신에서 동작하는 바이너리를 만드는 것.
- 맥북에서 안드로이드 스튜디오를 설치하고 소스코드를 빌드해서 apk 실행파일을 만든 것을 크로스 컴파일 과정으로 볼 수 있음.
- 일반적으로 컴파일러는 동일한 플랫폼에서 실행되는 바이너리 파일을 생성.
- 예를 들어, 개발 환경이 x86 아키텍처에서 x86 아키텍처를 대상으로 컴파일 하면, x86 아키텍처에서 실행할 수 있는 실행 파일이 생성됨.
- 개발 환경이 x86 아키텍처인 컴퓨터에서 arm 아키텍처를 탑재한 임베디드 시스템을 대상으로 크로스 컴파일한 경우, arm 아키텍처에서 실행 가능한 바이너리가 생성됨.
4. 운영체제와 CPU 아키텍처
- 각각의 운영체제는 다양한 CPU 아키텍처를 지원함.
- 각 CPU 아키텍처는 여러 운영체제에서 지원될 수 있음.
- Linux도 x86_64, arm64 등 다양한 아키텍처에서 실행될 수 있음.
- Linux나 Windows 운영체제에서 x86이라고 부르면 32bit CPU 전용 OS이고, x64라고 부르면 64bit CPU 전용 OS라고 통용됨.
- 하지만 특정 버전의 운영체제가 특정 CPU 아키텍처를 지원하지 않을 수 있음.
- Intel Mac은 CPU가 x86_64이기 때문에 이를 지원하는 운영체제를 사용하고, M1 Mac은 CPU가 arm이기 때문에 이를 지원하는 다른 버전의 운영체제를 쓴다.
M1 Mac에서 인텔용 프로그램이 돌아가는 이유?
Rosseta 에뮬레이터 덕분.
x86, x86_64로 빌드된 프로그램을 실행할 수 있음.
arm 내부에 x86 가상환경을 만들고, 그 안에서 실행하는 방식.
5. 운영체제 별 실행파일
- 소프트웨어는 실행되기 위해 컴파일 되어야 함.
- 하지만 요즘은 처음부터 전부 다 만들지 않고, 라이브러리를 씀.
- 대부분의 라이브러리는 특정 CPU 아키텍처에 맞게 사전 컴파일 되어있음.
- 프로그램은 컴파일된 바이너리임.
- 따라서 어떤 운영체제에서, 어떤 CPU 아키텍처에 대해 컴파일 했는지에 따라 결과물이 달라짐.
출처
https://bumday.tistory.com/65
https://inyongs.tistory.com/108
https://blog.naver.com/PostView.nhn?blogId=mumasa&logNo=221049608979
https://velog.io/@480/%EC%9D%B4%EC%A0%9C%EB%8A%94-%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%8F%84-CPU-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98%EB%A5%BC-%EA%B5%AC%EB%B6%84%ED%95%B4%EC%95%BC-%ED%95%A9%EB%8B%88%EB%8B%A4