Skip to content

컴퓨터 구조 원리

서문

트랜지스터에서 CPU까지 배운 후, 컴퓨터는 어떻게 완전한 시스템을 구성할까? 이전 장에서 우리는 트랜지스터 출발하여 가산기, 레지스터, 연산 장치를 구성하고 최종적으로 CPU 코어를 만들어냈습니다. 하지만 CPU만으로는 부족합니다 — 메모리, I/O 장치와의 협력이 필요하고, 버스로 각 부품을 연결해야 하며, 명령어 체계로 구동해야 합니다. 이 장에서는 CPU의 내부 시각에서 전체 컴퓨터 시스템의 시각으로 전환하여, 폰노이만 구조, 명령어 체계, 저장 계층, 버스와 I/O의 전문 원리를 깊이 이해해 봅시다.

이 글에서 무엇을 배우게 될까요?

이 장을 마치면 다음을 얻게 됩니다:

  • 시스템 관점: CPU, 메모리, I/O가 어떻게 협력하는지 이해 — 더 이상 고립된 하드웨어 애호가가 아닙니다
  • 하드웨어 전문 용어: 명령어 사이클, 파이프라인, CPI, 캐시 적중률 등 핵심 개념 습득
  • 성능 사고: 컴퓨터 구조의 병목과 최적화 수단 이해
  • 후속 학습 기초: 운영체제, 컴퓨터 아키텍처, 임베디드 개발을 위한 전문 기초 확보
내용핵심 개념
제 1장폰노이만 구조프로그램 내장 방식, 5대 구성 요소, 데이터 패스
제 2장명령어 체계명령어 형식, 어드레싱 모드, CISC vs RISC
제 3장CPU 제어 장치제어 유닛, 마이크로 오퍼레이션, 명령어 사이클
제 4장저장 체계캐시, 주기억장치, 가상 메모리, 페이징 기법
제 5장버스와 I/O버스 중재, DMA, 인터럽트 기법

0. 전경도: 컴퓨터 하드웨어 시스템

이전 장 "트랜지스터에서 CPU까지"에서 CPU 내부가 어떻게 작동하는지 — 인출, 해독, 실행, 쓰기까지의 과정을 이해했습니다. 하지만 CPU 자체는 실행 장치일 뿐, 컴퓨터를 진정으로 "사용 가능"하게 만들려면 일련의 주변 부품의 협력이 필요합니다.

Detailed CPU Instruction Cycle Demo
CPU
Control Unit CU
PC256Program Counter
IRInstruction Register
MARMemory Address Register
MDRMemory Data Register
Arithmetic Logic Unit ALU
ACC0Accumulator
General Register File
R00
R10
R20
R30
Address Bus
Data Bus
Control Bus
Main Memory
0x100LOAD R0, [0x200]
 0x101LOAD R1, #7
 0x102ADD R0, R1
 0x103STORE [0x201], R0
Data Area
 0x51242
 0x5130
FetchFetch
DecodeDecode
ExecuteExecute
Write BackWrite Back
Step 0 / 32
Click "Clock Pulse" to step through execution, or "Auto Run" to play continuously.

층별 해부: 컴퓨터 하드웨어 시스템

  • 제1층: CPU 코어 명령어 실행을 담당하며, 제어 장치(제어 신호 발생)와 연산 장치(산술 논리 연산 실행)를 포함합니다

  • 제2층: 레지스터 세트 CPU 내부의 고속 저장 장치로, 범용 레지스터와 전용 레지스터(PC, IR, MAR, MDR 등)를 포함합니다

  • 제3층: 주기억장치 프로그램과 데이터를 저장하는 메모리로, CPU가 주소 버스와 데이터 버스를 통해 접근합니다

  • 제4층: I/O 장치 입출력 장치가 I/O 컨트롤러를 통해 시스템 버스에 연결됩니다

  • 제5층: 시스템 버스 CPU, 메모리, I/O를 연결하는 데이터 통로로, 주소 버스, 데이터 버스, 제어 버스를 포함합니다


1. 폰노이만 구조: 현대 컴퓨터의 "헌법"

1.1 프로그램 내장 방식

1945년, 수학자 존 폰 노이만(John von Neumann)은 획기적인 프로그램 내장(Stored-program) 아키텍처 사상을 제안했습니다. 이 사상은 현대 컴퓨터의 기초를 확립했습니다.

핵심 개념

프로그램 내장: 프로그램 자체가 특수한 데이터로서 일반 데이터와 마찬가지로 메모리에 저장됩니다. CPU는 데이터를 읽고 쓰는 것과 같은 방식으로 메모리에 저장된 프로그램 명령어를 읽고 실행할 수 있습니다.

이것이 의미하는 바:

  • 초기 컴퓨터: 프로그램이 고정 배선으로 구현되었고, 프로그램을 변경하려면 회로를 다시 납땜해야 했습니다
  • 폰노이만 구조: 프로그램이 메모리에 저장되어, 메모리 내용만 수정하면 프로그램을 변경할 수 있습니다

