야후
YAFFS![]() | 이 문서는 현재가 아닐 수 있지만 기간을 지정하지 않은 이벤트 또는 주제에 대한 것입니다. |
개발자 | 찰스 매닝 |
---|---|
풀네임 | 또 다른 플래시 파일 시스템 |
다른. | |
지원되는 운영 체제 | Android, Firefox OS, Linux, Windows CE, pSOS, RTEMS, eCos, ThreadX, LCOS |
Yaffs(Yet Another Flash File System)는 Alleph One 회사를 위해 Charles Manning이 설계하고 작성한 파일 시스템입니다.
Yaffs1은 이 파일 시스템의 첫 번째 버전이며 512바이트 페이지 크기(+ 16바이트 스페어(OOB;Out-Of-Band) 영역)를 가진 당시 최신 NAND 칩용으로 설계되었습니다.2002년에 작업이 시작되었고, 그 해 말에 처음 출시되었습니다.초기 작업은 Toby Churchill Ltd와 Brightstar Engineering이 후원했습니다.
이러한 오래된 칩은 일반적으로 페이지당 2~3회의 [1]쓰기 사이클을 허용합니다.YAFS는 이 점을 이용합니다.더티 페이지는 특정 스페어 영역 바이트에 기입함으로써 마킹됩니다.최신 NAND 플래시 칩은 처음에는 2K 페이지(+64바이트 OOB)로, 나중에는 4K로 더 큰 페이지를 가지고 있으며 쓰기 요구 사항이 더 엄격합니다.소거 블록(128킬로바이트) 내의 각 페이지는 순차적으로 기입해야 하며 각 페이지는 [citation needed]1회만 기입해야 합니다.
"한 번 쓰기 규칙"("한 번 쓰기 속성")을 적용하는 스토리지 시스템을 설계하면 몇 가지 [2]이점이 있습니다.
YAFS2는 이러한 새로운 칩을 수용하도록 설계되었습니다.이는 YAFS1 소스 코드를 기반으로 하며, 가장 큰 차이점은 내부 구조가 512바이트 크기를 가정하도록 고정되어 있지 않고 각 기록된 페이지에 블록 시퀀스 번호가 배치된다는 것입니다.이렇게 하면 "한 번 쓰기" 규칙을 위반하지 않고 이전 페이지를 논리적으로 덮어쓸 수 있습니다.2003년 말에 발매되었습니다.
YAFS는 데이터 무결성을 높은 우선순위로 유지하는 견고한 로그 구조 파일 시스템입니다.YAFS의 세컨더리 목표는 하이 퍼포먼스입니다.일반적으로 YAFS는 대부분의 [3]대체 수단보다 성능이 우수합니다.또한 휴대용으로 설계되어 Linux, WinCE, pSOS, RTEMS, eCos, ThreadX 및 다양한 특수 목적 OS에서 사용되고 있습니다.변형된 'YAFS/Direct'는 OS, 임베디드 OS 또는 부트로더가 없는 상황에서 사용됩니다. 즉, 코어 파일 시스템은 동일하지만 상위 및 하위 레벨 코드와 NAND 플래시 하드웨어에 대한 인터페이스가 단순합니다.
YAFS 코드베이스는 GPL 및 Aleph One에서 제공되는 제품별 라이선스로 라이선스됩니다.
YAFS1
플래시 메모리를 소거하는 것 이외에는, YAFS 파일 시스템을 초기화하는 특별한 순서는 없습니다.불량 블록이 발견되면 YAFS는 블록 스페어 영역의 5바이트를 마킹하는 스마트미디어 방식을 따릅니다.이렇게 표시된 블록은 이후 [clarification needed]할당되지 않은 상태로 유지됩니다.
파일 데이터를 쓰기 위해 YAFS는 처음에 타임스탬프, 이름, 경로 등의 파일메타데이터를 설명하는 페이지 전체를 씁니다(YAFS 용어로는 chunk).새 파일에는 고유한 개체 ID 번호가 할당됩니다. 파일 내의 모든 데이터 청크는 스페어 영역 내에 이 고유한 개체 ID를 포함합니다.YAFS는 이러한 청크의 물리적인 위치의 RAM에 트리 구조를 유지합니다.청크가 더 이상 유효하지 않은 경우(파일이 삭제되거나 파일의 일부가 덮어쓰기됨), YAFS는 청크의 스페어 영역에 있는 특정 바이트를 '더티'로 표시합니다.블록(32페이지) 전체가 더티로 마크되면 YAFS는 블록을 삭제하고 공간을 회수할 수 있습니다.파일 시스템의 빈 공간이 부족하면 YAFS는 양호한 페이지 그룹을 새 블록으로 통합합니다.그런 다음 YAFS는 원래 블록 내의 더티 페이지가 사용한 공간을 회수합니다.
YAFS 시스템은 NAND 플래시 장치를 마운트할 때 각 블록을 방문하여 예비 영역을 스캔하여 유효한 데이터를 확인해야 합니다.그런 다음 이 정보를 사용하여 메모리에 상주하는 트리 데이터 구조를 재구성합니다.
YAFS2
YAFS2는 YAFS1과 비슷한 개념으로 동일한 코드를 공유합니다.YAFS2 코드베이스는 하위 호환성을 통해 YAFS1 데이터 형식을 지원합니다.가장 큰 차이점은 YAFS2가 최신 NAND [4]플래시의 "한 번 쓰기" 요구사항을 충족하기 위해 상당한 홉을 통과해야 한다는 것입니다.
YAFS2는 새로 쓴 모든 블록에 단조롭게 증가하는 시퀀스 번호를 마킹합니다.청크의 순서는 블록 시퀀스 번호와 블록 내의 청크오프셋에서 추론할 수 있습니다.따라서 YAFS2가 플래시를 스캔하여 동일한 오브젝트를 가진 여러 청크를 검출하는 경우ID 및 ChunkNumbers는 가장 큰 시퀀스 번호를 사용하여 어떤 것을 사용할지 선택할 수 있습니다.효율성의 이유로 YAFS2에는 축소 헤더의 개념도 도입되어 있습니다.예를 들어 파일의 크기를 작게 하면 YAFS1은 영향을 받는 모든 청크를 더티로 표시합니다.YAFS2는 "한 번 쓰기" 규칙으로 인해 이 작업을 수행할 수 없습니다.대신 YAFS2는 "수축 헤더"를 씁니다.이것은, 그 이전의 특정의 페이지수가 무효인 것을 나타냅니다.이것에 의해, YAFS2는 시스템 재기동시에 파일 시스템의 최종 상태를 재구축 할 수 있습니다.
YAFS2는 NAND 플래시의 보다 추상적인 정의를 사용하여 다양한 기하학적 구조, 불량 블록 처리 규칙 등을 가진 다양한 플래시 부품에 사용할 수 있습니다.
이후 YAFS2는 일반 마운트 검색을 바이패스하는 체크포인팅 지원을 추가해 마운트 시간을 매우 빠르게 할 수 있게 되었습니다.퍼포먼스는 다양하지만 2GB의 마운트 시간은 3초로 [citation needed]보고되었습니다.
「 」를 참조해 주세요.
레퍼런스
- ^ 플래시 지우기 블록을 지우면 모든 비트가 1s로 설정되고 쓰기 블록(지우기 블록보다 작지만 파일 시스템 블록보다 클 수 있음)을 쓰면 선택한 비트가 0s로 설정됩니다.0에 쓰는 비트가 이전에 쓰기 블록에서 1s였던 경우 블록에 대한 하나 또는 두 개의 추가 쓰기가 지속될 수 있습니다.이미 0이었던 비트에 0을 쓰면 0이 "스틱" 상태가 될 위험이 있습니다. 즉, 비트를 [citation needed]1로 되돌리려면 여러 개의 소거가 필요할 수 있습니다.말할 필요도 없이 이 멀티 쓰기 방식은 일반적으로 플래시 벤더에 의해 테스트 및 보증되지 않았으며 비 SLC 플래시 기술에서는 전혀 작동하지 않습니다.
- ^ 잭 B.데니스; 광알가오, 그리고 비벡 사르카르."공동연구: 다코어 프로세서를 사용한 고성능 컴퓨팅을 위한 프로그래밍 모델과 스토리지 시스템" 페이지 4
- ^ "Flash filesystem benchmarks Linux 3.1".
- ^ "YAFFS 2 Specification and Development Notes".
외부 링크
- 공식 웹사이트
- 최초의 NAND 전용 플래시 파일 시스템인 YAFS를 소개합니다.
- Unyaffs: YAFS2 이미지를 언팩하는 심플한 프로그램.
- yaffs2s:Linux에서 YAFS2 이미지를 작성/해동하는 유틸리티.