FTL에 대해 살펴보기 전에 SSD가 데이터를 어떻게 저장할까?
일반적인 운영체제 파일 시스템은 "섹터"를 기반으로 데이터를 읽는다. 하지만 SSD는 페이지와 블록을 기반으로 저장 단위가 구현되어 있다. 이것은 섹터를 기반으로 하는 프로그램은 SSD에서 데이터를 읽고/쓰기가 직접적으로 불가능하다는 것이다.
이러한 문제점이 SSD에 존재하는데, 이것을 위해 FTL이라는 중간 계층이 존재한다.
애플리케이션에서 사용하는 논리 블록 주소(LBA)는 FTL의 매핑 테이블을 통해, 물리 주소를 찾아 SSD의 블록(any)의 페이지(any)를 참조하게 된다.
플래시 메모리의 최대 단점인 "지우기" 때문이다.
낸드 플래시는 쓰기보다 지우기가 느리다는 문제가 있다. 그렇다고 지우기를 무한대로 할 수 있는것도 아니다. 플래시 메모리 섹터의 최대 지우기 문제가 있기 때문에, FTL을 통해 SSD의 수명도 관리를 한다.
FTL은 다음과 같이 구성되어 있다.
이중 가장 중요한 것은 "Wear Leveling"과 "GC(Garbage Collection)"이다.
STL 계층에서 주소 매핑, 웨어 레벨링, 가비지 컬렉션을 수행한다.
주소매핑, 파일 시스템으로부터 논리적 주소를 낸드 플래시 메모리의 물리적 주소로 연결
가비지 컬렉션, 무효화 페이지가 많음 블록을 선택하여 유효 페이지들을 다른 블록에 복사하고 해당 블록을 삭제
웨어 레벨링, 페이지당 쓰기 횟수를 모니터링하여 여러 블록에 균등하게 저장하도록 하여 수명을 늘림
BML 계층은 낸드 플래시의 불량 블록을 관리하고 오류 처리를 담당한다.
LLD 계층은 낸드 플래쉬를 사용하기 위한 드라이버로 인터페이스를 제공한다.