1.2 5대 구성 요소

폰노이만 구조는 컴퓨터를 5개의 핵심 구성 요소로 나눕니다:

CPU Register FileHigh-speed storage inside the CPU
Special Registers
PC
0x00401000
Program counter
IR
0x8B450008
Instruction register
MAR
0x00401000
Memory address register
MDR
0x00000000
Memory data register
ACC
0x0000001A
Accumulator
General Purpose Registers
RAX
0x00000000
Return value
RBX
0x00000000
Base register
RCX
0x00000000
Counter register
RDX
0x00000000
Data register
RSI
0x00000000
Source index
RDI
0x00000000
Destination index
RBP
0x00000000
Base pointer
RSP
0x7FFDE000
Stack pointer
Program Status Word (PSW / FLAGS)
CF0Carry flag
PF0Parity flag
AF0Auxiliary carry
ZF0Zero flag
SF0Sign flag
OF0Overflow flag
Registers vs Memory
FeatureRegisterMemory (RAM)
LocationInside the CPUOutside the CPU
Access speedFastest (< 1ns)Slower (50-100ns)
CapacityTiny (bytes)Large (GB)
RoleHold instructions, operands, and resultsStore programs and data
부품영문기능주요 구성
연산 장치ALU (Arithmetic Logic Unit)산술 및 논리 연산 실행가산기, 시프터, 비교기
제어 장치CU (Control Unit)각 부품의 작업 지휘 및 조정명령어 레지스터, 디코더, 타이밍 발생기
기억 장치Memory프로그램과 데이터 저장메모리 주소 레지스터(MAR), 메모리 데이터 레지스터(MDR)
입력 장치Input정보 입력키보드, 마우스, 스캐너
출력 장치Output정보 출력디스플레이, 프린터

1.3 데이터 패스

데이터 패스(Data Path)는 데이터가 각 기능 부품 사이를 흐르는 경로입니다. CPU 내부에서 데이터 패스는 다음을 연결합니다:

  • 레지스터 세트
  • 산술 논리 장치(ALU)
  • 메모리 데이터 레지스터(MDR)

데이터 패스의 폭(한 번에 전송할 수 있는 비트 수)은 컴퓨터의 성능에 직접적인 영향을 미칩니다.

1.4 폰노이만 병목

폰노이만 구조에는 유명한 성능 병목이 있습니다:

CPU와 메모리 간의 데이터 전송 속도가 CPU의 처리 속도보다 훨씬 낮습니다.

이로 인해 CPU는 자주 "데이터 대기" 상태가 됩니다. 현대 컴퓨터의 많은 최적화 기술이 이 문제를 중심으로 전개됩니다:

최적화 기술원리
캐시(Cache)CPU 근처에 소용량 고속 저장 장치 배치
명령어 파이프라인여러 명령어가 동시에 다른 단계에 있도록 함
슈퍼스칼라동일 클럭 주기에 여러 명령어 발행
멀티코어 병렬여러 CPU 코어가 연산 작업 분담

2. 명령어 체계: CPU와 소프트웨어의 인터페이스

이전 절에서 폰노이만 구조의 핵심 사상을 알게 되었습니다: 프로그램과 데이터는 동일하게 메모리에 저장됩니다. 하지만 이것은 핵심 질문을 하나 제기합니다 — 메모리에 저장된 "프로그램"은 실제로 어떤 모습일까요? CPU는 어떻게 이해할까요?

그 답이 바로 명령어 체계(Instruction Set Architecture, ISA)입니다. CPU를 하나의 서비스에 비유하면, 명령어 체계는 그 API 문서입니다 — CPU가 이해할 수 있는 모든 명령, 각 명령의 형식, 명령이 조작할 수 있는 데이터 범위를 정의합니다. 여러분이 작성하는 모든 코드는 결국 컴파일러에 의해 이 "API"의 호출 시퀀스로 번역됩니다.

2.1 코드에서 명령어까지: 한 줄 코드의 번역 여정

먼저 전체적인 인식을 가져봅시다: 여러분이 편집기에서 작성하는 코드와 CPU가 실제로 실행하는 것 사이에는 여러 층의 번역이 있습니다.

🔗 From Code to Instructions: One Line Through the Translation Pipeline

Click each stage to see how source code becomes CPU-executable instructions

1Source code
int a = 10 + 5;
This is high-level code written in an editor. It is easy for humans to read, but the CPU does not understand int or the + operator directly.
2Compiler emits assembly
MOV  R1, #10    ; put 10 into register R1
MOV  R2, #5     ; put 5 into register R2
ADD  R3, R1, R2 ; R3 = R1 + R2
STORE R3, [a]   ; store the result at variable a
3Assembler emits machine code
0001 0001 0000 1010  → MOV R1, #10
0001 0010 0000 0101  → MOV R2, #5
0010 0011 0001 0010  → ADD R3, R1, R2
0100 0011 1000 0000  → STORE R3, [a]
4CPU executes instructions
Clock 1: fetch → decode → execute MOV R1, #10
Clock 2: fetch → decode → execute MOV R2, #5
Clock 3: fetch → decode → execute ADD R3, R1, R2
Clock 4: fetch → decode → execute STORE R3, [a]
💡 Key idea
An instruction set is the CPU API: it defines every command the CPU understands. A compiler translates your high-level language into calls to that API. Different CPUs, such as x86 and ARM, have different instruction sets, just as different services expose different APIs.

