Ext2 FS 実装
編集中
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に格納する。全体の流れは図1のとおり。
図1 ファイルシステムのRead関数の位置付け
(*1) Ext2 FSのstruct file_operationsの.readに登録されている。Ext2以外でもほとんどのファイルシステムで本関数を呼び出す。(NFSは異なる)
(*2) Ext2のstruct address_space_operationsであるext2_aopsに登録されている。これらのルーチンはmpageモジュールの読み込みルーチンであるmpage_readpage(),mpage_readpages()を呼び出しているだけ。
関連関数
ext2_get_block(*inode, iblock, *bh_result, create)
inodeで指定したファイル/ディレクトリ内のiblock番目のデータがディスク上のどのブロックに格納されているかを取得する。結果はbh_resultに返される。create = 1の時は、対応ブロックがなかった場合に新たに割り当てを行う。
関連ページ
Ext2 FSgeneric_file_read()
mpage