II-26-2. ファイル入出力プログラムの構成

ファイルシステムの概要と、リエントラント性やデバイス独立性などファイルシステムに求められる要件を説明する。さらに実際のファイルアクセスに関する動作の詳細を示し、組み込みアプリケーションからファイルを利用する操作手順の概要について述べる。

【学習の要点】

* 組み込みシステムのファイルシステムには、リエントラント性、デバイス独立性といった要件がある。

* 組み込みアプリケーションからファイルシステム、デバイスドライバを通して外部機器を利用する手順を学習する。

* 組み込みで使われるファイルシステムではJFFS (Journaling Flash File System)などフラッシュデバイス用のファイルシステムの採用が進んでいる。

図II-26-2. ファイルシステムの位置づけ

【解説】

1) ファイルシステムの機能

ファイルシステムはディスク入出力のデータをユーザにとって使いやすい「ファイル」という形式に変更する仕組みを提供する。

* 組み込みシステムのファイルシステムにはリエントラント性、デバイス独立性といった要件がある。

- リエントラント性は、複数のタスクから同期・非同期にアクセスされても正しいデータを返す性質を指す。

- デバイス独立性は、ハードウェアに依存したコードを書かずに済むようにすることであり、ファイルシステムがデバイスドライバを包含する構成を取ることにより実現される。

* カーネルの提供するインタフェースにより、統一的なアクセスが得られる。

- VFS (Virtual File System)という仮想ファイルシステムにより(II-6-5.)、各種ファイルシステムのアクセス方法の差異を吸収する仕組みがLinuxでは採用されている。

- アプリケーションがopen, read, writeなどのシステムコールを発行すると、カーネル内のシステムコールを経て、VFSにより各ファイルシステム固有の処理が実行される。

2) ファイルシステムタスク

* iノードによるファイルとディスクの関連づけ

- VFSでは、iノード(index node)がディスクのインデックスを持ち、ファイルとディスクの情報を関連づける。

* ブロック単位のディスク管理

- Unixでは伝統的にディスクをブロックという固定長の単位(4kbytesなど)で管理する方法をとっていた。Ext2fs(ext2)はその代表例である。

- ext2ファイルシステムでは、作成時に平均的なファイルサイズの予測を行ってブロックのサイズを決定する(1024, 2048, 4096bytesのいずれか)。作成されたブロックをブロックグループとして管理する。

3) 組み込みシステムファイルシステムの具体例

* JFFS (Journaling Flash File System)

- Linuxで初期から使われていたNOR型フラッシュメモリ用のジャーナリングファイルシステムである。近年は、デバイスの寿命を延ばすための改良版であるJFFS2やNAND型フラッシュデバイスに対応したYAFFS (Yet Another Flash File System), およびその拡張であるYAFFS2などが利用される。

* cfamfs

- 読み込み専用の圧縮ファイルシステムである。小さなROMなどに焼き付ける用途の設計であり、ファイルサイズは16MB未満、ファイルシステムは256MB以下に制限される。

* その他

- XFS, Reiserfsなども組み込みシステムで利用される。

OSS Course Naviのコンテンツは IPA OSS モデルカリキュラムを基としています。