System)は、各プロセスが同手順でファイル操作を行えるように、単一のインターフェイスを提供しているファイルシステムです。Linuxは以下のようなファイルシステムをサポートしている。ufs~各ファイルシステムの上位には、vfs(仮想ファイルシステム)があり、下位にはデバイスドライバがある。vfsはファイルシステムの論理的イメージを操作し、vfs以下の各ファイルシステムモジュールで、論理イメージと物理イメージの変換を行っている。デバイスドライバへのI/Oは、ファイルデータはページキャッシュ経由で行われ、ディレクトリ等は、バッファキャッシュ経由で行われる。ページキャッシュは、バッファキャッシュに分割され、バッファキャッシュ処理でI/Oされるので、ページキャッシュはバッファキャッシュにも登録される。システムコールを呼び出した場合のvfsの動作について簡単に示します。アプリケーションは、どのファイルシステム上に存在するファイルかまったく気にしなくて良い。ext3上のファイルだったり、xfs上のファイルだったりはvfsが解決する。mini詳解Q:vfsはどうやって、アクセス先のファイルシステムを特定するのか?A:例えばreadの場合は以下の動作で各ファイルシステムに振り分ける。1.マウント時に各ファイルシステムはジャンプテーブルを用意します。2.対象ファイルディスクリプターよりfile構造体を得る。(fget_light関数→fcheck_filesマクロでtask_structのfilesを参照する)(task_structはkernelの重要な動作を成す核なので、ここでは割愛します。)(kernelの動きについては。後で参考になるURL貼っておきます。対象ファイルシステムのread登録関数でファイルシステム毎の処理を行う。各ファイルシステムは、各ファイルシステムのルールに則り、ディスクアクセス等を行い、ユーザが要求した操作を実現するのが目的である。ファイルアクセス操作の流れ1.ユーザがある部分のデータをread?する2.vfsがext3にread?するよう指示を出す3.ext3はディスクアクセスをし、read?したデータをvfsに返す4.vfsはユーザにread?したデータ返す5.ユーザが受け取る。後はアセンブラのコードまで行って、実際の読み込みが行われます。VFS→各ファイルシステムのoperationlinuxカーネルソース/include/linux/fs.hの解説ファイルシステムはmountして、read?、write?して、umount?してと、いろいろ動きます。いろいろなファイルシステムが動くし、いろいろなプロセスが動きます。ファイルシステムは常に動くわけではなく、必要なときだけkernelより呼び出され、ファイルシステムが操作されます。必要なときだけ呼び出されるには、kernelによってあらかじめ決められた構造体に関数を登録することが必要です。CPUが2つ以上(smp?カーネル)の場合、同時にrename?が動いたりすると困るので、kernel-lock(排他制御)などkernelの動きを止めたり(一部分)する機構があります。kernel-lockはファイルシステムと非常に密接な関係ですが、そんなことまで書く時間が無いので省略。#編集中なので気にしないでください。#内容もメモ書き程度です。サーバー調整のため長時間アクセスできない状況が続き、ご迷惑をおかけして申し訳ありませんでした。現在は復旧しております。問題がありましたら、不具合報告までご連絡をお願いします。