리눅스 커널 내부구조 부록 #B, MTD 와 YAFFS

문연수·2022년 3월 29일
0

iamroot (Linux Internal)

목록 보기
24/24

1. 플래시 메모리란(Flash memory)?

플래시 메모리(영어: flash memory, 문화어: 흘래쉬기억기, 전기일괄소거형기억기)는 전기적으로 데이터를 지우고 다시 기록할 수 있는(electrically erased and reprogrammed) 비휘발성 컴퓨터 기억 장치를 말한다. - Wikipedia 플래시 메모리

- 플래시 메모리의 특징

  • 읽기, 쓰기, 삭제의 세 가지 연산 지원
  • 연산 수행 단위의 비대칭성 (e.g. 읽기는 페이지 단위, 삭제는 블록 단위)
  • 연산 수행 시간의 비대칭성 (e.g. 읽는데 20us, 쓰는데 200us, 삭제하는데 1.5ms)
  • 덮어쓰기(Overwrite)가 불가능함
  • 각 블록 당 제한된 숫자의 삭제 연산 횟수를 가지므로, 마모도 평준화(Wear leveling)를 고려해야 함

- 플래시 메모리에서 사용되는 용어

  • 페이지: 메모리 연산 수행의 최소 단위
  • 블록: 페이지의 집합
  • 마모도 평준화(Wear leveling): 위에서 설명한 것처럼 플래시 메모리의 각 블록은 제한된 삭제 연산 횟수를 가지므로 하나의 블록만을 쓰고 지우고 하다보면, 해당 블록을 사용할 수 없게 된다. 따라서 각 블록의 연산 횟수를 저장하여 이를 바탕으로 블럭들을 재배치(remapping)하거나 분산(seperate) 하여 제품의 수명을 증대시키는 기법을 의미한다.

- 페이지 상태 전이

  • clean: erase 연산을 수행하여 block 내의 모든 페이지가 지워졌을 경우, 해당 블록 내의 페이지를 clean 상태라 부른다.
  • valid: clean 상태의 페이지에 데이터를 기록하면 해당 페이지는 valid 상태가 된다.
  • invalid: valid 상태의 페이지의 데이터를 지우거나 갱신하여 더 이상 사용하지 않게 된 경우 이를 invalid 라 부른다.

 그러므로 flash memory 에 유효한 페이지가 없더라도 clean 한 페이지가 존재하지 않을 수도 있다 (모든 페이지가 invalid 상태인 경우). 따라서 블록을 erase 하여 invalid 한 페이지를 clean 한 상태로 바꿔놓는 작업이 필요하다.

2. 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 장치

3. YAFFS (Yet Another Flash File System)

YAFFS (Yet Another Flash File System)Aleph One 회사의 Charles Manning 에 의해 설계되고 또 개발되어진 파일 시스템이다.

-YAFFS 의 페이지 구조

YAFFSNAND 플래시 메모리의 각 페이지를 chunk 라고 부르며, 각 페이지의 Spare 영역을 가지고 이를 tag 라 부른다. 각 chunkheader 혹은 data 이다.

data 는 말 그대로 유저가 메모리에 기록한 데이터이고, header 는 파일에 대한 메타 데이터로 파일의 이름, 크기, 속성, 변경 시간 등의 정보가 저장되어진다.

- YAFFS 의 자료구조

YAFFSmounting 시에 플래시 메모리에서 모든 헤더 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

profile
2000.11.30

0개의 댓글