Post

컴퓨터 구조 | Computer Structure

컴퓨터 구조 | Computer Structure

내가 볼려고 작성한 CS 공부.

⚙️ 컴퓨터 구조 – 컴퓨터의 기본 구성 요소

컴퓨터는 데이터를 입력받고, 처리하고, 저장한 뒤, 그 결과를 사용자에게 출력하는 장치다.
이 과정을 가능하게 하는 핵심 부품들을 컴퓨터의 5대 구성 요소라고 부른다.

✅ 1. 중앙처리장치 (CPU, Central Processing Unit)

CPU는 컴퓨터의 두뇌로, 명령어를 해석하고 실행하며 전체 흐름을 제어하는 장치다.

1.1 역할

  • 메모리에서 명령어를 가져오고(fetch), 해석하고(decode), 실행한다(execute).
  • 계산, 분기, 제어 신호 전송 등 대부분의 실제 작업을 담당한다.

1.2 구성 요소

  • ALU (Arithmetic Logic Unit)
    덧셈, 뺄셈 등의 산술 연산과 AND, OR 같은 논리 연산을 수행

    ALU: 계산과 논리 판단을 담당하는 CPU 내부 연산 장치

  • CU (Control Unit)
    명령어를 해석하고, 각 구성 요소에 필요한 제어 신호를 보낸다

    CU: 컴퓨터 내부 흐름을 제어하는 지휘자 역할

  • 레지스터 (Register)
    계산 도중 필요한 데이터를 임시로 저장하는 아주 빠른 저장소

    레지스터: CPU 내부에 있는 초고속 임시 메모리

✅ 2. 메모리 (Memory)

메모리는 프로그램 실행 중 필요한 데이터를 임시로 저장하는 공간이다.

2.1 역할

  • CPU가 실행할 명령어와 데이터를 보관한다.
  • 실행 중인 프로그램의 작업 공간으로 사용된다.

2.2 종류

  • RAM (Random Access Memory)
    현재 실행 중인 프로그램과 데이터를 저장하며, 전원이 꺼지면 내용이 사라진다

    RAM: 빠르게 읽고 쓸 수 있는 휘발성 주기억장치

  • ROM (Read Only Memory)
    읽기 전용으로, 전원이 꺼져도 내용이 유지된다

    ROM: 컴퓨터 부팅에 필요한 기본 정보를 저장하는 비휘발성 메모리

  • 보조기억장치와의 구분
    SSD, HDD 같은 저장장치는 메모리와 달리 데이터를 영구 보관한다

    보조기억장치: 프로그램 설치, 문서 저장 등에 사용되는 장기 저장소

✅ 3. 입력장치 (Input Device)

입력장치는 사용자의 명령이나 데이터를 컴퓨터로 전달하는 장치다.

3.1 역할

  • 사용자의 입력을 디지털 신호로 변환하여 시스템에 전달한다.

3.2 예시

  • 키보드, 마우스, 마이크, 터치스크린, 카메라 등

✅ 4. 출력장치 (Output Device)

출력장치는 처리된 결과를 사용자에게 보여주는 장치다.

4.1 역할

  • 컴퓨터가 계산한 결과를 사람이 이해할 수 있는 형태로 변환해 전달한다.

4.2 예시

  • 모니터, 프린터, 스피커 등

✅ 5. 제어장치 (Control Unit)

전통적으로는 독립된 구성 요소로 설명되지만, 실제로는 CPU 내부에 포함된다.

5.1 역할

  • 입력장치, 메모리, 출력장치 사이의 데이터 흐름을 제어한다.
  • 명령어의 흐름을 조정하고 전체 시스템 동작을 감독한다.

✅2. 구성 요소 간 데이터 흐름

  1. 입력장치로부터 명령이나 데이터 입력
  2. 메모리에 명령어와 데이터를 저장
  3. CPU가 명령어를 가져와서 해석하고 처리
  4. 결과를 다시 메모리에 저장하거나
  5. 출력장치를 통해 사용자에게 결과 전달

이 과정을 “펫치(Fetch) → 디코드(Decode) → 실행(Execute)” 사이클이라고 부른다.

✅3. 구조적 배경: 폰 노이만 구조

💡 오늘날 대부분의 컴퓨터는 “폰 노이만 구조(Von Neumann Architecture)”를 따른다.

특징

  • 명령어와 데이터를 같은 메모리에 저장
  • CPU와 메모리 사이에 하나의 버스(bus)로 연결됨

    버스: 컴퓨터 내부의 데이터 전달 통로 (전선의 고속도로라고 생각하면 됨)

