🧠 컴퓨터 구조, 제대로 이해해보자 – CPU부터 파이프라인까지
“코드를 아무리 잘 짜도, 하드웨어를 이해하지 못하면 한계가 온다.”
— 개발자라면 꼭 알아야 할 컴퓨터의 속사정
📌 들어가며
우리는 매일 코드를 씁니다. 그런데 그 코드가 CPU에서 어떻게 실행되고,
메모리와 어떤 방식으로 소통하며, 왜 속도가 느려지는지에 대해
정확히 알고 있는 사람은 많지 않죠.
이번 포스팅에서는 "컴퓨터 구조"의 핵심 개념들을 개발자의 시선에서 정리해보려 합니다.
단순한 암기가 아닌 이해 중심의 구조 탐험, 지금 시작합니다.
🧩 컴퓨터는 이렇게 생겼다
컴퓨터는 복잡해 보이지만, 본질은 아래 네 가지로 요약됩니다:
- CPU (중앙처리장치) – 코드 실행의 주인공
- 메모리 (RAM) – 작업 중인 데이터 저장소
- 입출력 장치 – 사용자와 소통
- 버스 (Bus) – 데이터가 오가는 고속도로
⚙️ CPU 내부 구조 - 생각보다 꽤 정교하다
CPU는 단순 계산기가 아닙니다. 내부 구성은 다음과 같습니다:
- ALU (Arithmetic Logic Unit): 산술, 논리 연산 수행
- CU (Control Unit): 명령어 해석 및 제어 신호 생성
- 레지스터 (Register): 초고속 임시 저장 공간
CPU는 수많은 명령어 사이클(Instruction Cycle)을 통해 코드 실행을 반복합니다.
⏱️ 명령어 사이클 - CPU의 리듬
CPU는 다음 네 단계를 반복하여 명령어를 처리합니다:
- Fetch: 메모리에서 명령어를 가져옴
- Decode: 명령어 해석
- Execute: 연산 수행 (ALU 등)
- Write-back: 결과 저장
이 사이클은 수억~수십억 번/초 단위로 반복됩니다.
🏎️ 속도의 비밀 - 메모리 계층 구조
코드가 느린 이유는 대부분 메모리 병목 때문입니다.
CPU는 빠르고, 메모리는 느립니다. 이를 해결하기 위한 구조가 메모리 계층 구조입니다.
| 계층 | 예시 | 속도 | 용량 |
|---|
| 레지스터 | CPU 내부 | 💨 매우 빠름 | 🔹 매우 작음 |
| 캐시 (L1~L3) | CPU 근처 | 빠름 | 작음 |
| 메인 메모리 (RAM) | DRAM | 중간 | 큼 |
| 보조기억장치 | SSD/HDD | 느림 | 매우 큼 |
🔥 캐시 미스(Cache Miss) 발생 시, 속도 저하 심각.
🧮 RISC vs CISC – CPU 명령어 철학의 대결
CPU는 명령어 집합(ISA)을 통해 동작합니다. 대표적인 두 철학은:
🧠 파이프라인 – CPU도 멀티태스킹 한다
CPU는 명령어를 겹쳐서 실행합니다. 이것이 바로 파이프라인(Pipelining)입니다.
각 명령어가 서로 다른 단계에서 동시에 실행됨으로써 CPU 활용도를 극대화
예: 5단계 파이프라인
Fetch → Decode → Execute → Memory → Write-back
🛠 파이프라인 해저드 (Hazards)
- 데이터 해저드: 이전 결과가 아직 안 나왔는데 다음 명령이 그 값을 참조
- 제어 해저드: 분기(조건문)로 인해 다음 명령 예측 실패
- 구조 해저드: 자원 충돌 발생
🎯 해결책: 분기 예측, 레지스터 포워딩, 스톨 삽입 등
⚡ 성능 향상을 위한 구조적 진화
- 멀티코어: 하나의 칩에 여러 개의 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 강의 노트]
🧵 댓글이나 피드백 환영합니다!
다음 편에서는 "운영체제" 또는 "캐시 메모리 심화" 주제를 다뤄볼 예정입니다.