Nand Flash Memory 특성상 특정 메모리 단위로 읽기/쓰기/삭제 동작을 수행할 수 있다.
기본 동작
Read : Page 단위로 읽을 수 있다.
-> OS에서 1Byte 읽기 요청이 들어오면 SSD에서는 Page 단위로 읽고 요청 받은 데이터를 반환한 후, 나머지 정보는 버리기 때문에 읽기 동작 효율이 떨어진다.
Write : Page 단위로 쓸 수 있다.
-> 1Byte 쓰기 요청이 들어오면 해당 Page 전체를 기록해야 한다.
-> 필요 이상의 데이터 쓰기 발생 (Write Amplication)
Erase : Block 단위로 삭제할 수 있다.
-> Invalid된 Page로 이루어진 Block은 삭제할 수 있다.
Write 동작 예제
Initial Configuration :
1000번 Block : x,y,z 데이터가 저장되어있다.
2000번 Block : 데이터가 없는 상태
Writing a page :
1000번에 x 데이터를 업데이트한다.
PPN 0을 used로 마킹하고 PPN 3에 새로운 x데이터인 x'를 저장한다.
Erasing a block :
1000번 Block을 지운다고하면 유효한 PPN 1,2,3은 데이터가 없는 빈 Block인 2000번으로 이동시키고
1000번 Block을 삭제한다. -> PPN 1번은 삭제됨.
Write amplification
필요 이상의 데이터 쓰기를 효율적으로 관리하기 위해서는 아래와 같은 지침이 필요하다.
Wear leveling
: Nand Flash Memory의 1개 Cell은 Read/Write를 반복할 때마다 수명이 깎인다. 따라서 모든 Cell의 최대한 골고루 사용하여 특정 Cell이 수명이 다하지 않도록하는 전략이다.