[CS] 컴퓨터 구조 정리

Wook·2025년 7월 29일
0

TIL | 취업 후

목록 보기
10/10

🧠 컴퓨터 구조, 제대로 이해해보자 – CPU부터 파이프라인까지

“코드를 아무리 잘 짜도, 하드웨어를 이해하지 못하면 한계가 온다.”
— 개발자라면 꼭 알아야 할 컴퓨터의 속사정


📌 들어가며

우리는 매일 코드를 씁니다. 그런데 그 코드가 CPU에서 어떻게 실행되고,
메모리와 어떤 방식으로 소통하며, 왜 속도가 느려지는지에 대해
정확히 알고 있는 사람은 많지 않죠.

이번 포스팅에서는 "컴퓨터 구조"의 핵심 개념들을 개발자의 시선에서 정리해보려 합니다.
단순한 암기가 아닌 이해 중심의 구조 탐험, 지금 시작합니다.


🧩 컴퓨터는 이렇게 생겼다

컴퓨터는 복잡해 보이지만, 본질은 아래 네 가지로 요약됩니다:

  1. CPU (중앙처리장치) – 코드 실행의 주인공
  2. 메모리 (RAM) – 작업 중인 데이터 저장소
  3. 입출력 장치 – 사용자와 소통
  4. 버스 (Bus) – 데이터가 오가는 고속도로

⚙️ CPU 내부 구조 - 생각보다 꽤 정교하다

CPU는 단순 계산기가 아닙니다. 내부 구성은 다음과 같습니다:

  • ALU (Arithmetic Logic Unit): 산술, 논리 연산 수행
  • CU (Control Unit): 명령어 해석 및 제어 신호 생성
  • 레지스터 (Register): 초고속 임시 저장 공간

CPU는 수많은 명령어 사이클(Instruction Cycle)을 통해 코드 실행을 반복합니다.


⏱️ 명령어 사이클 - CPU의 리듬

CPU는 다음 네 단계를 반복하여 명령어를 처리합니다:

  1. Fetch: 메모리에서 명령어를 가져옴
  2. Decode: 명령어 해석
  3. Execute: 연산 수행 (ALU 등)
  4. Write-back: 결과 저장

이 사이클은 수억~수십억 번/초 단위로 반복됩니다.


🏎️ 속도의 비밀 - 메모리 계층 구조

코드가 느린 이유는 대부분 메모리 병목 때문입니다.
CPU는 빠르고, 메모리는 느립니다. 이를 해결하기 위한 구조가 메모리 계층 구조입니다.

계층예시속도용량
레지스터CPU 내부💨 매우 빠름🔹 매우 작음
캐시 (L1~L3)CPU 근처빠름작음
메인 메모리 (RAM)DRAM중간
보조기억장치SSD/HDD느림매우 큼

🔥 캐시 미스(Cache Miss) 발생 시, 속도 저하 심각.


🧮 RISC vs CISC – CPU 명령어 철학의 대결

CPU는 명령어 집합(ISA)을 통해 동작합니다. 대표적인 두 철학은:

  • RISC (Reduced Instruction Set Computer)

    • 단순한 명령어 구성, 빠른 실행
    • ARM, Apple M1/M2, RISC-V
  • CISC (Complex Instruction Set Computer)

    • 복잡한 명령어도 한 번에 처리
    • Intel x86, AMD 계열

🧠 파이프라인 – CPU도 멀티태스킹 한다

CPU는 명령어를 겹쳐서 실행합니다. 이것이 바로 파이프라인(Pipelining)입니다.

각 명령어가 서로 다른 단계에서 동시에 실행됨으로써 CPU 활용도를 극대화

예: 5단계 파이프라인
Fetch → Decode → Execute → Memory → Write-back

🛠 파이프라인 해저드 (Hazards)

  1. 데이터 해저드: 이전 결과가 아직 안 나왔는데 다음 명령이 그 값을 참조
  2. 제어 해저드: 분기(조건문)로 인해 다음 명령 예측 실패
  3. 구조 해저드: 자원 충돌 발생

🎯 해결책: 분기 예측, 레지스터 포워딩, 스톨 삽입 등


⚡ 성능 향상을 위한 구조적 진화

  • 멀티코어: 하나의 칩에 여러 개의 CPU 코어
  • 슈퍼스칼라: 여러 명령어를 동시에 실행
  • 벡터 프로세싱 (SIMD): GPU에서 주로 사용, 행렬/벡터 연산에 강함
  • Out-of-Order Execution: 실행 순서를 바꿔서 효율을 높임

🧬 주소지정 방식 (Addressing Mode)

명령어가 데이터를 어떻게 참조하는지 결정하는 방식들:

  • 직접 주소지정: 명령어에 실제 주소가 있음
  • 간접 주소지정: 주소에 접근해 또 다른 주소를 얻음
  • 상대 주소지정: 현재 PC를 기준으로 오프셋
  • 레지스터 간접: 레지스터에 주소가 저장됨

🛎 인터럽트 – "잠깐, 급한 일부터 처리하자"

인터럽트(Interrupt)는 현재 작업을 멈추고 긴급한 작업을 우선 처리하는 기능입니다.

  • 하드웨어 인터럽트: 키보드, 마우스, 타이머 등
  • 소프트웨어 인터럽트: 시스템 호출, 예외 발생 등
  • 인터럽트 벡터 테이블: 어떤 작업으로 전환할지 정의한 테이블

📈 성능 측정 지표

단순히 "GHz"만으로 성능을 판단하긴 어렵습니다. 아래와 같은 지표들이 함께 사용됩니다:

  • 클럭 속도 (Clock Speed): 1초당 명령 처리 사이클 수
  • CPI (Cycles Per Instruction): 명령 1개당 평균 사이클 수
  • MIPS: 초당 몇 개의 명령어 실행
  • FLOPS: 부동소수점 연산 성능 (과학/AI 분야에 중요)

✅ 마무리 – 하드웨어를 아는 개발자

프로그래밍 실력은 하드웨어 이해에서 완성됩니다.

  • 코드를 성능 좋게 짜고 싶다면
  • 시스템 병목을 이해하고 최적화하고 싶다면
  • JVM, GC, OS 레벨에서 어떤 일이 벌어지는지 알고 싶다면

👉 컴퓨터 구조는 필수입니다.

이 글이 여러분의 CS 기초를 한 층 더 단단하게 만들어주는 계기가 되길 바랍니다.


📚 참고 자료

  • [Computer Organization and Design - Patterson & Hennessy]
  • [CSAPP - Computer Systems: A Programmer’s Perspective]
  • [MIT OCW: Computer System Organization]
  • [Harvard CS50 강의 노트]

🧵 댓글이나 피드백 환영합니다!
다음 편에서는 "운영체제" 또는 "캐시 메모리 심화" 주제를 다뤄볼 예정입니다.

profile
지속적으로 성장하고 발전하는 진취적인 태도를 가진 개발자의 삶을 추구합니다.

0개의 댓글