이 번역 체인은 명령어 체계를 이해하는 핵심입니다:

계층내용누가 이해할 수 있는가
고급 언어int a = 10 + 5;인간
어셈블리 언어MOV R1, #10 / ADD R3, R1, R2인간(훈련 필요)
기계어0001 0001 0000 1010CPU

이 체인을 이해해야 하는 이유

  • 컴파일 에러를 볼 때, 오류가 "고급 언어 → 어셈블리" 단계에서 발생했다는 것을 알 수 있습니다
  • 런타임 크래시를 볼 때, CPU가 명령어를 실행하는 단계에서 문제가 발생했음을 알 수 있습니다
  • 성능 최적화를 이해할 때, 컴파일러가 "번역" 과정에서 어떤 최적화를 수행하는지 알 수 있습니다
  • CPU 아키텍처 선택 시(x86 vs ARM), 차이가 "명령어 집합 API"에 있음을 알 수 있습니다

2.2 하나의 명령어는 어떤 모습인가?

코드가 명령어로 번역된다는 것을 알게 되었으니, 다음 질문은: 하나의 명령어의 내부 구조는 무엇인가?

각 기계 명령어는 본질적으로 이진수 문자열이지만, 엄격한 내부 형식이 있습니다. 가장 핵심적인 두 부분:

  • 연산 코드(Operation Code, Opcode): CPU에게 '무엇을 할 것인가'를 알려줍니다 — 덧셈? 점프? 메모리 읽기?
  • 피연산자(Operand): CPU에게 '누구에게 할 것인가'를 알려줍니다 — 어느 레지스터? 어느 메모리 주소? 어떤 상수?

문장에 '동사 + 목적어' 구조가 있듯, 명령어에도 '연산 + 대상' 구조가 있습니다:

명령어:  ADD  R3, R1, R2
       ───  ──────────
       연산 코드  피연산자
       (덧셈 수행) (R3 = R1 + R2)

피연산자의 수에 따라 명령어 형식은 단순한 것부터 복잡한 것까지 네 가지로 나뉩니다:

Machine Instruction FormatOpcode + operands = machine instruction
Opcode8 bits
Destination8 bits
Source 18 bits
Source 28 bits
Example instruction
01101100 00000001 00000010 00000011
Result goes to a new destination without changing sources
Three-address format
Three addresses identify the destination and two source operands separately. The result goes into the destination without modifying the sources.
Common examples
ADD R1, R2, R3R1 = R2 + R3
SUB R1, R2, R3R1 = R2 - R3
MUL R1, R2, R3R1 = R2 × R3
Common opcodes
00000000NOPNo operation
00000001MOVMove data
00000010ADDAddition
00000011SUBSubtraction
00000100MULMultiplication
00000101DIVDivision
00000110ANDLogical AND
00000111ORLogical OR
00001000NOTLogical NOT
00001001XORExclusive OR
00001010SHLShift left
00001011SHRShift right
00001100JMPUnconditional jump
00001101JEJump if equal
00001110JNEJump if not equal
00001111CALLCall subroutine
00010000RETReturn
00010001PUSHPush stack
00010010POPPop stack
00010011LOADLoad from memory
00010100STOREStore to memory
형식구조예시사용 시나리오
0주소연산 코드만RET(복귀)스택 컴퓨터, 피연산자가 스택 최상단에 암시
1주소연산 코드 + 1개 주소INC R1(R1을 1 증가)단일 피연산자 연산
2주소연산 코드 + 2개 주소MOV R1, R2가장 많이 사용, 데이터 전송 및 연산
3주소연산 코드 + 3개 주소ADD R3, R1, R2원본 피연산자를 파괴하지 않음

왜 이렇게 많은 형식이 있을까요?

이것은 공간과 유연성의 트레이드오프입니다. 0주소 명령어는 가장 짧지만(메모리 절약) 추가 스택 조작이 필요하고, 3주소 명령어는 가장 유연하지만(원본 데이터 불변) 더 많은 비트를 차지합니다. 서로 다른 CPU 아키텍처는 서로 다른 명령어 형식 조합을 선택합니다.

2.3 CPU는 어떻게 데이터를 찾을까? — 어드레싱 모드

명령어가 CPU에게 '덧셈을 하라'고 지시하지만, 덧셈의 두 수는 어디에 있을까요? 명령어에 직접 쓰여 있을 수도 있고, 레지스터에 있을 수도 있고, 메모리의 어떤 주소에 있을 수도 있습니다. 어드레싱 모드는 CPU에게 '어디에서 피연산자를 찾을 것인가'를 알려주는 규칙입니다.

일상에서 '사람을 찾는다'는 것에 비유해 봅시다:

