YAFFS
From Wikipedia, the free encyclopedia
| YAFFS | |
|---|---|
| 開発者 | Charles Manning |
| 正式名 | Yet Another Flash File System |
| 導入 | () |
| 構造 | |
| 限度 | |
| 特徴 | |
| 対応OS | Linux, Windows CE, pSOS, eCos, ThreadX |
YAFFS (Yet Another Flash File System) はCharles Manningによりデザインされ、記述された。所属はAleph Oneであり、ニュージーランドのWhitecliffsにある。
Yaffs1はこのファイルシステムの最初のバージョンであり、512バイトに16バイト(OOB;Out-Of-Band)の予備領域を持たせた当時最新鋭のNANDチップ向けの最初のファイルシステムであった。作業は2002年に開始され、その年の後半に最初にリリースされた。最初の作業は、Toby Churchill LtdとBrightstar Engineeringが後援した。これらのより古いチップは通常1ページあたり2~3回書き換えることができた。YAFFSにおいて、ダーティーページはマークされ、特定の予備領域に記録された。
より新しいNANDフラッシュはより大きなページを持っている。最初は2048バイト+64バイト予備領域であり、後に4Kのより大きいページを持ち、後者の方がより書き込み要件が厳しくなります。
消去ブロック(128キロバイト)内の各々のページはシーケンシャルに書き込まなければならず、しかも一度に書き込まなければならない[要出典]。
「ライトワンスルール」(「ライトワンスプロパティ」)を適用するストレージシステムを設計することには、いくつかの利点がある[1]。
YAFFS2はこれらのより新しいチップに対応するようデザインされた。YAFFS2はYAFFS1のソースコードに基づいていて、大きな違いとしては内部構造は512バイトサイズに固定されておらず、ブロックシーケンス番号は各々の書き込まれたページに置かれている。これにより古いページは「ライトワンス」ルールに違反すること無く論理的に上書きされる。2003年後半にリリースされた。
YAFFSは頑丈なログ構造ファイルシステムであり、データ完全性に高い優先度が設定されている。YAFFSの2番目の目標はハイパフォーマンスである。YAFFSはほとんどの代替よりも通常効率が良いだろう。また、ポータブルなデザインとなっており、Linux、Microsoft Windows Embedded CE、pSOS、RTEMS、eCos、ThreadXを始めとして様々な専用目的のOSで使用可能である。変種である「YAFFS/Direct」はOSを持たない環境、組み込みOS、ブートローダで使用され、中枢のファイルシステムとしてだけでなくOSとNANDフラッシュとのシンプルなインターフェイスとしての役割も持つ。
このファイルシステムはGPLおよびAleph Oneとのプロダクトライセンスの両方でライセンスされている。
フラッシュメモリを単に消去する以外に、YAFFSファイルシステムを初期化するための特別な手順はない。不良ブロックが検出されると、YAFFSはブロックのスペア領域の5番目のバイトをマークするスマートメディアスキームに従う。そのようにマークされたブロックは、それ以降は未割り当てのままである[要説明]。
ファイルデータを書き込むために、YAFFSは最初にタイムスタンプ、名前、パスなどのファイルメタデータを説明するページ全体(YAFFS用語ではチャンク)を書き込む。新しいファイルには、一意のオブジェクトID番号が割り当てられ; ファイル内のすべてのデータチャンクには、スペア領域内にこの一意のオブジェクトIDが含まれる。YAFFSは、これらのチャンクの物理的な場所のツリー構造をRAMに維持する。チャンクが無効になると(ファイルが削除されるか、ファイルの一部が上書きされ)、YAFFSはチャンクのスペア領域の特定のバイトを「ダーティ」としてマークする。ブロック全体(32ページ)がダーティとしてマークされている場合、YAFFSはブロックを消去してスペースを再利用できる。 ファイルシステムの空き領域が少ない場合、YAFFSは適切なページのグループを新しいブロックに統合する。 次に、YAFFSは、元の各ブロック内のダーティページによって使用されていたスペースを再利用する。
YAFFSシステムがNANDフラッシュデバイスをマウントする場合、各ブロックにアクセスして、スペア領域をスキャンして有効なデータを確認する必要がある。次に、この情報を使用して、メモリに常駐するツリーデータ構造を再構成する。