CPU가 "이해할 수 있는 말"을 어떻게 설계할 것인가 — 적게, 하지만 강력하게 vs 많게, 하지만 단순하게
한 줄 비유. ISA(Instruction Set Architecture)는 하드웨어와 소프트웨어 사이의 계약서다.
컴파일러(소프트웨어)는 이 계약서에 적힌 명령어만 써서 코드를 만들 수 있고, CPU(하드웨어)는 이 계약서에 적힌 명령어만 실행할 수 있으면 된다.
계약서를 어떻게 쓰느냐 — 조항을 복잡하고 다양하게 vs 단순하고 적게 — 가 바로 CISC vs RISC 논쟁이다.
1. ISA란 무엇인가
명령어 집합(ISA)은 특정 CPU가 실행할 수 있는 명령어의 종류·형식·인코딩 전체를 말한다.
덧셈을 어떤 이진 코드로 표현하는지, 피연산자로 메모리 주소를 직접 쓸 수 있는지, 레지스터는 몇 개인지 —
이 모든 규칙이 ISA에 정의된다. 같은 ISA를 구현한 CPU라면 제조사가 달라도 같은 기계어 프로그램을 실행할 수 있다
(예: x86-64 ISA를 인텔도, AMD도 각자 다른 회로로 구현한다).
ISA를 설계할 때 가장 근본적인 질문은 이것이다 — "명령어 하나가 얼마나 많은 일을 해야 하는가?"
이 질문에 대한 두 가지 상반된 답이 CISC와 RISC다.
🏛️ CISC Complex Instruction Set Computer
"명령어 하나가 복잡한 작업을 통째로 처리하게 하자."
명령어 하나가 메모리 접근 + 연산을 한 번에 수행 가능
명령어 길이가 가변적(1~15바이트, x86 기준)
명령어 종류가 매우 많고(수백~) 주소 지정 방식도 다양
대표 예시: x86 / x86-64 (인텔, AMD)
컴파일러는 짧고 간결한 어셈블리를 생성 → 코드 밀도 높음
대신 CPU 내부 디코더 회로가 매우 복잡해짐
⚙️ RISC Reduced Instruction Set Computer
"명령어는 최대한 단순하게, 대신 빠르고 예측 가능하게 하자."
메모리 접근과 연산이 분리된 load/store 구조
명령어 길이가 고정(대부분 4바이트)
명령어 종류가 적고 형식이 균일 → 디코딩이 단순
대표 예시: ARM, RISC-V (모바일·임베디드·최신 서버)
한 클럭에 한 명령어 완료를 목표 → 파이프라이닝에 유리
대신 같은 작업에 더 많은 명령어가 필요할 수 있음
2. 같은 연산, 다른 어셈블리
"메모리에 있는 두 값을 더해서 다시 메모리에 저장한다"는 똑같은 작업을 CISC와 RISC로 어떻게 다르게 표현하는지 비교해보자.
CISC는 ADD 한 줄에 메모리 접근과 연산을 다 넣지만, RISC는 레지스터에 값을 옮긴 뒤(LOAD)에만 연산할 수 있어서 단계가 나뉜다.
3. 인터랙티브 데모 — 몇 단계가 필요할까?
연산을 선택하고 "실행"을 누르면, CISC 방식과 RISC 방식이 각각 몇 단계(명령어)를 거치는지 애니메이션으로 보여준다.
🏛️ CISC 방식 메모리-메모리 연산
실행된 명령어 수0 개
⚙️ RISC 방식 load/store 구조
실행된 명령어 수0 개
프리셋을 고르고 "실행"을 눌러보세요.
명령어 개수만 보면 RISC가 손해처럼 보인다. 하지만 RISC 명령어는 고정 길이·단순 형식이라
한 클럭에 하나씩, 파이프라인을 거의 멈추지 않고 흐를 수 있다.
반면 CISC의 복잡한 메모리-메모리 명령어는 내부적으로 여러 클럭이 걸리거나 파이프라인을 방해하기 쉽다.
"명령어 수"와 "실제 걸리는 시간"은 다른 이야기라는 점이 핵심이다.
4. CISC vs RISC 한눈에 비교
기준
CISC
RISC
명령어 길이
가변 (1~15바이트)
고정 (보통 4바이트)
명령어 개수
많음 (수백 개, 다양한 주소 지정)
적음 (수십~백여 개)
클럭당 명령어(CPI)
명령어마다 여러 클럭 소요
이상적으로 클럭당 1개 목표
메모리 접근
메모리-메모리 연산 가능
load/store만 메모리 접근, 연산은 레지스터끼리
파이프라이닝 적합성
낮음 (가변 길이·복잡한 디코딩이 방해)
높음 (균일한 형식이 유리)
대표 CPU
x86 / x86-64 (Intel, AMD)
ARM, RISC-V
컴파일러 역할
비교적 단순한 코드 생성으로도 충분
명령어 스케줄링·레지스터 할당 등 최적화 부담이 큼
하드웨어 복잡도
디코더가 복잡 (마이크로코드 사용)
디코더가 단순 (회로 면적·전력 절약)
5. 오늘날의 현실 — 경계가 흐려졌다
현대 x86도 내부는 RISC다. 인텔·AMD의 최신 CPU는 x86 명령어를 그대로 실행하지 않는다.
디코더가 복잡한 CISC 명령어를 마이크로연산(micro-op, μop)이라는 단순하고 고정된 형태로 쪼갠 뒤,
내부적으로는 RISC 프로세서처럼 파이프라이닝·비순차 실행으로 처리한다. 즉 "CISC 겉모습 + RISC 속모습"이다.
ARM이 모바일·저전력에서 강세인 이유. 명령어가 단순하고 고정 길이이므로 디코더 회로가 작고 전력 소모가 적다.
스마트폰·태블릿, 그리고 최근 노트북·서버(Apple Silicon, AWS Graviton 등)까지 ARM 기반이 확산된 배경에는
이 전력 효율성이 크게 작용한다.
RISC-V의 부상. 오픈소스 ISA인 RISC-V는 누구나 무료로 구현할 수 있어 임베디드부터 서버까지
빠르게 채택이 늘고 있다 — RISC 철학이 라이선스 문제까지 풀어낸 사례.
결국 순수 CISC·순수 RISC는 이제 드물고, 서로의 장점을 흡수한 하이브리드가 현실에 더 가깝다.
6. 더 알아보기
이 페이지는 ISA "설계 철학"에 집중했다. 명령어가 CPU 안에서 실제로 어떻게 실행되는지, 그리고 그 실행을
어떻게 겹쳐서 빠르게 만드는지는 아래 페이지에서 이어서 볼 수 있다.
한 줄 정리. ISA는 하드웨어와 소프트웨어의 계약서다.
CISC는 "명령어를 복잡하게 만들어 컴파일러의 일을 줄이자"는 철학, RISC는 "명령어를 단순하게 만들어
하드웨어를 빠르고 효율적으로 만들자"는 철학이다. 오늘날의 CPU는 겉으로는 CISC/RISC 딱지를 붙이고 있어도
내부적으로는 서로 닮아가고 있다 — 좋은 아이디어는 결국 진영을 가리지 않고 섞인다.