단점

  • 명령어와 데이터가 같은 통로(버스)를 쓰다 보니 속도 병목 현상 발생

    이를 폰 노이만 병목(Von Neumann Bottleneck)이라고 한다.





⚙️ 컴퓨터 구조 – CPU, 메모리, 저장장치, 버스 구조

컴퓨터는 데이터를 입력받고, 처리하고, 저장하고, 출력하는 구조다.
이 과정에서 가장 중요한 구성 요소가 바로:

  • CPU (중앙처리장치)
  • 메모리 (주기억장치)
  • 저장장치 (보조기억장치)
  • 버스 (데이터 통로)

✅ 1. CPU (Central Processing Unit) – 컴퓨터의 두뇌

💡 CPU는 컴퓨터가 명령어를 해석하고 실행하는 “두뇌”다.

역할

  • 프로그램 명령어를 하나씩 가져오고(Fetch)
  • 해석하고(Decode)
  • 실행(Execute) 한다.

내부 구성

구성 요소역할
ALU (산술 논리 연산 장치)계산 담당 (예: 덧셈, 비교 등)
CU (제어 장치)명령어 해석 및 제어 신호 전달
레지스터CPU 내부의 초고속 임시 저장 공간

작동 사이클

  1. 명령어를 메모리에서 가져오고
  2. 그 명령어를 해석한 뒤
  3. ALU로 계산을 수행하거나, 메모리에 접근함

✅ 2. 메모리 (Memory) – CPU의 작업 공간

💡 메모리는 CPU가 실행 중인 프로그램과 데이터를 저장하는 임시 작업 공간이다.

RAM vs ROM

종류설명특성
RAM (휘발성 메모리)실행 중인 프로그램 & 데이터 저장전원 끄면 데이터 사라짐
ROM (비휘발성 메모리)시스템 초기화 정보 저장데이터 고정, 변경 불가

메모리의 특징

  • CPU는 RAM에 있는 데이터를 실시간으로 사용
  • RAM이 부족하면 속도 저하 → 디스크 스와핑 발생

✅ 3. 저장장치 (Storage) – 데이터를 오래 저장하는 공간

종류

장치설명특성
HDD (하드디스크)자성 원판이 회전하며 데이터를 읽고 씀가격 저렴, 속도 느림
SSD (솔리드 스테이트 드라이브)반도체 기반 플래시 메모리속도 빠름, 비쌈
외장장치USB, 외장 HDD 등휴대 가능, 백업용

메모리 vs 저장장치

구분메모리 (RAM)저장장치 (SSD, HDD 등)
목적실시간 작업 처리데이터 보관
속도매우 빠름상대적으로 느림
휘발성O (전원 끄면 사라짐)X (전원 꺼도 유지됨)

✅ 4. 버스 (Bus) – 부품 간 연결 통로

💡 버스는 컴퓨터 내부에서 데이터를 전달하는 전선 묶음 같은 통로다.

역할

  • CPU, 메모리, 저장장치, 입출력장치를 서로 연결
  • 데이터, 주소, 제어 신호를 전달하는 고속 통신로

버스의 종류

버스 종류설명
데이터 버스실제 데이터를 전달
주소 버스데이터가 어디에 있는지를 지정
제어 버스읽기/쓰기 등 동작을 지시

🔍 데이터 버스: 예) 42라는 숫자를 메모리로 보낼 때 그 42 자체를 전달
🔍 주소 버스: 예) 0x1234 메모리 위치로 가! 라고 알려줌
🔍 제어 버스: 예) 이건 읽기(Read)야! 라고 명령

병목 현상: “폰 노이만 병목”

명령어와 데이터가 같은 버스를 타고 움직이기 때문에
동시에 처리하려고 하면 속도 병목(bottleneck)이 생긴다.





⚙️ 컴퓨터 구조 – 캐시 메모리와 계층적 메모리 구조

CPU, RAM, 저장장치(SSD/HDD) 사이에는 속도와 비용의 차이가 있다.
이 차이를 극복하고 전체 시스템 성능을 높이기 위한 구조가 바로 계층적 메모리 구조이고 그 핵심 요소가 캐시 메모리(Cache Memory)이다.

✅ 1. 왜 계층적 메모리 구조가 필요한가?

