CISC와 RISC, ISA

rada·2025년 4월 24일
0

개발

목록 보기
43/43

📚 CISC란 무엇일까 👀

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) - 대표적인 CISC64비트현대 모든 범용 컴퓨터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의 장점

  1. 명령어 밀도(Instruction Density) 증가
    • CISC 아키텍처는 복잡한 연산을 단일 명령어로 처리할 수 있으므로, 동일한 작업을 수행할 때 필요한 명령어 수가 상대적으로 적어집니다.
    • 이로 인해 프로그램의 전체 바이너리 크기가 작아질 수 있으며, 메모리 사용량과 캐시 적중률 면에서 유리할 수 있습니다.
  2. 프로그램 작성 및 컴파일 효율성
    • 복잡한 연산을 한 번에 수행할 수 있는 명령어 덕분에 고급 언어에서 작성된 코드가 저수준 명령어 집합으로 변환될 때 비교적 자연스러운 매핑이 가능해집니다.
    • 컴파일러가 복잡한 연산을 여러 단계를 나눠서 처리할 필요 없이 하나의 명령어로 대체할 수 있어, 컴파일러 설계 측면에서 이점을 제공합니다.
  3. 다양한 주소 지정 모드 지원
    • CISC 시스템은 여러 주소 지정 모드를 제공하여, 메모리에서 데이터를 직접 읽거나 저장하는 다양한 방식을 효율적으로 활용할 수 있습니다.
    • 이러한 유연성은 복잡한 데이터 구조나 연산을 간편하게 처리할 수 있도록 도와줍니다.
  4. 레거시 소프트웨어와의 호환성
    • 오랜 기간 사용되어 온 CISC 아키텍처(예: x86 계열)는 많은 기존 소프트웨어와 하위 호환성을 유지하고 있습니다.
    • 이는 기존 시스템을 업그레이드하거나 이식하는 데 있어 중요한 장점으로 작용합니다.

📌 CISC의 단점

  1. 하드웨어 복잡도 증가
    • 복잡한 명령어 집합을 해석하고 실행하기 위해 제어 유닛과 디코더가 복잡하게 설계되어야 합니다.
    • 이러한 복잡성은 칩 설계와 제조 비용 증가로 이어질 수 있으며, 고성능 구현에 한계를 줄 수도 있습니다.
  2. 명령어 실행 속도의 예측 어려움
    • CISC 명령어는 길이가 가변적이고, 내부 동작이 복잡하여 각 명령어의 정확한 실행 시간이나 사이클 예측이 어려울 수 있습니다.
    • 이는 파이프라이닝(pipelining)이나 분기 예측 등 현대적인 고속 프로세서 설계 기법을 적용하는 데 도전 과제가 됩니다.
  3. 전력 소비 및 발열 문제
    • 복잡한 디코딩과 내부 연산을 처리하기 위한 회로가 많은 경우, 전력 소비와 발열 문제가 발생할 가능성이 높습니다.
    • 모바일 및 임베디드 시스템과 같이 전력 효율성이 중요한 환경에서는 단점으로 작용할 수 있습니다.
  4. 유연한 최적화의 어려움
    • CISC 구조의 복잡성 때문에, 미세 조정 및 최적화가 어려울 수 있으며, 특정 작업에 대해 깊이 있게 최적화하기가 어려울 수 있습니다.
    • 특히 여러 연산을 묶어 처리하는 복합 명령어의 경우, 하드웨어 내부에서 일어나는 동작을 완전히 제어하거나 변경하기 어렵습니다.

📚 RISC란 무엇일까 👀

💡 CISC의 한계로 등장한 개념입니다.
RISC는 Reduced Instruction Set Computer의 약자입니다.

RISC의 등장은 컴퓨터 아키텍처 역사에서 큰 전환점 중 하나입니다.
이름처럼 RISC는 CISC 에 비해 명령어의 종류가 적습니다. 그리고 CISC와는 달리 짧고 규격화된 명령어 , 되도록 1 클럭 내외로 실행되는 명령어를 지향합니다.

