• 검색 결과가 없습니다.

4.1.1 개요

본 논문에서는 불량 블록 관리와 마모도 평준화는 고려하지 않고 문제의 영역을 블록 사상과 전원오류 복구로 한정시킨 Vanilla FTL 의 정확성 기준을 정의하고 이러한 정확성 기준이 위배되는 상황을 부정확한 읽기와 쓰기의 개념을 도입한 테스팅 환경을 이용하여 검출할 수 있음을 보인다.

4.1.2 Vanilla FTL

Vanilla FTL 은 블록 단위의 사상과 전원오류 복구기능을 제공하는 기초적인 FTL 이다[15]. 블록 사상 FTL 에서는 블록 디바이스 인터페이스에서 이용되는 단위인 섹터를 논리적인 블록으로 묶어서 관리한다[12]. 이 때 한 블록의 크기는 플래시 메모리의 한 블록의 크기와 동일하다.

Vanilla FTL 은 블록 사상 기능을 제공하기 위하여 다음과 같은 블록들을 유지한다.

데이터 블록 (Data Block) 데이터를 유지하는 블록이다.

사상 블록 (Map Block)

블록들의 사상 정보를 유지하는 블록이다.

쓰기버퍼 블록 (Write Buffer Block)

플래시 메모리 블록에 쓰기 작업을 수행할 때 기존의 데이터에 덮어쓰기가 불가능하기 때문에 새로운 쓰기 작업을 위해 유지하는 여분의 블록이다.

체크포인트 블록 (Checkpoint Block)

체크포인트 (Checkpoint)는 사상 블록과 쓰기버퍼 블록의 주소를 유지하는 자료구조이다. 체크포인트 블록은 이러한 자료구조들을 유지하는 블록이다.

시스템 블록 (System Block)

플래시 메모리 칩의 정보와 체크포인트 블록의 개수와 물리주소 등을 유지하는 블록으로 FTL 이 시작될 때 가장 먼저 읽히는 블록이다.

그림 15 는 Vanilla FTL 에서 유지되는 블록들을 보여준다.

Vanilla FTL 은 이러한 종류들의 블록들을 이용하여 호스트 읽기/쓰기 요청을 수행한다. 호스트 읽기 요청 시에는 사상 블록의 사상 테이블을 참조하여 플래시 메모리의 물리주소를 얻어 읽게 된다. 호스트 쓰기 요청의 경우, 사상 블록을 읽어서 알아낸 물리주소에 데이터를 덮어쓸 수 없기 때문에 쓰기버퍼 블록에 데이터를 적은 후 사상정보를 갱신하여야 한다. 이 때, 사상정보를 갱신하기 위하여 사상 블록에도 새로운 정보를 써야 하기 때문에 사상 블록에 바로 덮어쓰기를 하지 못하고 쓰기버퍼 블록 중 하나의 블록에 갱신할 사상정보를 적은 후 기존의 사상정보들을 옮겨 주어야 한다. 이렇게 변경된 사상 블록과 쓰기버퍼 블록에 대한 정보를 전원이 꺼진 후에도 유지하기 위해 체크포인트 블록에 내의 페이지에 기록한다.

Vanilla FTL 에서는 체크포인트에 적힌 사상 블록과 쓰기버퍼

Write Buffer block Map block

CP

Check Point block

그림 15 Vanilla FTL의 다양한 블록[15]

블록의 주소를 이용하여 전원오류 복구가 가능하다. 사상 정보가 바뀌어 체크포인트를 기록할 때 체크포인트 블록내의 페이지들에 라운드-로빈(round-robin) 순서로 타임스탬프(timestamp)와 함께 기록한다. 전원이 꺼진 후 다시 켜질 때 FTL 은 사상 정보를 가져오기 위하여 시스템 블록을 읽어 체크포인트 블록의 주소를 얻은 후 체크포인트 블록을 찾는다. 이렇게 찾은 체크포인트 블록 내부 페이지들의 타임스탬프를 비교하여 가장 최신의 체크포인트 페이지를 찾아내면 전원이 꺼지기 직전의 사상 정보를 찾아내어 전원오류로부터 복구될 수 있다.

다음으로는 이와 같은 방법으로 전원오류 복구가 가능한 Vanilla FTL 의 전원오류 복구 시 정확성 기준을 알아본다.

관련 문서