[Computer Architecture] Memory

이재·2025년 12월 22일
post-thumbnail

Memory & Cache Memory

RAM의 역할: 실행 중인 프로그램이 머무르는 곳

RAM은 실행 중인 프로그램, 변수, 함수, 스택 등이 저장되는 공간이다.

  • 휘발성(Volatile) → 전원 꺼지면 데이터 사라짐
  • CPU가 프로그램을 실행하기 위해 반드시 RAM에 적재해야 함
  • 용량이 클수록 더 많은 프로그램을 동시에 실행할 수 있음
  • 하지만 무작정 크다고 성능이 비례해 증가하는 것은 아님

RAM이 ‘RAM’인 이유: 임의 접근(랜덤 액세스) 지원

RAM = Random Access Memory

"메모리의 모든 주소를 0 → 1 → 2 순차적으로 접근할 필요 없이

원하는 주소에 바로 읽기/쓰기 가능하다"

임의 접근(Random Access)

  • 1번지든 1000번지든 접근 속도가 동일
  • CPU는 주소만 알면 즉시 해당 데이터를 읽음

순차 접근(Sequential Access)

  • 처음부터 차례대로 읽어야 함
  • 예: 테이프 드라이브, 일부 스트리밍 방식

RAM의 종류 — DRAM, SRAM, SDRAM, DDR

RAM은 여러 종류가 있고, 성능·목적이 다 다르다.

DRAM (Dynamic RAM)

  • 시간이 지나면 데이터가 자연 소멸됨
  • 일정 주기로 refresh(재저장) 필요
  • 장점: 저렴함 / 집적도 높음 / 대용량 설계 유리
  • 단점: 속도 느림
  • 주 용도: 메인 메모리(RAM) 대부분은 DRAM 기반

SRAM (Static RAM)

  • 시간이 지나도 데이터가 유지됨(전원 끊기면 사라지지만)
  • refresh 필요 없음
  • 장점: 속도 매우 빠름
  • 단점: 가격 비쌈 / 집적도 낮음 / 전력 소비 큼
  • 주 용도: CPU 캐시 메모리(L1/L2/L3)

결론: 메인 메모리는 DRAM, 캐시는 SRAM을 사용한다.

SDRAM (Synchronous DRAM)

  • DRAM을 CPU 클럭에 맞춰 동기화시킨 버전
  • 기존 DRAM보다 훨씬 빠름

DDR SDRAM (Double Data Rate)

  • 클럭당 2번 데이터 전송 가능
  • SDRAM 대비 대역폭 2배

세대별 대역폭 증가:

종류SDR SDRAM 대비 대역폭
DDR1×2
DDR2×4
DDR3×8
DDR4×16
DDR5×32 (최신)

요약하면: DDR 세대가 높아질수록 더 많은 데이터를 한 번에 전송할 수 있고 속도가 빨라진다.

메모리 저장 방식: 빅 엔디안 vs 리틀 엔디안

CPU는 4바이트·8바이트 단위 데이터를 저장할 때 바이트를 어떤 순서로 배열할지 정해야 한다.

빅 엔디안(Big Endian)

  • 낮은 주소에 상위 바이트(MSB) 저장
  • 우리가 숫자를 읽는 순서와 동일
  • 디버깅에 유리

예: 1A 2B 3C 4D → (낮은 주소부터) 1A 2B 3C 4D

리틀 엔디안(Little Endian)

  • 낮은 주소에 하위 바이트(LSB) 저장
  • 컴퓨터가 연산하기 편함(덧셈 시 일의 자리부터 계산하듯)

예: 1A 2B 3C 4D → (낮은 주소부터) 4D 3C 2B 1A

엔디안 차이가 왜 중요할까?

  • CPU 아키텍처마다 방식을 다르게 사용
    • x86: 리틀 엔디안
    • 대부분 ARM: 리틀 엔디안(최근)
    • 네트워크 통신은 빅 엔디안 (Network Byte Order)
  • 메모리 값 디버깅, 바이너리 분석, 네트워크 프로토콜 구현 시 필수 개념

캐시 메모리 — CPU 성능을 좌우하는 핵심

CPU는 강력한 연산 능력을 갖고 있지만

메모리 속도가 느려 병목이 발생한다.

그래서 등장한 것이 바로 캐시 메모리(Cache)

캐시 메모리의 목적

  • CPU와 RAM 사이에서 고속 SRAM을 사용해 속도 차이를 완충
  • CPU가 사용할 법한 데이터를 미리 캐시에 준비하여 접근 속도 향상
  • 원래 RAM에 접근하면 100ns, 캐시는 1ns 수준