어드레싱 모드비유명령어 예시설명
즉치 어드레싱그 사람이 당신 앞에 서 있음MOV R1, #100데이터가 명령어에 직접 포함, 가장 빠름
레지스터 어드레싱내선 전화로 동료에게 연락MOV R1, R2데이터가 CPU 내부 레지스터에 있음, 매우 빠름
직접 어드레싱문패 번호를 알고 직접 방문MOV R1, [0x1000]명령어에 메모리 주소가 포함됨
간접 어드레싱안내 데스크에 "홍길동이 어느 방인가요?"라고 묻기MOV R1, [R2]레지스터에 주소가 저장되어 있어 한 번 더 조회 필요
색인 어드레싱"3호동 + 5층"으로 방 계산MOV R1, [R2+10]베이스 주소 + 오프셋, 배열 접근에 사용
Addressing ModesHow an instruction finds operand locations
Immediate addressingImmediate Addressing
Definition
The operand is embedded directly in the instruction and is immediately available.
Instruction format
MOV R1, #100
Example
MOV R1, #100 ; R1 = 100
Immediate value 100 is stored directly in the instruction, so no register or memory lookup is needed.
Execution process
1CPU reads immediate value 100 directly from the instruction
2Write the immediate value into target register R1
3Execution completes without extra memory access
Characteristics
SpeedFast
FlexibilityLow
Addressing mode comparison
Addressing modeFormatSpeedUse case
Immediate addressingMOV R1, #100FastestConstant assignment and initialization
Register addressingMOV R1, R2FastestRegister-to-register data transfer
Direct addressingMOV R1, [100]Relatively fastAccessing global variables
Indirect addressingMOV R1, [R2]Relatively fastPointers and array traversal
Indexed addressingMOV R1, [R2 + R3]Relatively fastArray access and loops
Based addressingMOV R1, [R2 + 100]Relatively fastStruct fields and function parameters
Relative addressingJMP LABELFastestLoops and conditional branches

왜 이렇게 많은 어드레싱 모드가 필요할까요?

서로 다른 시나리오에 서로 다른 '데이터 찾기' 전략이 필요합니다:

  • 상수 할당(x = 100) → 즉치 어드레싱, 데이터가 명령어 안에 있음
  • 변수 연산(a + b) → 레지스터 어드레싱, 데이터가 이미 레지스터에 로드됨
  • 배열 접근(arr[i]) → 색인 어드레싱, 베이스 주소 + 인덱스 오프셋
  • 포인터 조작(*ptr) → 간접 어드레싱, 레지스터에 주소가 저장되어 있음

arr[i]를 작성할 때 어드레싱 모드를 생각하지 않지만, 컴파일러가 자동으로 가장 적합한 방식을 선택합니다.

2.4 CPU의 능력 목록 — 명령어 분류

명령어의 형식과 어드레싱 모드를 알게 되었으니, 마지막 질문: CPU는 실제로 어떤 일을 할 수 있는가?

모든 명령어는 6대 유형으로 분류될 수 있으며, 컴퓨터가 할 수 있는 모든 작업을 포괄합니다:

유형하는 일대표 명령어대응하는 코드
데이터 전송데이터 이동MOV, LOAD, STORElet x = y, 함수 매개변수 전달
산술 연산사칙연산ADD, SUB, MUL, DIVa + b, count++
논리 연산비트 조작AND, OR, NOT, XORflags & 0xFF, 권한 판단
시프트 연산좌우 이동SHL, SHRx << 2(4를 곱하는 것과 동일)
제어 이동점프 및 호출JMP, CALL, RETif, for, 함수 호출
입출력외부 장치 통신IN, OUT키보드 읽기, 화면 쓰기

핵심 통찰

여러분이 작성하는 모든 코드 — 아무리 복잡한 비즈니스 로직, 아무리 화려한 UI 애니메이션 — 은 결국 이 6가지 기본 작업의 조합으로 분해됩니다. CPU의 "지능"은 복잡한 일을 할 수 있다는 것이 아니라, 이 간단한 작업들을 초당 수십억 번의 속도로 실행할 수 있다는 데 있습니다.

2.5 두 가지 설계 철학: CISC vs RISC

명령어 체계 설계에는 근본적인 분기가 있습니다: 각 명령어를 가능한 한 강력하게 만들 것인가, 아니면 가능한 한 단순하게 만들 것인가?

이 분기는 두 진영을 만들어냈고, 여러분이 오늘 사용하는 모든 기기에 직접적인 영향을 미칩니다:

⚔️ Two Design Philosophies: CISC vs RISC

Click a comparison dimension to see the core differences between instruction set styles

