Flash-based SSDs
- SSD는 solid state storage drive의 약자임.
- 하드 드라이브와 다르게 데이터를 탐색하는 모터가 존재하지 않음.
- 트랜지스터들로 구성되어 있으며 전원이 꺼지더라도 데이터가 유지되어 보조 기억 장치로 사용됨.
- SSD의 기본 단위는 셀임.
- 1980년대 만들어진 NAND-Flash 에 기반함.

-
기본적인 MOSFET구조에 Floating Gate (절연성이 매우 높은 부도체로 둘러 쌓아서 전자를 포획해서 저장)가 추가된 형태
-
CG에 강한 전압을 가하면 source에서 Drain 사이에 흐르던 전자가 터널링 옥사이드라고 부르는 절연층을 터널링해서 floating gate에 쌓이게 되고 이를 통해 정보를 저장하게 됨.
-
NAND FLASH 메모리 회로 구조는 확장성이 좋아서 용량을 늘리기 용이하다고 함.
-
위 트랜지스터에 하나의 비트만 저장할 수 있게 됨.
-
이 외에도 MLC, TLC와 같이 2, 3개의 비트를 인코딩하는 플래시도 있다고 함.
From Bits to Planes
플래시 칩은 위의 cell 들 여러 개를 적절히 회로로 구성하여 bank 혹은 plane으로 구성함.
-
Plane은 2개의 다른 사이즈 유닛으로 접근이 가능함.
- Blocks (통상적으로 128KB 또는 256 KB)
- Pages (예를 들어 4KB)
-
하나의 plane에는 많은 수의 블록이 있고, 각각의 블록 안에는 많은 수의 Page가 있음.
-
기존에 알고 있던 페이지나 블록과는 다른 것이라고 합니다...(헷갈림 주의)
-
아래의 예시는 3개의 블록과 그 안에 4개의 페이지가 있는 간단한 예시임.

-
SSD에서 가장 중요하면서도 이상한 점
- 블록 안에 있는 하나의 페이지에 데이터를 쓰고 싶으면 먼저 그 블록 전체에 저장되어 있던 데이터를 모두 지워야 함..
Basic Flash Operations
- Read (page 단위): 클라이언트는 읽기 명령과 적절한 페이지 번호를 디바이스에 지정하기만 하면 모든 페이지를 읽을 수 있음. 읽기 작업은 어느 페이지든 10ms 정도로 매우 빠르며 요청 위치와 관계없는 성능을 보임. (하드디스크는 아닌가 봅니다.)
- Erase (Block 단위): 위에서와 같이 write하기 전에 디바이스 특성으로 인해 해당 블록 전체를 먼저 지워야 함. Erase는 블록 전체를 지우기 때문에 해당 블록에 중요한 정보가 있는지 확인하고 해당 정보가 복사되어 있는지를 확인해야 함. 이에 따라 비용이 많이 듦.
- Program (Page 단위): Write와 동일. 해당 블록이 삭제되고 나서 프로그램 명령을 사용하여 페이지의 1 중에 일부를 0으로 변경하고 원하는 페이지 내용을 쓸 수 있음.
A Detailed Example
- 기존에는 덮어쓰면 그만이었는데 이제는 해당 페이지가 속한 블록을 모두 삭제해야 하는 비효율적인 방법으로 진행됩니다. 그럼 간단하게 블록의 크기가 4페이지이고 페이지의 크기는 8비트인 플래시 칩으로 명령들이 어떻게 수행되는지 살펴보겠습니다.

- 위 그림의 페이지는 우선 모두 valid 상태인 것을 알 수 있고 무엇인가 정보가 담겨져 있음.
- 이 상황에서 Page 0를 수정하고 싶은 상황

- 우선 모두 지우기...

- 부작용: 다른 페이지가 지워짐.
- 해결 방안: 블록을 지우기 이전에 다른 페이지들은 다른 위치로 백업해줘야 함.