top of page
검색

NAND Flash 내부 동작: 메모리 카드는 왜 데이터를 단순히 덮어쓸 수 없을까?



NAND Flash 내부 동작 

 

NAND Flash가 데이터를 다루는 방식에는 다음과 같은 세 가지 기본 전제가 있습니다.


1.    NAND Flash는 Page 단위로만 데이터를 읽고 쓸 수 있습니다.

o  Page 크기: 일반적으로 4KB ~ 16KB

2.    한 번 데이터를 쓴 영역은, 반드시 지워야 다시 쓸 수 있습니다.

o  덮어쓰기가 불가능합니다.

3.    지우기(Erase)는 Block 단위로만 가능합니다.

o  Block 크기: 일반적으로 수 MB


최신 64GB SD 카드의 예


SD 카드마다 차이는 있지만, 최신 64GB SD 카드를 예로 들면 내부 구조는 대략 다음과 같습니다.




NAND Flash의 근본적인 문제: 덮어쓰기 불가


문제의 핵심은 NAND Flash는 이미 기록된 데이터를 덮어쓸 수 없다는 점입니다.


예를 들어, 위 그림에서 Block b2 안의 Page p3에 저장된 데이터 중 단 1 byte만 수정해야 하는 상황을 생각해 보겠습니다.


비록 변경된 데이터는 1 byte에 불과하지만, NAND Flash에서는 다음과 같은 이유로 큰 작업이 필요합니다.


  • NAND Flash의 최소 쓰기 단위는 Page (16KB)

  • NAND Flash의 최소 지우기 단위는 Block (4MB)


따라서 Controller는 내부적으로 다음 작업을 수행해야 합니다.


1.    Block b2 전체(4MB)를 읽고

2.    Block b2 전체를 지운 뒤

3.    Page p3만 수정된 데이터로 반영하고

4.    Block b2 전체(4MB)를 다시 기록

 

즉, 1 byte를 수정하기 위해 4MB를 읽고, 지우고, 다시 써야 하는 구조입니다.


실제로 2010년대 초반, UHS-I SD 카드가 등장하기 이전의 SD 카드들은 이와 유사한 방식으로 동작했습니다.


그 결과:

  • 작은 데이터 변경에도 대규모 내부 작업이 필요했고

  • 연속 쓰기 성능이 매우 낮았으며

  • Class 10 (10MB/s)조차 안정적으로 달성하기 어려웠습니다.

 

현대 SD 카드가 빨라진 이유


2010년대 초반을 기점으로 다음과 같은 기술들이 본격적으로 도입되었습니다.


  • Dynamic Mapping

  • Over-Provisioning

  • Garbage Collection (GC)

 

이 기술들의 핵심은 사용자 주소와 실제 물리 주소를 분리하는 것입니다. 이제는,

  • “b2의 p3에 써라”라는 요청이 들어오면

  • 실제로는 이미 지워져 있는 다른 Page에 데이터를 기록한 뒤

  • 그 Page를 마치 b2의 p3인 것처럼 연결(Mapping) 해 줍니다.

 

이 방식 덕분에:

  • 지우기 작업이 즉시 발생하지 않고

  • 쓰기 지연이 제거되며

  • 연속 쓰기 속도가 비약적으로 향상되었습니다.

이러한 내부 관리 기술에 대한 자세한 내용은 이전 포스팅, "메모리 카드는 왜 불안정해질까: 오버프로비저닝, FTL, 가비지 컬렉션"을 참고해 주세요.



 
 
 

댓글


bottom of page