Thousands of complex instructions
Instruction count
Tens to hundreds of streamlined instructions
One instruction can do many things
Single instruction
One instruction does one thing
Variable length (1-15 bytes)
Instruction length
Fixed length, often 4 bytes
Complex instructions take multiple cycles
Execution speed
Most instructions complete in one cycle
Higher
Power use
Lower
Harder to optimize because lengths vary
Pipeline
Easier to optimize because instructions are regular
Lighter because hardware does more
Compiler burden
Heavier because software optimizes more
🌍 Real-world choices
💻 Your computerx86 (CISC)Compatible with decades of software
📱 Your phoneARM (RISC)Low power consumption and longer battery life
🍎 Apple SiliconARM (RISC)High performance per watt reshaped laptops
🔬 RISC-V boardRISC-V (RISC)Open and royalty-free for IoT and education

비유로 이해해 봅시다:

  • CISC는 스위스 아미 나이프: 칼 한 자루에 가위, 병따개, 드라이버가 통합... 기능은 많지만 각각이 반드시 최고는 아닙니다
  • RISC는 전문 도구 세트: 각 도구는 한 가지 일만 하지만, 빠르고 잘합니다

왜 여러분의 스마트폰은 ARM을, 컴퓨터는 x86을 사용할까요?

  • x86(CISC)은 PC와 서버 시장을 40년간 지배하며 방대한 소프트웨어 생태계를 축적했습니다. 아키텍처 교체는 모든 소프트웨어의 재컴파일을 의미합니다
  • ARM(RISC)은 저전력 소비의 장점으로 모바일 기기를 지배합니다. 휴대폰 배터리가 작아 매 밀리와트가 소중합니다
  • Apple Silicon은 RISC도 고성능을 달성할 수 있음을 증명했습니다 — M 시리즈 칩이 성능과 전력 소비 모두에서 x86 경쟁작을 동시에 능가합니다
  • RISC-V는 오픈 소스 RISC 아키텍처로, IoT, 교육, AI 칩 분야에서 빠르게 부상하고 있습니다

소결: 명령어 체계는 소프트웨어와 하드웨어를 연결하는 다리입니다. 여러분이 작성한 코드는 컴파일러를 통해 명령어로 번역되고, 명령어는 연산 코드와 피연산자를 통해 CPU에게 무엇을 할지, 누구에게 할지 알려주며, 어드레싱 모드는 데이터가 어디에서 오는지를 결정합니다. 서로 다른 명령어 집합 설계(CISC/RISC)는 CPU의 성능 특성과 적용 시나리오를 결정합니다.

이제 명령어의 '정적 구조' — 어떤 모습인지, 어떤 유형이 있는지 — 를 알게 되었습니다. 다음 질문은: CPU 내부에서 이 명령어들을 어떻게 단계별로 실행할까요? 이것이 제어 장치의 역할입니다.


3. 제어 장치: CPU의 "지휘 센터"

3.1 제어 장치의 구성

제어 장치는 CPU의 "두뇌"로, 각 부품이 명령어 요구에 따라 작업하도록 조정합니다:

How the Controller WorksHow control signals coordinate CPU components
Control Unit CU
Instruction Register IR
Instruction Decoder
Timing Generator
Output control signals:
PC→MAR
MEM→MDR
MDR→IR
IR→ID
ALU→ACC
ACC→MDR
PC
Program Counter
MAR
Address Register
Memory
Main Memory
MDR
Data Register
IR
Instruction Register
ID
Decoder
ALU
Arithmetic Logic Unit
ACC
Accumulator
Current microinstruction
Core controller concepts
Control signals:Electrical signals emitted by the controller to control each component on the data path.
Timing:CPU operations advance by clock ticks; each tick performs specific micro-operations.
Hardwired vs microprogrammed:Hardwired controllers are fast but complex; microprogrammed controllers are flexible but slightly slower.
구성 요소기능
프로그램 카운터(PC)다음 명령어의 주소 저장
명령어 레지스터(IR)현재 실행 중인 명령어 저장
명령어 디코더명령어의 연산 코드와 피연산자 분석
타이밍 발생기클럭 비트 신호를 생성하여 각 부품의 타이밍 제어
마이크로 오퍼레이션 시퀀스 생성기명령어 실행에 필요한 일련의 제어 신호 생성
Program Status Word (PSW)The CPU status indicators
CF
0
Carry flag
PF
0
Parity flag
AF
0
Auxiliary carry
ZF
0
Zero flag
SF
0
Sign flag
TF
0
Trap flag
IF
1
Interrupt flag
DF
0
Direction flag
OF
0
Overflow flag
How operation results affect flags
Result:
0
CF:0PF:0AF:0ZF:0SF:0TF:0IF:1DF:0OF:0
Typical flag uses
🔀
Conditional jumps
JE, JNE, JG, JL and similar instructions decide jumps based on ZF, SF, and OF.
Arithmetic
Multi-word arithmetic uses CF for carry and OF for signed overflow.
🔄
Loop control
Loop instructions often use ZF to detect the loop ending condition.

3.2 명령어 사이클

CPU가 하나의 명령어를 실행하려면 완전한 명령어 사이클을 거쳐야 하며, 일반적으로 다음을 포함합니다:

  1. 인출 사이클(Fetch): 메모리에서 명령어를 읽어 IR로 가져옴
  2. 해독 사이클(Decode): 명령어의 의미 분석
  3. 실행 사이클(Execute): 연산 수행
  4. 메모리 접근 사이클(Memory Access): 메모리 접근이 필요한 경우 메모리에 접근
  5. 쓰기 사이클(Write Back): 결과를 레지스터나 메모리에 기록

