Flash memory
)?플래시 메모리(영어: flash memory, 문화어: 흘래쉬기억기, 전기일괄소거형기억기)는 전기적으로 데이터를 지우고 다시 기록할 수 있는(electrically erased and reprogrammed) 비휘발성 컴퓨터 기억 장치를 말한다. - Wikipedia 플래시 메모리
Wear leveling
)를 고려해야 함Wear leveling
): 위에서 설명한 것처럼 플래시 메모리의 각 블록은 제한된 삭제 연산 횟수를 가지므로 하나의 블록만을 쓰고 지우고 하다보면, 해당 블록을 사용할 수 없게 된다. 따라서 각 블록의 연산 횟수를 저장하여 이를 바탕으로 블럭들을 재배치(remapping)하거나 분산(seperate) 하여 제품의 수명을 증대시키는 기법을 의미한다.clean
: erase
연산을 수행하여 block
내의 모든 페이지가 지워졌을 경우, 해당 블록 내의 페이지를 clean
상태라 부른다.valid
: clean
상태의 페이지에 데이터를 기록하면 해당 페이지는 valid
상태가 된다.invalid
: valid
상태의 페이지의 데이터를 지우거나 갱신하여 더 이상 사용하지 않게 된 경우 이를 invalid
라 부른다. 그러므로 flash memory
에 유효한 페이지가 없더라도 clean
한 페이지가 존재하지 않을 수도 있다 (모든 페이지가 invalid
상태인 경우). 따라서 블록을 erase
하여 invalid
한 페이지를 clean
한 상태로 바꿔놓는 작업이 필요하다.
MTD
(Memory Technology Device) MTD (Memory Technology Device)
란 플래시 메모리와 통신하기 위한 리눅스의 장치 파일(device file
) 이다.
USB Stick
, MMCs
, SDs
, CompactFlashes
그리고 그 외 알만한 장치들은 MTD
가 아니다. 비록 이들이 Flash Memory
를 포함하고 있지만 이는 FTL (Flash Translation Layer)
인터페이스를 통ㅎ애 block device
를 통해 숨겨져 있다.
MTD 구조
User Space Applications
System Call
을 호출하는 사용자 프로그램
VFS (Virtual File System)
가상화된 파일 시스템
Dedicated Flash File Systems
플래시 메모리의 종류에 관계없이 MTD
가 제공하는 인터페이스를 이용하여 YAFFS
, JFFS
등과 같은 플래시 전용 파일 시스템이나 FTL
등의 소프트웨어를 제공한다.
MTD (Memory Technology Device)
실제 플래시 메모리에 명령을 내려 저수준 I/O 를 처리하며 MTD Glue Logic
에 일관된 인터페이스를 제공한다.
NAND flash memory chip
실제 물리적인 flash memory 장치
YAFFS (Yet Another Flash File System)
YAFFS (Yet Another Flash File System)
는 Aleph One
회사의 Charles Manning
에 의해 설계되고 또 개발되어진 파일 시스템이다.
YAFFS
의 페이지 구조 YAFFS
는 NAND
플래시 메모리의 각 페이지를 chunk
라고 부르며, 각 페이지의 Spare
영역을 가지고 이를 tag
라 부른다. 각 chunk
는 header
혹은 data
이다.
data
는 말 그대로 유저가 메모리에 기록한 데이터이고, header
는 파일에 대한 메타 데이터로 파일의 이름, 크기, 속성, 변경 시간 등의 정보가 저장되어진다.
YAFFS
의 자료구조 YAFFS
는 mounting
시에 플래시 메모리에서 모든 헤더 chunk
들을 RAM
으로 읽어와서 파일 시스템 자료구조를 구축한다. 이를 통해 yaffs_ObjectStruct
를 읽어오고 읽어들인 yaffs_ObjectStruct
객체들을 서로 연결하여 파일 시스템의 트리 구조를 형성한다.
yaffs_ObjectStruct
객체 내에는 다시 yaffs_Tnode
구조체가 존재하고 이는 해당 오브젝트의 실제 데이터 위치를 나타낸다.
[사이트] https://ko.wikipedia.org/wiki/플래시_메모리
[사이트] https://tech.kakao.com/2016/07/15/coding-for-ssd-part-3/
[사이트] https://performance.tistory.com/67
[책] 리눅스 커널 내부구조 (백승제, 최종무 저)
[사이트] https://kr.transcend-info.com/embedded/Essay-22
[이미지] https://www.researchgate.net/figure/Page-state-transition-diagram-Figure-2-shows-the-state-transition-diagram-of-pages-in_fig1_228796748
[사이트] https://en.wikipedia.org/wiki/Memory_Technology_Device
[이미지] https://www.researchgate.net/figure/I-O-request-software-stack-and-Flashmon-location-in-the-Linux-NAND-storage-hierarchy_fig1_264929595
[사이트] https://en.wikipedia.org/wiki/YAFFS
[이미지] https://www.researchgate.net/figure/Structure-of-YAFFS-Spare-area_fig6_224128307
[이미지] https://www.researchgate.net/figure/Structure-of-yaffs-Object_fig5_224128307
[이미지] https://blog.naver.com/crom991/150021063866