즉 , RISC 는 고정 길이 명령어를 활용합니다.

🕰️ RISC 등장 시기와 역사

📍 1. 등장의 배경 (1970년대 후반)

  • 당시 CISC 구조(특히 x86, VAX 등)가 점점 복잡해지면서, CPU 내부에서 복잡한 명령어들이 단순한 하드웨어 연산으로 다시 분해(micro-ops) 되는 구조로 작동하고 있었습니다.
  • 연구자들이 이걸 보면서 “그렇다면, 처음부터 단순한 명령어로만 구성하면 더 빠르지 않을까?”라는 의문을 품게 되었습니다.

💻 대표적인 RISC 아키텍처들

아키텍처설계 시기상태대표 사용처특징
ARM1985~활발히 사용중모바일, Apple M 시리즈 등저전력, 고효율
MIPS1984~점점 감소라우터, 임베디드깔끔한 구조, 교육용 자주 사용
RISC-V2010~급성장 중오픈소스 하드웨어, IoT 등오픈 ISA, 유연한 확장성
SPARC1987~쇠퇴 중서버, Solaris 시스템레지스터 윈도우
PowerPC1991~거의 사용 안 함구형 Mac, 콘솔고성능 RISC, 당시 영향력 큼
Alpha1992~단종과거 고성능 서버순수 64비트, 당시 최강

대부분의 RISC 아키텍처는 단순한 명령어 집합, 고정된 명령어 길이, 그리고 고성능 파이프라이닝을 목표로 설계되어 있습니다.

📏 코드 길이 비교 (일반적인 경향)

기준x86-64ARM (AArch64)
명령어 길이가변 (보통 1~7바이트)고정 (대부분 4바이트)
명령어 수적을 수도 있음더 많을 수도 있음
전체 코드 크기작은 경우도 많음길어지는 경우 있음

💡 예시로 비교

int add(int a, int b) {
    return a + b;
}

🔹 x86-64 (AT&T 문법)

mov eax, edi # 첫 번째 인자 a를 eax로
add eax, esi # esi는 2번째 인자. eax = eax + esi 와 같음.즉, 1번째 + 2번째 인자를 계산하는 것
ret # 함수 종료 → 호출자에게 리턴
  • x86-64 (64비트 x86) 아키텍처, AT&T 문법 사용의 예시 (리눅스 gas, GCC 디폴트)
  • 함수 인자를 레지스터로 받는 System V AMD64 ABI 규칙을 따름 (리눅스/유닉스 계열 64비트 시스템의 표준)

🔸 AArch64 (ARMv8)

add w0, w0, w1 # w0, w0, w1 더함
ret # 함수 종료 → 호출자에게 리턴

→ 각 명령어 4바이트 고정. 총 8바이트.

즉, 이런 단순한 예제에서는 거의 차이가 없거나 x86-64가 약간 더 짧을 수도 있다.


🧠 결론

  • 간단한 코드에선 x86-64가 더 짧은 경우가 많습니다.
  • 복잡한 루틴에서는 x86-64의 가변 명령어와 복잡한 주소 모드 덕분에 코드가 더 압축될 수 있습니다.
  • 그러나 ARM은 더 단순하고 예측 가능한 구조로 인해 파이프라이닝 효율과 전력 효율이 좋습니다.

📌 CISC vs RISC 요약표

항목CISC (x86)RISC (ARM 등)
명령어 길이가변 (1~15바이트)고정 (보통 4바이트)
명령어 개수많음적음
메모리 접근거의 모든 명령어 가능load/store 명령어만 가능
디코딩 용이성어렵고 복잡단순
파이프라이닝 효율낮음높음
전력 효율낮음높음
코드 크기작을 수 있음더 길어질 수 있음