3.3 마이크로 오퍼레이션

마이크로 오퍼레이션은 제어 신호에 의해 구동되는 가장 기본적인 작업입니다. 예를 들어, "인출" 단계는 다음 마이크로 오퍼레이션으로 분해될 수 있습니다:

클럭 비트마이크로 오퍼레이션제어 신호
T1PC → MARPCout, MARin
T2MEM → MDRMEMout, MDRin
T3MDR → IRMDRout, IRin
T4PC + 1 → PCPC+1, PCin

3.4 하드와이어드 vs 마이크로그램 제어 장치

특성하드와이어드 제어 장치마이크로그램 제어 장치
구현 방식조합 논리 회로마이크로 명령어 시퀀스(펌웨어)
속도빠름약간 느림
설계 난이도복잡비교적 간단
유연성낮음(변경 시 회로 재설계 필요)높음(마이크로그램 수정만으로 가능)
대표적 응용RISC 프로세서초기 CISC 프로세서

4. 저장 체계: 왜 캐시가 필요한가?

4.1 저장 계층 구조

컴퓨터의 저장 장치는 피라미드 구조를 형성합니다:

Storage HierarchyFrom fastest to slowest, smallest to largest
Registers
Fastest
Smallest (KB)
Cache
Very fast
Small (MB)
Memory
Fast
Medium (GB)
Disk
Slow
Large (TB)
Network/Cloud
Slowest
Unlimited
Detailed comparison
Storage levelAccess timeTypical capacityCost
Registers< 1 nsA few KBHighest
L1 cache~1 ns64 KBVery high
L2 cache~3 ns256 KBHigh
L3 cache~10 ns8 MBMedium
Memory~100 ns8-32 GBMedium-low
SSD~100 μs256 GB-2 TBLow
HDD~10 ms1-10 TBLowest
Locality principle
Programs tend to access recently accessed locations (temporal locality) and nearby locations (spatial locality)
By exploiting locality, caches can significantly improve performance.
계층저장 유형접근 시간전형적 용량위치
레지스터SRAM<1ns수 KBCPU 내부
L1 캐시SRAM~1ns32-64KBCPU 코어 근처
L2 캐시SRAM~3-10ns256KB-1MBCPU 칩 내부
L3 캐시SRAM~10-20ns2-16MBCPU 칩 내부/공유
주기억장치(메모리)DRAM~50-100ns8-64GB메인보드
SSDFlash~10-100μs256GB-2TB메인보드
HDD자기 디스크~5-10ms1-10TB케이스 내부

속도 차이의 비유

CPU가 L1 캐시에 접근하는 것을 책상 위에서 종이 한 장을 꺼내는 것에 비유한다면:

  • 메모리 접근 → 엘리베이터를 타고 아래 편의점에 가서 종이를 사 오는 것
  • SSD 접근 → 차를 몰고 다른 도시에 가서 종이를 사 오는 것
  • HDD 접근 → 비행기를 타고 다른 나라에 가서 종이를 사 오는 것

속도 차이는 수백만 배에 달할 수 있습니다!

4.2 캐시 원리

캐시(Cache)는 CPU와 메모리 사이의 고속 저장 장치로, 그 핵심 사상은 두 가지 지역성 원리에 기반합니다:

지역성 원리

  • 시간 지역성: 방금 접근한 데이터는 곧 다시 접근될 가능성이 높습니다
  • 공간 지역성: 어떤 데이터가 접근되면 그 근처의 데이터도 곧 접근될 가능성이 높습니다

캐시의 작동 방식

  1. 적중(Hit): CPU가 원하는 데이터가 캐시에 있으면 바로 읽기
  2. 미스(Miss): 데이터가 캐시에 없으면 메모리에서 로드
적중률 = 적중 횟수 / 총 접근 횟수
평균 접근 시간 = 적중률 × 캐시 시간 + (1-적중률) × 메모리 시간
Cache PrinciplesThe bridge between CPU and memory
CPU core
L1 cache
64 KB~1ns
L2 cache
256 KB~5ns
L3 cache
8 MB~15ns
Main memory
16 GB~100ns
Cache operation demo
Operation log
Why does cache work? Locality principle
⏱️
Temporal locality
Recently accessed data is likely to be accessed again.
Variables inside loops
📦
Spatial locality
After one item is accessed, nearby data is likely to be accessed.
Array traversal and sequential execution
Cache mapping methods
Each memory block maps to exactly one cache line.
SpeedFastest
Hit rateLower
Implementation complexityLowest
Hit-rate calculation
Average access time = H × Tc + (1-H) × Tm
2 ns
100 ns
90%
Average access time = 12 ns

4.3 캐시 매핑 방식