💡 CPU는 아주 빠르게 동작하지만, 메모리는 상대적으로 느리다.
이로 인해 CPU가 데이터를 기다리며 놀게 되는 시간(idle time)이 많아짐.

예시

  • CPU는 나노초(ns) 단위로 작동
  • RAM은 그보다 훨씬 느림 → CPU가 RAM 응답을 기다려야 함
  • 저장장치는 RAM보다도 수십~수천 배 느림 (특히 HDD)

그래서 메모리 구조에 속도 차이를 줄이는 중간 단계가 필요했고 바로 그게 캐시(Cache)다.

✅ 2. 계층적 메모리 구조란?

💡 “빠르지만 비싼 메모리”와 “느리지만 싼 메모리”를 계층적으로 섞어 사용하는 구조

계층 구성 (빠름 ↔ 느림 / 작음 ↔ 큼)

계층종류속도크기비고
1단계레지스터🟢 매우 빠름🔴 매우 작음CPU 내부
2단계L1 캐시🟢 빠름🔴 작음 (KB 단위)CPU 코어당 존재
3단계L2 캐시🟡 중간🟡 중간 (수백 KB~MB)보통 코어당 1개
4단계L3 캐시🔵 느림🟢 큼 (수 MB~수십 MB)CPU 전체가 공유
5단계RAM (주기억장치)🔵 더 느림🟢 큼 (GB 단위)모든 실행 중 데이터 저장
6단계SSD/HDD (보조기억장치)🔴 매우 느림🟢 매우 큼 (TB 단위)프로그램, 파일 저장소

✅ 3. 캐시 메모리란?

💡 자주 사용하는 데이터를 CPU 근처에 빠르게 접근 가능한 형태로 미리 저장해두는 메모리

핵심 특징

  • 작고 빠르다
  • RAM보다 훨씬 빠름
  • CPU와 가까운 위치에 있음

왜 필요한가?

  • CPU가 같은 데이터를 반복해서 사용할 때 RAM까지 안 가고, 캐시에서 바로 가져옴
  • RAM 접근 시간을 줄여서 전체 연산 속도를 높여줌

✅ 4. 캐시 메모리의 작동 원리

작동 흐름

  1. CPU가 어떤 데이터를 요청함
  2. 캐시에 해당 데이터가 있으면 → 바로 사용 (→ 캐시 히트)
  3. 없으면 → RAM에서 가져오고 캐시에 저장 (→ 캐시 미스)

✅ 5. 캐시의 계층 (L1, L2, L3)

구분설명
L1 캐시가장 빠르고 가장 작음 (CPU 코어당 존재, 보통 32~128KB)
L2 캐시중간 속도 & 크기 (CPU 코어당 존재하거나 공유, 수백 KB~1MB)
L3 캐시CPU 전체가 공유하는 캐시 (수 MB, 여러 코어 간 통신에도 사용)

각 계층은 데이터 요청 시 순차적으로 탐색됨 (L1 → L2 → L3 → RAM)

✅ 6. 캐시 메모리 정책 (심화)

교체 정책 (Cache Replacement Policy)

캐시는 용량이 작아서 오래된 데이터를 비워야 할 때 어떤 데이터를 버릴지를 결정

  • LRU (Least Recently Used)
    → 가장 오래 전에 사용된 데이터를 제거
  • FIFO (First In First Out)
    → 먼저 들어온 데이터를 먼저 제거
  • Random
    → 무작위로 하나 선택해서 제거

✅ 7. 계층적 구조의 효과

  • 속도와 비용의 균형을 잡을 수 있음
  • 자주 쓰는 데이터는 빠른 메모리(L1~L3 캐시)에
  • 덜 쓰는 데이터는 느리지만 싼 저장장치(SSD/HDD)에





⚙️ 컴퓨터 구조 – 명령어 사이클 & 파이프라이닝

✅ 1. 명령어 사이클 (Instruction Cycle)이란?

💡 컴퓨터가 프로그램을 실행한다는 것은, 메모리에 있는 명령어를 하나씩 읽고, 해석하고, 실행하는 것이다. 이 과정을 명령어 사이클이라고 한다.

명령어 사이클의 3단계

단계설명
Fetch메모리에서 명령어를 가져옴
Decode명령어를 해석하여 무엇을 해야 하는지 파악
Execute실제로 연산, 데이터 이동 등의 동작 수행

✅ 2. 명령어 사이클의 흐름

