Ext2 FS 実装
Rev.4を表示中。最新版はこちら。
編集中
Ext2 FSの実装に関するメモ。Ext2 FS自体についてはこちらを参照。
ファイルリード処理
ファイルのRead処理では、Virtual File System(VFS)から直接File SystemのReadルーチンが呼ばれるわけではない。ファイルシステムがext2の場合、VFSは汎用のファイルリード関数generic_file_read()を呼び出す(*1)。generic_file_read()はPageCacheからデータを読み出そうとし、Cacheがなかった場合にExt2のPageCacheへのデータ読み込みルーチンext2_readpage(),ext2_readpages()を呼び出す(*2)。これらのReadルーチンは、ディスクから指定されたファイルのデータを読み出して、PageCacheに格納する。ファイルシステムのReadルーチンとVFS,PageCacheとの関係は図1のとおり。
図1 ファイルシステムのRead関数の位置付け
(*1) Ext2 FSのstruct file_operationsの.readに登録されている。Ext2以外でもほとんどのファイルシステムで本関数を呼び出す。(NFSは異なる)
(*2) Ext2のstruct address_space_operationsであるext2_aopsに登録されている。
関連関数
ext2_get_block(*inode, iblock, *bh_result, create)
inodeで指定したファイル/ディレクトリ内のiblock番目のデータがディスク上のどのブロックに格納されているかを取得する。結果はbh_resultに返される。create = 1の時は、対応ブロックがなかった場合に新たに割り当てを行う。