제게 아키텍처라 함은 MVC, MVVM, 클린 아키텍처와 같은 소프트웨어 설계 원칙에 가까운 것들입니다.(뇌까지 개발로 가득 차버렸어!) 하지만 오늘 다룰 주제는 CPU의 아키텍처입니다. 복잡한 내용은 아니니 가볍게 포스팅해 보겠습니다!
CPU와 프로그램이 소통하는 방법
컴퓨터 세상은 0과 1로 이루어져 있습니다. 아주 옛날이야 사람이 직접 0과 1을 적어가며 컴퓨터 명령어를 써 내려갔겠지만 현재는 그렇지 않습니다. 어셈블리어부터 상위 레벨 언어까지 사람이 읽고 쓰기 쉬운 형태로 발전되어 왔죠.
그러나 컴퓨터 세상이 0과 1로 이루어져 있다는 사실은 변함이 없습니다. 그 말인즉슨, 우리가 열심히 Swift나 Python 등으로 코드 작성 후 빌드 버튼을 누르면 컴파일러나 인터프리터에 의해 기계어로 변환되는 것을 알 수 있습니다.
이 변환되는 과정의 기준이 바로 ISA, Instruction Set Architecture입니다.
ISA 개념 정리
CPU가 이해하고 실행할 수 있는 명령어의 집합을 정의하는 인터페이스
쉽게 말해 프로그램이 CPU와 소통하는 규칙을 정해놓은 것입니다. 한글로 쓰인 책을 외국인들이 읽게 하려면 영어, 불어, 독일어, 일본어로 번역하듯이 하이 레벨 코드로 작성된 프로그램을 서로 다르게 설계된 CPU(Intel, AMD, ARM 등)에서 읽게 하려면 각각의 ISA가 필요합니다.
다른 시각에서 보자면, 영어로 번역한 책을 독일 사람이 읽기 어려운 것처럼 Intel이 사용하는 ISA로 컴파일된 기계어를 ARM CPU에서는 실행이 불가능합니다.(물론 에뮬레이터 등의 예외는 있지만 어디까지나 예외입니다!)
CPU 아키텍처는 크게 `CISC`와 `RISC`로 나뉩니다. 이 둘의 차이는 명령어 집합(Instruction Set)의 복잡성에 있습니다.
1. CISC
- `복잡한 명령어 집합`을 사용하는 방식
- 한 개의 명령어가 여러 개의 동작을 수행
- `메모리 접근이 자유로움`(연산 중에도 메모리 접근 가능)
- 마이크로코드를 통해 하드웨어 설계를 간소화
- 명령어가 길고 실행 사이클이 가변적
- `전력 소모가 큼`
- 장점: 복잡한 연산을 적은 명령어로 표현 가능 / 메모리와 직접적으로 상호작용 가능
- 단점: 명령어가 길고 복잡해 CPU 설계가 어려움 / 전력 소비가 높고 발열이 심함 / 성능 최적화가 어렵고 실행 속도가 일정하지 않음
2. RISC
- `간단한 명령어 집합`을 사용하는 방식
- 대부분의 명령어가 하나의 사이클(고정된 속도)로 실행됨
- 연산을 할 때 `메모리 접근을 최소화`하고 레지스터 활용
- 하드웨어 설계가 단순해 `저전력 & 고효율`
- 병렬 처리 최적화 가능
- 장점: 연산 속도가 빠름 / 저전력 & 고효율 / CPU 설계가 간단하고 효율적
- 단점: 메모리 접근이 제한적(연산 전에 반드시 레지스터를 거쳐야 함)
대표적인 ISA 종류
1. `x86`
- Intel 기반 32bit CPU
- CISC 방식
- 오래된 PC, 일부 임베디드 등에서 사용
2. `x86_64`
- Intel 기반 64bit CPU
- CISC 방식
- x86과 호환 가능
- 최신 PC, 서버, 게이밍, 데이터센터 등에서 사용
3. `ARM`
- ARM 기반 32bit CPU
- RISC 방식
- 스마트폰, IoT 기기, 임베디드 등에서 사용
4. `ARM64`
- ARM 기반 64bit CPU
- RISC 방식
- ARM과 호환 가능
- 최신 스마트폰, 태블릿, 애플 실리콘(M1칩 등), 서버 등에서 사용
- 내가 사용하는 M3 PRO 맥북도 요놈으로 돌아감!
* 주요 사용처 예시는 큰 틀에서 참고!
정리하기
사실 iOS 개발을 하며 CPU 아키텍처에 대해 크게 고민해 볼 일이 없었습니다. M1 출시 이후 ARM 기반으로 모든 것이 이미 잘 준비돼있었기 때문입니다. 그래도 이제는 모바일 앱이 어떻게 맥북에서 돌아가는지 이해할 수 있게 되었습니다.(예전 Intel Mac은 x86 방식으로 ARM으로 설계된 모바일 앱을 컴파일할 수 없었지만, M1 이후 같은 ARM으로 컴파일이 가능해진 것!)
Ref.
이제는 개발자도 CPU 아키텍처를 구분해야 합니다.
Intel 천지였던 PC 분야에 ARM이 광풍을 불기 시작한지 얼마 되지 않았습니다.이에 개발자도 변화를 감지 하고 대응하기 위해 알아야 할 것들을 정리 했습니다.그동안 암묵적으로 대부분의 서버 환
velog.io
[002] 아키텍처(Architecture)란 무엇인가? 컴퓨터 아키텍처의 종류와 개념
컴퓨터 시스템의 구성 요소와 컴퓨터 아키텍처, 그리고 명령어 집합 구조와 종류별 특징은 무엇인지 알아보겠습니다. 컴퓨터 시스템의 구성 요소 컴퓨터 시스템은 크게 하드웨어와 소프트웨어
movefun-tech.tistory.com
명령어 집합 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 명령어 집합(영어: instruction set) 또는 명령어 집합 구조(영어: Instruction set architecture, ISA)는 마이크로프로세서가 인식해서 기능을 이해하고 실행할 수 있는 기계
ko.wikipedia.org
'CS' 카테고리의 다른 글
iOS에서 OS 뜯어보기 (0) | 2025.02.26 |
---|---|
스마트폰의 CPU, AP 알아보기 (1) | 2025.02.24 |
작지만 빠른 친구 캐시 알아보기 (0) | 2025.02.22 |
CPU / RAM / Storage의 미묘한 삼각관계 (0) | 2025.02.21 |
iOS 개발자의 모두를 위한 컴퓨터 과학 CS50 수료 후기 (1) | 2025.02.19 |