예시: A = B + C 라는 명령어 실행 과정

  1. Fetch: A = B + C 명령어를 RAM에서 CPU로 가져옴
  2. Decode: ‘+’ 연산을 해야 한다는 것을 CU가 해석
  3. Execute: ALU가 B와 C를 더해 A에 저장

💡 이 과정이 1개의 명령어마다 반복됨

✅ 3. 파이프라이닝 (Pipelining)이란?

💡 CPU가 명령어들을 겹쳐서 동시에 처리하는 기술
마치 공장에서 여러 작업을 줄 세워 병렬로 수행하는 것처럼 작동함

공장 비유 예시

작업사람1사람2사람3
작업1잘라  
작업2잘라조립 
작업3잘라조립포장
작업4잘라조립포장

✅ 4. 명령어 사이클과 파이프라이닝의 관계

일반 처리 (Non-pipelined)파이프라인 처리
한 명령어를 Fetch → Decode → Execute 순서대로 처리하고 나서 다음 명령어 처리여러 명령어의 각 단계가 동시에 진행

📌 예:

  • 일반: A → B → C 순차적으로 3초
  • 파이프라인: A/B/C가 1초 간격으로 겹쳐져서 총 5초가 3초로 단축됨

✅ 5. 파이프라이닝 구조 예시 (5단계 파이프라인)

단계이름설명
IFInstruction Fetch명령어 가져오기
IDInstruction Decode명령어 해석
EXExecute연산 수행
MEMMemory Access메모리 접근
WBWrite Back결과 저장

💡 실제 CPU는 이 단계를 동시에 수행하여 속도를 극대화함

✅ 6. 파이프라이닝의 문제점 (Hazard, 위험 요소)

6.1 데이터 해저드 (Data Hazard)

  • 다음 명령이 이전 명령의 결과를 기다려야 할 때

6.2 제어 해저드 (Control Hazard)

  • 분기문(if, jump 등)으로 인해 어떤 명령을 실행할지 결정되지 않았을 때

6.3 구조적 해저드 (Structural Hazard)

  • 하드웨어 자원이 겹쳐서 충돌 날 때 (예: 두 명령이 동시에 메모리를 사용하려 함)

💡 해저드(Hazard): 파이프라인 처리 중 발생하는 충돌/지연 문제

✅ 7. 파이프라이닝 성능 효과

  • 파이프라이닝이 없다면: 명령어 N개 처리에 N x 1단계 시간 소요
  • 파이프라이닝이 있으면: N + (단계 수 - 1) 시간 소요
  • 즉, 전체 명령어 처리 시간이 크게 줄어든다





⚙️ 컴퓨터 구조 – 병렬처리와 멀티코어 (Parallel Processing & Multicore)

✅ 1. 병렬처리란?

💡 병렬처리는 여러 작업을 동시에 수행하는 처리 방식이다.

왜 중요한가?

  • 더 많은 데이터를 더 빠르게 처리할 수 있음
  • CPU 성능을 높이기 위한 핵심 기술

✅ 2. 병렬처리의 기본 개념

직렬 처리 vs 병렬 처리

구분직렬 처리 (Serial)병렬 처리 (Parallel)
처리 방식작업을 하나씩 순서대로 수행여러 작업을 동시에 수행
예시요리를 혼자서 하나씩 함여러 명이 재료 손질, 요리, 설거지 나눠서 동시에 함

✅ 3. 병렬처리의 유형

3.1 데이터 병렬 처리 (Data Parallelism)

  • 같은 작업을 여러 데이터에 동시에 적용

    예: 수천 개 이미지에 같은 필터 적용

3.2 작업 병렬 처리 (Task Parallelism)

  • 서로 다른 작업을 동시에 수행

    예: 한 프로세스는 영상 처리, 다른 프로세스는 소리 처리

✅ 4. 멀티코어란?

💡 멀티코어는 하나의 CPU 칩 안에 여러 개의 독립적인 코어(작은 CPU)를 넣은 것

코어(Core): 실제로 계산을 수행하는 처리 유닛.
과거에는 CPU = 코어 1개였지만, 지금은 보통 4~16개 이상 존재

왜 생겼을까?

  • CPU 클럭 속도를 무작정 높이는 건 발열/전력/한계가 있음
  • 대신 여러 코어를 넣어 병렬로 처리 → 성능 향상

✅ 5. 멀티코어 시스템에서 병렬 처리

구조설명
싱글코어한 번에 한 작업만 수행 가능
듀얼코어동시에 두 개의 작업 수행 가능
쿼드코어 이상더 많은 병렬 작업 가능

