파일처리

[파일처리] SSD - 플래시 메모리(Flash memory)

서노리 2022. 4. 13. 04:11
반응형

최근 하드디스크보다 많이 쓰이는 SSD(Solid State Drive)는 NAND Flash memory이다.

플래시 메모리의 장점은 다음과 같다.

  • 빠르다
  • 전력 소비가 적다
  • 내구성이 높다
  • 크기가 작다
  • 무게가 가볍다
  • 소리가 안 난다

 

NAND Flash Memory의 구조

플래시 메모리는 여러 개의 블록으로 구성되어 있고 각 블록은 여러개의 페이지로 구성되어 있다. 또한 페이지는 주 저장소인 섹터와 페이지 관리용 meta data를 저장하는 스페어로 구성되어 있다.

 

플래시 메모리는 소블록 플래시 메모리와 대블록 플래시 메모리로 나뉘는데 소블록 플래시는 거의 단종되어 주로 대블록 플래시를 사용한다.

 

  • 소블록 플래시 메모리
    - 16KB 크기의 블록들로 구성

    - 각 블록은 32개의 페이지로 구성
    - 각 페이지는 (512 + 16) byte로 구성
  • 대블록 플래시 메모리
    - 128KB 크기의 블록들로 구성
    - 각 블록은 64개의 페이지로 구성
    - 각 블록은 (512 * 4 + 16 * 4) byte로 구성

 

플래시 메모리 vs 하드디스크

  • 플래시 메모리가 하드디스크보다 더 빠르다.
    - seek time과 rotational delay가 없기 때문
    - 플래시메모리는 랜덤 액세스 시에도 I/O cost가 거의 동일

  • 플래시 메모리는 쓰기 작업에 드는 비용이 읽기 작업에 드는 비용보다 10배 정도 더 비싸다.
    - 쓰기 작업이 읽기 작업보다 10배 정도 더 느림

  • In-place update (덮어쓰기)가 불가능하다.
    - 별도의 erase operation이 필요하며 이는 쓰기 작업보다 비용이 10배 정도 비쌈

플래시 메모리의 연산

  • Read page : 특정 페이지를 읽는다.
  • Write page : 특정 페이지에 데이터를 쓴다.
  • Erase block : 특정 블록을 초기화한다.

Erase 작업만 블록 단위로 이루어진다는 점이 특징이다.

 

 

우회적인 In-place update 방식

0번 블록의 1번 페이지에 덮어쓰기를 하려고 한다면, 먼저 0번 블록에서 1번 페이지를 제외한 나머지 페이지들을 빈 블록에 임시로 복사를 해두어야 한다. 왜냐하면 erase 작업이 블록 단위로 이루어져 다른 페이지가 손실될 수 있기 때문이다. 그 후 0번 블록을 지우고 복사해뒀던 페이지들을 다시 0번 블록에 복사한 뒤 임시 블록을 지우면 in-place  update가 마무리된다. 하지만 이 과정은 우회적인 방식이고 굉장히 많은 비용이 들기 때문에 실제로 플래시 메모리는 이 방식 대신 FTL layer를 통한 out-of-place update 방식을 사용한다.

FTL(Flash Translation Layer)

플래시메모리의 SW 구성

FTL은 논리적 주소를 물리적 주소로 mapping 해주는 역할을 한다. 파일 시스템은 실제로 존재하지 않는 논리적 저장장치를 가정하고 읽기 / 쓰기 작업을 수행하게 되는데 이를 FTL이 플래시 메모리의 물리적 저장장치와 mapping 해준다. 추가적으로 Garbage Collection과 블록의 erase 횟수를 제한하는 Wear-Leveling을 수행한다.

 

FTL의 맵핑 방식

1. Sector Mapping

Sector Mapping은 페이지 단위로 맵핑하는 방식이다. 그렇기 때문에 Mapping Table의 크기가 굉장히 커질 수 있다는 단점이 존재한다.

 

2. Block Mapping

Block Mapping은 블록 단위로 맵핑하는 방식이다. 블록 안에 4개의 페이지가 있으므로 lsn을 4로 나눈 몫인 lbn 값에 따라 물리적 블록이 맵핑되고 4로 나눈 나머지가 offset이 되어 그 블록 안에서 어떤 페이지를 읽고 쓸 것인지 결정한다.

 

3. Hybrid Mapping

Block Mapping의 변형으로써 offset을 따지지 않고 비어있는 페이지에 순서대로 할당한다. 읽기 작업을 위해서 해당 페이지의 스페어에다가 lsn값을 저장해두어야 한다.

반응형