ftl과 관련된 가장 기초 논문부터 적어보려고 한다. 읽은지 좀 돼서 다시 공부했답니다. ㅎㅎ

이 논문에서 가장 기본이 되는 개념이라 직접 만들어 봄.
block: 지우기의 가장 작은 단위
sector: read, write의 가장 작은 단위
sector들의 모임이 block을 만든다. 사실 요즘은 섹터라고 안 부르고 page라고 부르지만 이 논문에서는 섹터라고 하고 있다.

플래시 메모리는 읽기에 비해 쓰기 bandwidth problem이 발생하고, overwite를 위해 비용이 드는 지우기가 실행되어야 한다. 이러한 문제를 해결하기 위해 등장한 것이 그림에 보이는 flash translation layer이다! 줄여서 ftl이라고 부른다. ftl은 logical mapping, garbage collection을 담당하고 있다.
logical mapping: logical block address(lba)를 physical block address(pba)로 변환하는 매핑을 한다.
garbage collection: 사용되지 않는 정보를 free상태로 만들기 위한 작업
하이브리드 매핑은 sector-level mapping, page-level mapping을 합친 ftl 방식으로 앞으로 설명할 bast, fast, o-fast가 예시이다.

그림에서 log block area는 일시적으로 overwrite에 대한 정보를 저장하고 있는 곳이다.
1. write(4,...): 첫 write이므로 block level mapping table을 통해 data block area의 pbn10 첫번째 자리에 저장된다.(sequential)
2. write(5,...): 마찬가지
3. write(4,...): collision이 발생하였으므로 다시 sector level mapping table로 이동하여 lsn에 4를 기록한 후에 log block area로 이동해서 기록한다. (random write)
이러한 방식이 반복되면 그림과 같이 작성이 된다. 그렇다면 여기서 8을 한 번 더 작성하면 어떻게 될까? 그림에서 볼 수 있다시피, data block area, log block area 어디에도 자리가 없다. 이 때에는 merge나 switch작업이 일어나서 8이 들어갈 자리를 만들어 준다.

1. log block thrashing problem
2. hot logical block problem
bast는 메모리의 정보를 write할 때 mapping된 위치의 sector로 가야하기 때문에 이러한 문제들이 발생한다.

fast는 log block area에 sequential과 random write가 따로 있어 bast의 문제점들을 해결해준다. overwrite시에 switch가 일어나 한번의 erase만 발생하거나 merge가 일어나 두 번의 erase, 1번의 copy가 발생한다.

sw에서는 간단하게 merge가 일어나는 반면, rw에서는 복잡하게 발생하고 있다. rw에서는 log block하나를 victim log block으로 설정하고 이와 관련된 data block과 함께 새로운 free block에 저장하고 기존 block은 free상태로 반환해 주는 것이다.

fast는 bast와 비교하여 erase수가 적기에 성능이 더 좋다고 할 수 있다.

O-FAST FTL은 overwrite시에 victim log block을 선정하여 merge를 하는 것이 아니라 그냥 victim log block을 삭제해 버려 erase횟수를 줄일 수 있다. 나머지는 fast와 동일하다!
사실 내가 기억안 날때마다 보려고 쓴거라 엉망입니다,,,,양해부탁드려요,,하하