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