방식원리장점단점
직접 매핑각 메모리 블록이 하나의 고정 위치에만 배치단순하고 빠름충돌률이 높음
세트 연관각 메모리 블록이 N개 위치에 배치 가능(N-way)속도와 적중률의 균형구현이 복잡
완전 연관임의의 위치에 배치가장 낮은 충돌률구현이 어려움(모든 태그 비교 필요)

4.4 가상 메모리

가상 메모리는 운영체제가 제공하는 중요한 추상화입니다:

  • 각 프로세스는 자신이 완전한 가상 주소 공간을 가지고 있다고 생각합니다
  • 운영체제는 가상 주소를 물리 주소로 번역합니다
  • 자주 사용하지 않는 페이지는 디스크로 스왑 아웃될 수 있습니다(스왑 공간)

가상 메모리의 비유

가상 메모리를 호텔의 방 관리에 비유해 봅시다:

  • 당신(프로세스)은 건물 전체가 자신의 것이라고 생각합니다
  • 실제로 호텔(OS)은 현재 필요한 방만 할당합니다
  • 사용하지 않는 방은 창고(디스크)로 "스왑 아웃"됩니다
  • 필요한 방은 언제든지 "스왑 인"할 수 있습니다

5. 버스와 I/O: 컴퓨터의 "혈관"

5.1 시스템 버스

버스(Bus)는 컴퓨터의 각 부품을 연결하는 데이터 통로입니다:

Computer Bus SystemAddress bus, data bus, and control bus
CPU
Control unit
ALU
Address bus32 bits
Data bus64 bits
Control busControl signal
Main memory
0x0
0x1
0x2
0x3
0x4
0x5
0x6
0x7
Operation flow
Bus concepts
Address bus
CPU sends memory addresses over a one-way path.
Data bus
Transfers actual data in both directions.
Control bus
Transfers read/write and other control signals.
버스 유형기능방향전형적 폭
주소 버스메모리 주소 전송단방향(CPU→메모리)32비트/64비트
데이터 버스데이터 전송양방향32비트/64비트
제어 버스제어 신호 전송양방향다중 신호 라인

5.2 버스 중재

여러 장치가 동시에 버스 사용을 요청할 때, 누가 먼저 사용할지 결정하는 중재 메커니즘이 필요합니다:

중재 방식설명
집중 중재중앙 중재기가 통일 결정
분산 중재각 장치가 자체 협상

5.3 I/O 장치 접근 방식

방식원리장점단점
프로그램 폴링CPU가 I/O 상태를 순환 검사단순함CPU 활용률 낮음
인터럽트 방식I/O 완료 후 CPU에 능동 통지CPU가 병렬 작업 가능인터럽트 처리에 오버헤드 발생
DMAI/O 장치가 메모리에 직접 접근CPU가 전혀 참여하지 않음DMA 컨트롤러 필요
I/O Method ComparisonProgrammed I/O · Interrupt-driven I/O · DMA
Programmed I/OProgrammed I/O
Workflow
1CPU polls the I/O device status
2Device busy? Keep waiting
3Device ready, send read/write command
4CPU reads or writes data byte by byte
5Check whether transfer is complete
6If incomplete, keep polling
CPU involvementHigh
SpeedSlow
ComplexityLow
Three I/O methods compared
FeatureProgrammed I/OInterrupt-driven I/ODMA
CPU involvementInvolved throughoutOnly handles interruptsAlmost uninvolved
Data transferCPU moves each byteCPU moves each wordDevice transfers directly to memory
ProsSimple and flexible controlHigh CPU efficiencyCPU is fully freed
ConsLow CPU utilizationInterrupt overheadComplex hardware
Best forSimple or low-speed devicesLow/medium-speed devicesHigh-speed bulk transfer

5.4 DMA 원리

DMA(Direct Memory Access, 직접 메모리 접근)은 I/O 장치가 메모리와 직접 데이터를 교환할 수 있게 합니다:

How Networks ConnectThe complete path from sending to receiving
💻
Sender
192.168.1.100
📧
Mail app
📧
Application layer
Mail software creates the message content
🔐
Transport layer
TCP adds port numbers and sequence numbers
🌐
Network layer
IP adds source and destination addresses
🔌
Data link layer
Ethernet adds MAC addresses
Physical layer
Convert to electrical signals and send
🖥️
Receiver
192.168.1.200
📧
Mail app
Data encapsulation process
7Application layer
Message content: "Hello!"
6Presentation layer
Encoding: UTF-8
5Session layer
Session ID: sess_123
4Transport layer
TCP header: port 25
3Network layer
IP header: 192.168.1.100 → 192.168.1.200
2Data link layer
Ethernet frame: MAC address
1Physical layer
Bitstream: 01010101...
Network protocol stack (OSI model)
Sender
Application layer (HTTP, SMTP)
Transport layer (TCP, UDP)
Network layer (IP)
Data link layer (Ethernet)
Physical layer (electrical signals)
Receiver
Application layer (HTTP, SMTP)
Transport layer (TCP, UDP)
Network layer (IP)
Data link layer (Ethernet)
Physical layer (electrical signals)
  • DMA 없이: CPU가 데이터 전송에 전 과정 참여, CPU가 다른 작업을 할 수 없음
  • DMA 있이: CPU가 DMA 컨트롤러에게 "어디서 어디로, 얼마나 전송할지" 알려준 후 다른 작업 실행, DMA 완료 후 CPU에 통지

