ファイルのデータ型
 データ構造
 階層構造
 ファイルへのアクセス
 キャッシュ機構
 仮想ファイルシステム
 ext3
 動作

 ファイルのデータ型
 ・カーネルはファイルのデータ型を意識しない。
そのファイルを利用するAPがそれを意識する。
 ・データはバイトストリーム型

 データ構造
 ・それぞれのファイルへ、iノードというデータ構造を割り当てて管理
ファイル種別毎に操作管理テーブルを持つ。
 ・各iノードは、ビットマップ情報として、ディスクへ具体的に結び付け
ディスクのインデックス、ディスクのジオメトリを一意に識別
各iノードは、そのファイルの属性や、2次記憶装置上のブロック番号等を管理
iノードはファイルに対して一意(unique)
iノードの上限、/proc/sys/fs/inode-max
小さいfileを多く、iノードが上限に達すると、新しいfileは作れない。
 ・2.6は、iノード毎にページキャッシュを持つ。
ファイルに対して、ディスク等に書き出すページが特定し易くなる。
ページからディスク等へのに書き出しを、iノード単位に変更
ディスクなどの連続性向上
 ・スーパブロック管理用構造体
1つのfsへ1つ存在
マウントされたローカルファイルシステムに関する情報を保持
通常、iノードは書込み等で、状態が変化すると、その都度フラグを更新する。
メモリ上のスーパブロックに対して行い、ディスクへはアクセスしない。
信頼性、ディスクとメモリの不整合の可能性がでる。
Linux、定期的にディスクへ書込み
状況によっては、fsckで回復できない致命的障害

 プロセスとiノード間の階層構造
 ・プロセス群
「file object」へopen()、read()、write()
カーネル内のシステムコール(VFSでsysread()等)呼出し
カーネルは要求に従って、「file object」を生成し
それをfd(ファイルディスクリプタ、objectへのポインタ)へ関連付け、プロセスへ返す。
fdを通して、間接的にiノードを操作
 ・file object 群
カーネル操作によって、「dentry object」へ関連付けられる。
 ・dentry object
ディレクトリエントリ(ディレクトリパス)情報を管理
カーネル操作によって、「inode」へ関連付けられる。
dentry_lockup()等の関数は、ハッシュリストを検索してUSED等のエントリを見つける。
 ・inode 群
 ・ストレージデバイス

 ファイルへのアクセス
 ・ファイルオープンでファイル記述子が返却
パス名指定、open()システムコール
ファイル記述子返却(0,1,2は予め割当)
0:標準入力
1:標準出力
2:標準エラー出力
子プロセスは親プロセスが割当てた0,1,2を使用

 キャッシュ機構(ファイルアクセスを高速化)
 ・各種データをメモリ上にキャッシュ
ページキャッシュ
iノードキャッシュ
dentryキャッシュ
 ・キャッシュバッファ等のファイル処理に関する一連の操作はVFSが行う。
 ・空きメモリのほとんどをキャッシュ域として使用

 仮想ファイルシステム(VFS)
 ・ファイルシステムの形式によらず、同じIFで操作可能
  (どのAPからでも同様な手順でファイル操作が行えるような単一のIF)
 ・バックグラウンドで、アクセス権の確認や書込み待ち判断等の汎用的作業を行う。
 ・APからファイル操作のシステムコールを受付
 ・それを関連するローカルファイルシステム毎のAPIへ変換
トランスレーション
JFS、XFS、ext2、ext3、ReiserFS、iso9660
 ・バッファキャッシュ等のファイル処理に関する一連の操作を行う。
iノードキャッシュのキューの管理
キューはハッシュを先頭とした、双方向リストで管理
USED(使用(参照)中)リスト
リストの先頭へ挿入
UNSED(未使用、一次キャッシュ)リスト
LRUリストで管理され、後ろから開放
DIRTY(LOCKED)リスト
書込み要求の蓄え
カーネルは、書込まれたiノードのフラグを立てる。(ダーティビット)
ビットの付いたデータは、DIRTYバッファとして、DIRTYリストへ繋がれる。
バッファキャッシュとして、I/O待ちのI/Oリクエストキューへ入れる。
フラッシュ(updateデーモンが定期的にディスクへ書込み)
バスの転送速度へ合わせてディスクへ転送
書込み終了のリスト
USEDへ戻される。
参照が終了したらUNSEDへ入る。
USEDへ戻される
適当な時期に解放
 ・ドライバやI/Oサブシステムに対しても統一的なIFを提供
 ・VFSオブジェクト
file_system_type ローカルファイルシステムを定義する構造体
VFSは、この中の固有の命令をVFSの統一的命令へ置換え
open()→ext3_open_file()、トランスレータ機能
inode
super_block
file のオープン状態を管理
dentry
 ・ローカルファイルシステム
ホストへ直結された2次記憶装置を使用
システム起動時にVFSへ登録
 ・ネットワークファイルシステム
NFS、・・・
 ・擬似ファイルシステム
proc
sysfs (2.6~)

 ext3  (ジャーナリング(ログ)ファイルシステム)
 ・クラッシュの起動時チェック(fdisk)の時間短縮
 ・orderdモード(デフォルト)使用:メタデータのみジャーナリング
 ・メタデータ(ファイルシステム管理情報)の保持と更新
スーパーブロック
グループブロックディスクリプタ
iノード
間接ブロック
データビットマップ用ブロック
iノードビットマップ用ブロック

 ext3 動作
 ・ディスクブロックの更新(書込み)をジャーナル領域にいったん書込む。
 ・あとで、ジャーナルの内容をディスクブロックに書込む。
APの1つの書込み操作が完了してから
 ・最後にジャーナル内容を破棄する。
 ・モード
journalモード
orderdモード(デフォルト)使用:メタデータのみジャーナリング
writebackモード
 ・書込み動作 (オールorナッシング)
iノード参照、ファイルの最終ブロックを調べる。
データビットマップを参照、近くの空きブロックを見つけて使用中マーク
データブロックに書込み
iノードの情報更新
スーパーブロック、グループブロックデスクリプタにある、
空きブロック数、ダーティ情報など更新