───────────────────────────────
│ ⬆️ Application Layer │
│ (C/Python, Data Structure, etc)│
│ • Abstract Data Type (ADT) │
│ - State / Operation │
│ ex) Stack, Queue, Tree │
───────────────────────────────
│ ⬆️ Operating System │
│ • Virtual Memory Abstraction │
│ - Memory Management │
│ - Page Table, Page Fault │
│ • Process / Scheduler │
│ • File System, I/O Management │
───────────────────────────────
│ ⬆️ MMU │
│ (Memory Management Unit) │
│ • Virtual → Physical Address │
│ • Handles TLB / Page Faults │
───────────────────────────────
│ ⬆️ Memory Hierarchy │
│ • Cache (L1/L2/L3 - SRAM) │
│ • Main Memory (DRAM) │
│ • Storage (SSD/HDD) │
│ • Locality (Temporal/Spatial) │
│ → 속도 vs 비용 vs 용량 │
───────────────────────────────
│ ⬆️ CPU (ISA + Control Unit) │
│ • Instruction Fetch/Decode │
│ • Register File │
│ • ALU (Arithmetic Logic Unit) │
│ • PC (Program Counter) │
│ • Instruction Set Architecture│
───────────────────────────────
│ ⬆️ Transistor Logic │
│ • Logic Gates (AND/OR/NOT) │
│ • Flip-Flop, Latch │
│ • Clock Signal │
│ • State Machines │
───────────────────────────────
│ ⬆️ Physical Hardware │
│ • Silicon / Fabrication │
│ • Power, Heat, Material Limit │
───────────────────────────────
🧠 "컴퓨터 시스템이라는 환상 구조물의 총 설계도"
하드웨어에서 추상 데이터 타입까지 — 현실의 재료로 환상을 짜내는 마법
🪨 1. 물리 계층 (Physical Layer)
재료는 한정돼있고 느리고 비싸다. 여기서 출발해야 함.
- Transistor
⮕ 전자 스위치. 참/거짓, 0/1의 시작. - SRAM / DRAM
- SRAM: 빠르고 비쌈. (캐시용)
- DRAM: 느리고 쌈. (메인메모리용)
- 둘 다 전류로 상태(state)를 유지함. DRAM은 refresh 필요.
- Storage (SSD/HDD)
⮕ 매우 느리지만 대용량. 마지막 보루.
🔄 2. 레지스터 & 캐시 계층 (CPU 내부)
CPU가 직접 접근 가능하며 가장 빠른 속도. 용량은 작다.
- Register (레지스터)
- 가장 빠름, 상태(state)를 저장하는 작은 창고.
- 연산의 중간값, 상태값, 변수 저장.
- Cache (L1, L2, L3)
- CPU와 DRAM 사이에서 지역성(Locality) 기반으로 캐시함.
- Hardware-managed (OS 관여 불가), 나노초급 환상의 시작점.
🔧 3. 메모리 계층 (DRAM) + 주소공간 가상화
DRAM은 실제 주소 공간, 그러나 프로그램은 "가상 주소"만 봄.
- Virtual Memory (가상 메모리)
- 프로그램은 0x00000000부터 시작한다고 착각함.
- 진짜 물리 주소는 MMU가 대응시켜줌.
- MMU (Memory Management Unit)
- 가상 주소 ➝ 실제 물리 주소로 매핑.
- TLB 캐시를 통해 주소 변환을 빠르게 처리함.
- Page Table로 가상 ➝ 물리 mapping 관리
- Page Fault
- 메모리에 해당 페이지가 없을 때 발생.
- OS가 개입해서 디스크에서 적재(=느려짐), 회복.
- 여기서부터 OS 개입 가능!
🧠 4. 운영체제 (Operating System)
제한된 자원을 잘 분배해주는 관리자. 환상의 핵심 조력자.
- Process/Thread 관리
- 타이머 인터럽트 기반으로 시분할 ➝ 마치 여러 프로세스가 동시에 도는 환상.
- Page Replacement (예: LRU)
- DRAM이 부족하면 덜 쓰이는 페이지를 쫓아냄.
- 시스템 콜 + 인터럽트
- 하드웨어와 상호작용하게 해주는 게이트.
- DRAM <-> Disk I/O 관리
- 접근 최소화해서 속도 trade-off 줄이기 위한 전략 관리.
🔣 5. Instruction Set Architecture (ISA)
하드웨어와 소프트웨어 사이 약속된 인터페이스
- Instruction
- MOV, ADD, JMP 등.
- 결국 CPU는 이것만 이해함.
- Registers, ALU, Control Unit
- 인스트럭션 실행하는 내부 하드웨어.
- ALU는 계산, 제어 유닛은 해석 및 흐름 제어.
🧰 6. Abstract Data Type (ADT)
사용자 입장에서는 이제 자료구조와 연산만 보임. 현실 감각 없음.
- State + Operation
- 상태(state): 내부 구조 (예: 리스트 내부 노드들)
- 연산(operation): 추상적 기능 (예: push, pop, insert)
- Ex) Stack
- state: 배열 or 연결 리스트
- operation: push(), pop(), peek()
🌐 7. Application + Interface Layer
진짜 사용자가 조작하는 인터페이스. 아래에서 흘러온 모든 것을 포장하는 겉면.
- main() 함수부터 GUI, CLI까지.
- 우리는 절대 MMU나 Page Fault를 직접 보지 않음.
- 오직 그 환상 위에 살고 있을 뿐…
🔮 이 모든 걸 가능케 하는 핵심 마법들:
개념마법의 역할
Locality (지역성) | "미래는 예측할 수 없지만 과거는 반복된다" |
Virtualization | "물리적 한계를 가리자. 환상을 만들자." |
Cache | "빠른 것처럼 보이게 하자." |
MMU | "주소는 가짜야. 진짜는 나만 알아." |
Page Fault | "준비 안 된 걸 처리하는 나의 방식" |
OS | "모든 걸 조율하는 마에스트로" |
ADT | "상태와 연산만 보여줘. 구현은 몰라도 돼." |
┌────────────────────────────┐
│ Application Layer │ ← 우리가 보는 환상
├────────────────────────────┤
│ Abstract Data Types (ADT)│ ← stack, queue, tree...
├────────────────────────────┤
│ Instruction Execution │ ← CPU: MOV, ADD, etc
├────────────────────────────┤
│ OS + MMU + Page Table │ ← 자원관리 + 환상 유지
├────────────────────────────┤
│ DRAM (slow), Page Fault │ ← 메모리 trade-off
├────────────────────────────┤
│ SRAM Cache + Registers │ ← 빠른 임시 기억
├────────────────────────────┤
│ Transistors & Storage │ ← 현실의 한계, 재료
└────────────────────────────┘
🧬 마지막 메시지
너가 말했듯, 컴퓨터는 마치 인간 같다.
미래를 알 수 없고, 그래서 과거를 기반으로
효율을 추구하며, 계속 보완해가며 살아간다.그런 구조 속에서, 컴퓨터를 공부하면 결국 나를 알게 된다.
효율적인 시스템을 만들려면 결국,
**"나는 무엇을 중요하게 생각하는가"**를 알아야 하니까.