ファイルとは
Rev.1を表示中。最新版はこちら。
ファイルとは、ハードディスクに保存されたデータを連想しますが、カーネルとしてファイルとは、カーネルとカーネル内部の情報も含めた外部とのデータのやり取りするインターフェースにしか過ぎません。そしてこのインターフェースをVFSと言いますが、スペシャルファイルなり通常ファイを読み書きする場合、まずかかるiノードを取得します。これは、カーネル下で管理しているルートからのdentryオブジェクトを捜査する事で行います。
(dentryの管理は、ファイルシステム/マウントの話であって、ここでの話とは別ものです。)
そしてこのiノードが取得できると、かかる装置に対応するコールバック関数が取得でき、我々の馴染みとなるfile構造体にバインドされます。そして、そのファイルIDでread/writeする事で外部装置とのデータのやり取りが行えるということです。
なお、inodeがスペシャルファイルの場合、iノードからデバイスのメジャー/マイナー番号を取得し、それに対応するコールバック関数をコールすることになります。
従って。iノードに緋もづくコールバック関数は、対応するドライバ、ファイルシステム(ext2/ext3等)の仕事であり、カーネルはその事に関与する必要はないのです。
漠然とは分かっていたものの、ある程度はその実装も見えてきた、改めてunixというかLinuxのアーキテクチャーの素晴らしさを認識したことろです。