DMA의 비유

이것은 배달 주문과 같습니다:

  • DMA 없이: 직접 마트에 가서 식재료를 사고, 집에 돌아와 씻고, 요리함(전 과정 참여)
  • DMA 있이: 전화로 주문하고, 배달원이 부엌까지 직접 배달(다른 사람이 대신 처리, 마지막에 "수령"만 하면 됨)

5.5 인터럽트 기법

인터럽트는 컴퓨터 시스템에서 매우 중요한 메커니즘입니다:

  1. I/O 장치가 작업을 완료한 후 CPU에 인터럽트 요청 전송
  2. CPU가 명령어를 실행 중이면, 현재 명령어 완료 후 인터럽트에 응답
  3. CPU가 현재 상태를 저장하고 인터럽트 처리 루틴으로 점프
  4. 처리 완료 후 상태를 복원하고 계속 실행

6. CPU 성능 최적화: 파이프라인 기술

6.1 명령어 파이프라인

명령어 파이프라인은 CPU의 효율을 극대화하는 병렬 기술입니다:

CPU Instruction PipelineFive stages: Fetch → Decode → Execute → Memory → Write Back
Fetch(IF)
Decode(ID)
Execute(EX)
Memory(MEM)
Write Back(WB)
ADD R1,R2,R3
SUB R4,R1,R5
LOAD R6,[R4]
STORE R6,[R7]
AND R8,R1,R6
Total cycles0
Completed instructions0
CPI0
Pipeline principle

Sequential execution: each instruction finishes before the next starts, so N instructions require N × 5 cycles.

Pipeline execution: multiple instructions occupy different stages at once; ideally CPI ≈ 1.

파이프라인의 작동 원리

순차 실행(5개 명령어, 15 사이클):
명령어1: IF→ID→EX→MEM→WB
명령어2:            IF→ID→EX→MEM→WB
명령어3:                         IF→ID→EX→MEM→WB
...

파이프라인 실행(5개 명령어, 9 사이클):
명령어1: IF→ID→EX→MEM→WB
명령어2:    IF→ID→EX→MEM→WB
명령어3:       IF→ID→EX→MEM→WB
...

이상적으로 N개 명령어의 CPI(명령어당 클럭 사이클 수) ≈ 1

6.2 파이프라인 해저드

파이프라인은 성능을 향상시킬 수 있지만, 해저드(Hazard) 문제도 가져옵니다:

유형원인해결책
구조적 해저드하드웨어 자원 충돌하드웨어 추가/실행 시간 조정
데이터 해저드뒤의 명령어가 앞의 결과를 필요로 함데이터 포워딩/버블/스케줄링
제어 해저드분기 명령어가 실행 흐름 변경지연 슬롯/분기 예측

7. 요약: 컴퓨터는 어떻게 "작동"하는가?

전문 용어로 전체 과정을 연결해 봅시다:

프로그램이 시작되면, 운영체제는 실행 파일을 디스크에서 메모리로 로드합니다. CPU의 인출 장치(IF)가 주소 버스를 통해 메모리에서 명령어를 읽어 명령어 레지스터(IR)로 가져옵니다. 제어 장치가 명령어를 해독(ID)하여 연산 유형을 식별한 후 해당 제어 신호를 발생시킵니다. 연산 장치(EX)가 산술 논리 연산을 수행하고, 메모리 접근이 필요한 경우 데이터 버스를 통해 메모리에 접근(MEM)하며, 마지막으로 결과를 레지스터나 메모리에 기록(WB)합니다. 전체 과정은 클럭에 의해 구동되며, 제어 장치가 발생시키는 마이크로 오퍼레이션 시퀀스가 각 부품이 질서 있게 작동하도록 조정합니다.


더 읽어보기

주제추천 심화 학습 내용
컴퓨터 아키텍처"컴퓨터 구성 및 설계: 하드웨어/소프트웨어 인터페이스" - Patterson & Hennessy
CPU 마이크로아키텍처"컴퓨터 시스템의 이해" - Bryant & O'Hallaron
명령어 집합 아키텍처ARMv8 아키텍처 매뉴얼, Intel x64 매뉴얼
캐시 원리캐시 일관성 프로토콜(MESI), 캐시 쓰기 정책
운영체제다음 장 "운영체제"

다음 단계

이제 컴퓨터 구조 원리의 전문 지식을 마스터했습니다. 다음으로 계속 학습할 수 있습니다:

  • 운영체제: 프로그램이 운영체제 위에서 어떻게 실행되는지, 프로세스, 스레드, 메모리 관리가 어떻게 구현되는지 이해
  • 데이터의 인코딩, 저장과 전송: 데이터가 컴퓨터에서 어떻게 표현되는지 심층 이해