캐시의 계층 구조 — L1 / L2 / L3

계층속도크기위치
L1 캐시가장 빠름가장 작음코어 내부
L2 캐시빠름중간코어 내부
L3 캐시느림가장 큼코어 외부, 코어 간 공유

L1은 다시 둘로 나뉨

  • L1I (Instruction Cache) — 명령어 저장
  • L1D (Data Cache) — 데이터 저장

캐시 히트 vs 캐시 미스

용어의미
캐시 히트(Cache Hit)캐시 안에 CPU가 원하는 데이터가 있음
캐시 미스(Cache Miss)캐시에 없어 → RAM에서 다시 가져옴 (느림)

캐시 히트율 = CPU 성능과 직결되는 지표

일반적으로 90% 이상이 되도록 설계된다.

지역성(Locality)의 원리 — 캐시의 핵심 원리

CPU는 데이터를 아무렇게나 접근하지 않는다.

특정 규칙을 가진 패턴이 있다.

시간 지역성(Temporal Locality)

최근에 사용한 데이터를 다시 사용할 가능성이 높음

→ 변수, 루프 내 값 등

공간 지역성(Spatial Locality)

접근한 주소 근처를 다시 접근할 가능성 높음

→ 배열, 구조체, 반복문

이 두 원리로 캐시는 무엇을 미리 저장할지를 판단한다.

캐시 쓰기 정책: 쓰기 시 메모리와의 일관성 유지 방법

CPU가 캐시 값을 변경하면

메모리(RAM)와 다를 수 있기 때문에 일관성 정책이 필요함.

Write-Through (즉시 쓰기)

  • 캐시 → 메모리 동시 기록
  • 장점: 데이터 일관성 100%
  • 단점: 속도 가장 느림(메모리까지 매번 접근)

Write-Back (지연 쓰기)

  • 캐시에만 먼저 쓰고
  • 나중에 메모리에 한꺼번에 업데이트
  • 장점: 빠르다 (메모리 접근 최소화)
  • 단점: 데이터 일관성 깨질 위험 있음
  • 그래서 캐시 라인에 dirty bit같은 관리 정보가 추가됨

멀티코어 환경에서는 더 복잡: 캐시 일관성 문제

각 코어가 자기 L1/L2 캐시를 갖고 있기 때문에

코어 간 데이터를 다르게 저장할 수 있음.

이를 해결하는 것이:

MESI 같은 캐시 일관성 프로토콜(Cache Coherence Protocol)

(ex: Modified, Exclusive, Shared, Invalid)

보조 기억 장치 & 입출력 장치

보조기억장치 — HDD와 SSD

HDD(Hard Disk Drive)

  • 자기 방식으로 데이터를 기록
  • 내부 구성 요소
    • 플래터(원판)
    • 헤드(읽기/쓰기 바늘)
    • 스핀들(회전축)
  • 특징
    • 대용량/저렴
    • 기계적 구조 → 충격 취약, 속도 느림
    • 순차 접근은 괜찮지만 랜덤 접근은 느림

SSD(Solid-State Drive)

  • 플래시 메모리 기반 저장장치
  • 전기적으로 데이터 읽고 쓰기
  • 내부에 움직이는 부품 없음 → 빠름, 안정적

RAID — 데이터를 빠르고 안전하게 저장하는 기술

RAID(Redundant Array of Independent Disks)는

여러 개의 디스크를 하나처럼 묶어 성능/안전성을 높이는 기술

RAID의 목적

  • 성능 향상 (동시에 읽고 쓰기)
  • 데이터 안전성 강화 (복사본 또는 패리티 사용)

RAID 0 — 스트라이핑 (성능 위주)

  • 여러 디스크에 데이터를 번갈아 저장
  • 가장 빠름
  • 안전성 제로(디스크 1개라도 고장 → 전체 데이터 손실)

사용처 → 성능만 중요한 작업(게임 로딩, 임시 데이터 등)

RAID 1 — 미러링 (안전성 위주)

  • 데이터를 두 디스크에 그대로 복사
  • 한쪽 디스크 고장 나도 데이터 보존
  • 쓰기 속도는 RAID 0보다 느림
  • 저장공간 효율 반토막 (2TB + 2TB → 2TB만 사용)

사용처 → 중요한 데이터 저장 서버

RAID 4 — 전용 패리티 디스크

  • 패리티(parity)를 전용 디스크 1개에 모아 저장
  • 장점: RAID1보다 디스크 효율 좋음
  • 단점: 패리티 디스크가 병목이 됨 → 쓰기 속도 느림