운영체제는 각 코어에 프로세스나 스레드를 배분해 동시 실행

✅ 6. 병렬처리 관련 기술

기술설명
스레드 (Thread)하나의 프로세스 안에서 동작하는 작업 단위
멀티스레딩한 프로세스 내에서 여러 스레드를 병렬로 실행
SIMD / MIMDCPU의 명령 처리 방식 (SIMD는 GPU에서 자주 사용됨)

💡 SIMD: Single Instruction, Multiple Data → 하나의 명령으로 여러 데이터 처리
💡 MIMD: Multiple Instruction, Multiple Data → 각 코어가 각각 다른 명령 수행

✅ 7. 병렬 처리의 한계

7.1 병렬화가 어려운 작업 존재

  • 어떤 작업은 순서대로 처리해야 함 (예: 로그인 → 결제)

7.2 스레드 간 충돌 (Race Condition)

  • 두 스레드가 동시에 같은 메모리를 건드리면 오류 발생 가능

7.3 병목현상

  • 메모리, 캐시, I/O 등의 자원이 병렬 처리 속도를 따라가지 못함





⚙️ 컴퓨터 구조 – 캐시 일관성과 멀티코어 환경

✅ 1. 왜 캐시 일관성이 중요한가?

  • 멀티코어 CPU에서는 각 코어가 독립적인 캐시를 가진다.
  • 같은 데이터를 서로 다른 캐시에서 읽고 쓰면, 데이터 불일치 문제가 발생할 수 있다.
  • 이걸 해결하기 위한 기술이 바로 캐시 일관성(Cache Coherency)이다.

✅ 2. 문제 상황 예시

시나리오

  1. CPU 코어 1: 변수 x = 10 이라고 저장한 후, 캐시에 보관
  2. CPU 코어 2: 변수 x = 10을 읽어 캐시에 보관
  3. CPU 코어 1: x = 20으로 변경
  4. CPU 코어 2: 여전히 x = 10이라고 생각함 → ❌ 불일치 발생

데이터는 변경되었는데, 다른 코어는 예전 값을 쓰고 있음 → 문제 발생!

✅ 3. 캐시 일관성을 유지하는 방법: MESI 프로토콜

💡 CPU는 캐시 상태를 표시하고, 이를 통해 변경된 데이터가 있으면 다른 캐시와 동기화함.

MESI 프로토콜 (가장 대표적인 일관성 유지 기법)

상태설명
M (Modified)캐시에서 변경됨, 메모리와 값 다름 → 유일한 복사본
E (Exclusive)읽기만 했고, 다른 캐시에 없음 → 메모리와 같음
S (Shared)여러 캐시에 존재함 → 메모리와 동일
I (Invalid)무효화된 데이터 → 더 이상 사용 불가

각 캐시 블록은 이 중 하나의 상태를 가짐

✅ 4. 일관성을 맞추는 방식 (캐시 동기화 방법)

Snoop 기반 프로토콜 (Snooping)

  • 모든 캐시가 버스를 감시하여 다른 캐시에서 어떤 데이터가 바뀌는지 실시간 체크

💡 Snooping: “몰래 엿보기”처럼, 다른 캐시에서 발생하는 작업을 감시해서 동기화

디렉토리 기반 프로토콜 (Directory-based)

  • 중앙 디렉토리(표)가 있어, 어떤 데이터가 어느 캐시에 있는지 추적하고 조정

✅ 5. 멀티코어 환경에서 발생하는 문제

5.1 캐시 불일치

  • 위에서 설명한 일관성 문제

5.2 False Sharing

서로 다른 변수를 사용하는데, 우연히 같은 캐시 블록에 있음
→ 하나의 쓰기로 인해 다른 코어 캐시도 무효화됨

5.3 Synchronization Overhead

  • 스레드/프로세스 간 데이터를 공유할 때 락(lock) 사용 → 성능 감소

✅ 6. 성능 최적화를 위한 전략

전략설명
캐시 친화적 데이터 구조연속적인 메모리 구조를 사용 (배열 등)
False Sharing 피하기스레드 간 패딩(padding) 사용하여 블록 분리
락 최소화락 대신 atomic 연산, lock-free 구조 사용

💡 Atomic 연산: 중간에 끼어들 수 없는 ‘한 번에 끝나는’ 연산
💡 Lock-free: 락을 쓰지 않고 충돌을 회피하는 병렬 처리 방식

This post is licensed under CC BY 4.0 by the author.