아무튼 공부중/system programing

[시프] Garbage Collection

멍정 2023. 11. 1. 17:46

Consequence of Out-of-Place Updates

덮어쓰기가 안되기 때문에 clean page에 값을 넣다보면 언젠가 자리가 없어질 것이다.

-> 그럼 write가 안되니까 invalid를 지우자!

How about Erasing Invalid Page?

invalid값을 다 지워버리자!

-> but erase는 block단위이기 때문에 불가능!

 

< 읽기쓰기 기본 단위는 page지만 삭제는 block!

 

 

 

 

What of a To-Be-Erased Block Holds Valid Page?

- block단위로 삭제할 수 있으니 valid값을 새로운 block에 넣고 전부 invalid해진 block을 지워버리자!

Valid Page Movement

새로운 block에 값을 옮겼다면 mapping table에 주소 업데이트 해줘야함!

 

 

 

 

 

Garbage Collection(GC) Process

1. clean block 수가 임계값 이하가 되면 FTL이 GC를 호출하고

2. GC가 불리면 지워질 블럭(victim block)을 선택하고

3. victim blocks에 valid page가 없다면 삭제한다.

4. 만약 valid page가 있다면 clean page로 옮기고 그 후에 삭제한다

5. clean block 수가 임계값 이상이 되면 GC를 중지한다.

< in femu

Invocation / Termination (호출 / 종료)

GC Threshold보다 free blocks이 적으면 erase한다.

 

 

 

 

 

 


flash memory는 덮어쓰기가 안되기 때문에 항상 clean page에 값을 넣는데 clean page가 임계값 이하가 되면 GC를 발생시킨다.

이 때 block단위로 erase하기 때문에 valid값이 있는 page는 다른 block에 옮기고 전부 invalid가 된 block을 삭제한다.

이 과정에서 valid값이 이동하였기 때문에 FTL의 mapping table을 업데이트 해줘야한다.