RAID 5 — 분산 패리티 (가장 많이 사용)

  • 패리티를 여러 디스크에 분산 저장
  • RAID4의 병목 해결
  • 디스크 1개 고장 → 복구 가능
  • 쓰기 시 패리티 계산 때문에 SSD에서는 느릴 수 있음

RAID 6 — 이중 패리티 (RAID 5보다 안전)

  • 패리티 2개 저장
  • 디스크 2개 동시에 고장 나도 복구 가능
  • 쓰기 성능 RAID5보다 더 느림

장치 컨트롤러 & 장치 드라이버 — I/O의 핵심 구조

입출력장치(키보드, SSD, 마우스 등)는

직접 CPU와 연결되지 않는다.

장치 컨트롤러 (hardware)

  • 장치와 컴퓨터 본체를 연결하는 하드웨어 중개자
  • 입출력장치마다 전용 컨트롤러가 있음
  • SSD → SATA 컨트롤러
  • 키보드 → 키보드 컨트롤러
  • 네트워크 → NIC(Network Interface Controller)

장치 드라이버 (software)

  • 운영체제가 장치 컨트롤러를 제어할 수 있게 해주는 프로그램
  • 운영체제가 하드웨어의 동작 방식을 모르므로 드라이버가 알려주는 구조

입출력(I/O) 방식 3가지

프로그램 입출력 (Programmed I/O)

  • CPU가 직접 장치 컨트롤러를 계속 확인(polling)
  • CPU가 계속 바쁜 방식 → 매우 비효율적
  • 초기 컴퓨터에서 많이 사용됨

종류

  • 고립형 I/O: 메모리 주소와 I/O 주소 공간 분리
  • 메모리 맵드 I/O: I/O 장치를 메모리 주소 일부로 취급 → CPU 명령어를 그대로 사용 가능 → 현대 시스템에서 대부분 사용

인터럽트 기반 입출력 (Interrupt-driven I/O)

장치 컨트롤러가 데이터 준비됨이라며 CPU에게 인터럽트를 보냄

CPU는 그때만 처리하면 되므로 효율 ↑

그런데 문제가 있음

키보드·마우스·SSD·모니터 등 각각이

동시에 인터럽트를 발생시키면 순서가 필요하다.

그래서 등장한 것이 → PIC

PIC(Programmable Interrupt Controller)

  • 여러 입출력장치 인터럽트의 우선순위를 관리하는 하드웨어
  • CPU에게 지금 가장 중요한 인터럽트는 이거다라고 알려줌
  • 무시할 수 없는 인터럽트 → NMI (Non-Maskable Interrupt)

DMA(Direct Memory Access) — 고성능 I/O

인터럽트 기반 I/O에서도 CPU는 여전히 데이터 이동을 담당한다.

그래서 CPU를 아예 빼버린 방식이 등장했다.

DMA 구조

  • DMA 컨트롤러가 CPU 대신 → 장치 컨트롤러와 메모리 간 데이터를 직접 이동
  • CPU는
    • 명령만 내리고
    • 끝났다는 인터럽트만 받는다

→ CPU는 본업(연산)에 집중 가능

→ HDD/SSD/GPU에서 필수로 사용

사이클 스틸링(Cycle Stealing)

DMA가 시스템 버스를 사용할 때

CPU는 해당 순간 버스를 사용하지 못한다.

시스템 버스는 동시 사용이 불가

따라서 DMA 컨트롤러는 CPU가 시스템 버스를 사용하지 않을 때마다 조금씩 사용하거나

CPU가 시스템 버스 사용을 양보하게 된다.

CPU 입장에서는 버스 쓸 타이밍 훔쳐감

하지만 전체적으로는 훨씬 효율적이다.

PCI Express(PCIe) — 현대 I/O의 중심

오늘날 대부분의 고성능 장치는 PCIe 버스를 통해 연결된다.

  • NVMe SSD
  • GPU
  • 고성능 네트워크 카드
  • 캡처 카드 등

PCIe 특징 2가지

버전(Generation)에 따라 속도 증가

PCIe 버전레인당 최대 속도
1.0250 MB/s
2.0500 MB/s
3.0985 MB/s
4.01.97 GB/s
5.03.94 GB/s
6.07.56 GB/s
7.015.13 GB/s

레인(lane) 수로 대역폭이 결정됨

PCIe 버스를 통해 정보를 송수신하는 단위

  • x1
  • x4
  • x8
  • x16

예:

PCIe 4.0 x4 SSD = 1.97GB/s × 4 = 7.88GB/s

NVMe SSD가 빠른 이유가 바로 이 PCIe 버스 + x4 레인 구성 덕분이다.

profile
고민을 좋아하는 개발자

0개의 댓글