📚 ISA란 무엇일까 👀

명령어의 세세한 생김새 , 명령어로 할 수 있는 연산 , 주소 지정 방식 등은 CPU 마다 조금씩 차이가 있습니다.
CPU 가 이해할 수 있는 명령어들의 모음을 명령어 집합 instruction set 또는
명령어 집합 구조 ISA: Instruction set architecture ( 이하 ISA) 라고 합니다. 즉 , CPU 마다 ISA가 다를 수 있다는 것입니다.

📚 대표적인 ISA 목록

ISA 이름아키텍처 분류상태사용처 / 특징
x86CISC매우 활발인텔/AMD CPU, 데스크탑/노트북 주류
x86-64CISC활발x86의 64비트 확장. AMD가 처음 만듦
ARMv7RISC일부 사용중스마트폰, 임베디드. 32비트
ARMv8-ARISC활발Apple M 시리즈, 최신 안드로이드
RISC-VRISC급성장 중오픈소스 ISA, IoT ~ 서버까지 확장
MIPSRISC쇠퇴 중과거 콘솔/임베디드. 교육용으로 사용 많음
SPARCRISC거의 단종Sun 서버, Solaris
PowerPCRISC사양세과거 Mac, PS3, Wii
AlphaRISC단종과거 DEC 서버
Itanium (IA-64)VLIW실패인텔이 만든 실험적 ISA. 거의 사라짐

💡 ISA는 하드웨어가 파이프라인/슈퍼스칼라로 실행될 수 있도록 설계되어야 합니다.

⚙️ ISA 설계가 파이프라이닝 최적화에 미치는 영향

🔸 파이프라이닝 (Pipelining)

  • 명령어 실행을 여러 단계로 나누고, 동시에 여러 명령을 처리하는 기법
  • 예: IF → ID → EX → MEM → WB

✅ ISA 설계에서 고려할 점

요소설명
고정된 명령어 길이디코딩이 단순해져서 파이프라인에 유리함 (RISC 특징)
단순 명령어 형식명령어마다 단계별 처리가 예측 가능해야 효율적
load/store 아키텍처메모리 접근을 명령어에서 분리해서 파이프라인 충돌을 줄임
레지스터만 연산 가능EX 단계만 집중적 처리, 하드웨어 단순화
지연 슬롯 (delay slot)파이프라인 hazard를 소프트웨어 수준에서 해결하려는 시도 (예: MIPS)

🚀 슈퍼스칼라 (Superscalar)와 ISA의 관계

🔸 슈퍼스칼라란?

: 한 사이클에 여러 개의 명령어를 동시에 실행하는 구조 (멀티파이프라인이라고 보면 됨)

✅ ISA가 슈퍼스칼라에 친화적인 조건

조건설명
명령 간 의존성 낮을 것독립된 명령이 많아야 병렬 실행 가능
레지스터 수가 충분히 많을 것리소스 충돌 줄이기 (RISC는 보통 32개 이상 있음)
명령어 포맷이 균일할 것디코더가 병렬로 쉽게 분석 가능
사이드 이펙트가 적을 것명령어가 예측 가능한 결과만 낼 것

📌 실제 ISA 사례 분석

ISA파이프라이닝 최적화슈퍼스칼라 친화성이유
RISC-V✅ 매우 좋음✅ 좋음고정 명령어 길이, load/store, 간단한 구조
ARMv8✅ 좋음✅ 좋음Thumb 명령어로 압축 가능, 명령어 구조 정돈
x86-64❌ 구조적으로 어려움✅ 하드웨어로 극복가변 길이 명령어, 복잡한 디코딩 → 해석기 앞단 필요
MIPS✅ 교과서적 예시⚠️ 제한적단순하지만 슈퍼스칼라 고려는 초기에는 부족

🌸 요점 정리 🌸

profile
So that my future self will not be ashamed of myself.

0개의 댓글