CISC는 Complex Instruction Set Computer 의 약자입니다.
그대로 해석하면 ' 복잡한 명령어 집합을 활용하는 컴퓨터' 를 의미합니다. 여기서 ' 컴퓨터' 를 'CPU'
라고 생각해도 좋습니다. CISC란 이름 그대로 복잡하고 다양한 명령어들을 활용하는 CPU 설계 방
식입니다. 앞서 ISA의 한 종류로 소개한 x86, x86-64는 대표적인 CISC 기반의 ISA 입니다.
CISC 는 다양하고 강력한 기능의 명령어 집합을 활용하기 때문에 명령어의 형태와 크기가 다양한 가
변 길이 명령어를 활용합니다. 메모리에 접근하는 주소 지정 방식도 다양해서 아주 특별한 상황에서
만 사용되는 독특한 주소 지정 방식들도 있습니다.
💻 대표적인 CISC 아키텍처들
아키텍처 | 비트 수 | 용도 | 특징 |
---|---|---|---|
x86(Intel, IA-32) | 32비트 | PC, 서버 | 다양한 명령어, 가변 길이 |
x86-64 (AMD64, Intel 64) - 대표적인 CISC | 64비트 | 현대 모든 범용 컴퓨터 | x86 호환, 64비트 확장(1바이트 ~ 15바이트) |
VAX(Virtual Address eXtension) | 32비트 | 워크스테이션, 대학 등 | 매우 복잡한 명령어 세트 |
Motorola 68k(m68k) | 16/32비트 | 초기 컴퓨터, 임베디드 | 우아한 구조, 넓은 주소 지정 |
IBM S/360~370(IBM 메인프레임) | 32비트~ | 메인프레임 | 레거시 호환, 대형 시스템 |
Zilog Z80(인텔 출신 엔지니어들이 설립) | 8비트 | 초기 컴퓨터, 장난감, 기기 | 다양한 주소 모드, 8080 기반 |
💡 CISC의 한계로 등장한 개념입니다.
RISC는 Reduced Instruction Set Computer의 약자입니다.
RISC의 등장은 컴퓨터 아키텍처 역사에서 큰 전환점 중 하나입니다.
이름처럼 RISC는 CISC 에 비해 명령어의 종류가 적습니다. 그리고 CISC와는 달리 짧고 규격화된 명령어 , 되도록 1 클럭 내외로 실행되는 명령어를 지향합니다.
즉 , RISC 는 고정 길이 명령어를 활용합니다.
💻 대표적인 RISC 아키텍처들
아키텍처 | 설계 시기 | 상태 | 대표 사용처 | 특징 |
---|---|---|---|---|
ARM | 1985~ | 활발히 사용중 | 모바일, Apple M 시리즈 등 | 저전력, 고효율 |
MIPS | 1984~ | 점점 감소 | 라우터, 임베디드 | 깔끔한 구조, 교육용 자주 사용 |
RISC-V | 2010~ | 급성장 중 | 오픈소스 하드웨어, IoT 등 | 오픈 ISA, 유연한 확장성 |
SPARC | 1987~ | 쇠퇴 중 | 서버, Solaris 시스템 | 레지스터 윈도우 |
PowerPC | 1991~ | 거의 사용 안 함 | 구형 Mac, 콘솔 | 고성능 RISC, 당시 영향력 큼 |
Alpha | 1992~ | 단종 | 과거 고성능 서버 | 순수 64비트, 당시 최강 |
대부분의 RISC 아키텍처는 단순한 명령어 집합, 고정된 명령어 길이, 그리고 고성능 파이프라이닝을 목표로 설계되어 있습니다.
기준 | x86-64 | ARM (AArch64) |
---|---|---|
명령어 길이 | 가변 (보통 1~7바이트) | 고정 (대부분 4바이트) |
명령어 수 | 적을 수도 있음 | 더 많을 수도 있음 |
전체 코드 크기 | 작은 경우도 많음 | 길어지는 경우 있음 |
int add(int a, int b) {
return a + b;
}
mov eax, edi # 첫 번째 인자 a를 eax로
add eax, esi # esi는 2번째 인자. eax = eax + esi 와 같음.즉, 1번째 + 2번째 인자를 계산하는 것
ret # 함수 종료 → 호출자에게 리턴
gas
, GCC 디폴트)add w0, w0, w1 # w0, w0, w1 더함
ret # 함수 종료 → 호출자에게 리턴
→ 각 명령어 4바이트 고정. 총 8바이트.
즉, 이런 단순한 예제에서는 거의 차이가 없거나 x86-64가 약간 더 짧을 수도 있다.
항목 | CISC (x86) | RISC (ARM 등) |
---|---|---|
명령어 길이 | 가변 (1~15바이트) | 고정 (보통 4바이트) |
명령어 개수 | 많음 | 적음 |
메모리 접근 | 거의 모든 명령어 가능 | load/store 명령어만 가능 |
디코딩 용이성 | 어렵고 복잡 | 단순 |
파이프라이닝 효율 | 낮음 | 높음 |
전력 효율 | 낮음 | 높음 |
코드 크기 | 작을 수 있음 | 더 길어질 수 있음 |
명령어의 세세한 생김새 , 명령어로 할 수 있는 연산 , 주소 지정 방식 등은 CPU 마다 조금씩 차이가 있습니다.
CPU 가 이해할 수 있는 명령어들의 모음을 명령어 집합 instruction set 또는
명령어 집합 구조 ISA: Instruction set architecture ( 이하 ISA) 라고 합니다. 즉 , CPU 마다 ISA가 다를 수 있다는 것입니다.
📚 대표적인 ISA 목록
ISA 이름 | 아키텍처 분류 | 상태 | 사용처 / 특징 |
---|---|---|---|
x86 | CISC | 매우 활발 | 인텔/AMD CPU, 데스크탑/노트북 주류 |
x86-64 | CISC | 활발 | x86의 64비트 확장. AMD가 처음 만듦 |
ARMv7 | RISC | 일부 사용중 | 스마트폰, 임베디드. 32비트 |
ARMv8-A | RISC | 활발 | Apple M 시리즈, 최신 안드로이드 |
RISC-V | RISC | 급성장 중 | 오픈소스 ISA, IoT ~ 서버까지 확장 |
MIPS | RISC | 쇠퇴 중 | 과거 콘솔/임베디드. 교육용으로 사용 많음 |
SPARC | RISC | 거의 단종 | Sun 서버, Solaris |
PowerPC | RISC | 사양세 | 과거 Mac, PS3, Wii |
Alpha | RISC | 단종 | 과거 DEC 서버 |
Itanium (IA-64) | VLIW | 실패 | 인텔이 만든 실험적 ISA. 거의 사라짐 |
💡 ISA는 하드웨어가 파이프라인/슈퍼스칼라로 실행될 수 있도록 설계되어야 합니다.
요소 | 설명 |
---|---|
고정된 명령어 길이 | 디코딩이 단순해져서 파이프라인에 유리함 (RISC 특징) |
단순 명령어 형식 | 명령어마다 단계별 처리가 예측 가능해야 효율적 |
load/store 아키텍처 | 메모리 접근을 명령어에서 분리해서 파이프라인 충돌을 줄임 |
레지스터만 연산 가능 | EX 단계만 집중적 처리, 하드웨어 단순화 |
지연 슬롯 (delay slot) | 파이프라인 hazard를 소프트웨어 수준에서 해결하려는 시도 (예: MIPS) |
: 한 사이클에 여러 개의 명령어를 동시에 실행하는 구조 (멀티파이프라인이라고 보면 됨)
조건 | 설명 |
---|---|
명령 간 의존성 낮을 것 | 독립된 명령이 많아야 병렬 실행 가능 |
레지스터 수가 충분히 많을 것 | 리소스 충돌 줄이기 (RISC는 보통 32개 이상 있음) |
명령어 포맷이 균일할 것 | 디코더가 병렬로 쉽게 분석 가능 |
사이드 이펙트가 적을 것 | 명령어가 예측 가능한 결과만 낼 것 |
ISA | 파이프라이닝 최적화 | 슈퍼스칼라 친화성 | 이유 |
---|---|---|---|
RISC-V | ✅ 매우 좋음 | ✅ 좋음 | 고정 명령어 길이, load/store, 간단한 구조 |
ARMv8 | ✅ 좋음 | ✅ 좋음 | Thumb 명령어로 압축 가능, 명령어 구조 정돈 |
x86-64 | ❌ 구조적으로 어려움 | ✅ 하드웨어로 극복 | 가변 길이 명령어, 복잡한 디코딩 → 해석기 앞단 필요 |
MIPS | ✅ 교과서적 예시 | ⚠️ 제한적 | 단순하지만 슈퍼스칼라 고려는 초기에는 부족 |