CPU 아키텍처

김석·2023년 6월 2일
0

Computer Architecture

목록 보기
1/2

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 아키텍처에 맞게 사전 컴파일 되어있음.
    • Linux: \*.so
    • 윈도우: \*.dll
  • 프로그램은 컴파일된 바이너리임.
  • 따라서 어떤 운영체제에서, 어떤 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

profile
handsome

0개의 댓글