next up previous
次へ: openメソッド 上へ: 情報システム実験(13) 戻る: 情報システム実験(13)

システムコールとメソッド(その1: dio_open, dio_release)

ユーザ空間用に作成したアプリケーションから、カーネル空間に展開したデバイ スドライバにアクセスするためには、カーネルへのシステムコールを利用する。

デバイスアクセスに使用できるシステムコールには、次のようなものがある。

これらのシステムコールを実行したときに、カーネル空間のデバイスドライバで は各システムコールに対応したメソッド(関数)を呼び出す。

呼び出されるメソッド(関数)は、情報システム実験(11)の「1.2 cdevイン ターフェイス」の「キャラクタ型デバイスドライバの登録は次のように行う」で cdev_init関数を使ってデバイスドライバの登録する時に設定した file_operations構造体の各フィールドに対応づけられる。

構造体の中の各フィールドは、特定の操作を実装するドライバのメソッド(関数) へのポインタである。サポートされていない操作の場合は、NULLのまま にしておく。


\begin{boxedminipage}{8cm}
\begin{verbatim}static struct file_operations dio_f...
...tl = NULL,
.open = NULL,
.release = NULL,
};\end{verbatim}
\end{boxedminipage}

この構造体のNULLで指定していた部分を、実際に処理を実行したいメソッ ド(関数)のポインタで置き換えて、これをcdev_init関数で対応づけるこ とで、システムコールの実行時に任意の処理を呼び出せるようになる。 (注. ownerはメソッド(関数)のプレースホルダではないため、対応する システムコールは存在しない。)

各システムコールとfile_operation構造体のメンバとの対応は次のよう になる。

ユーザ空間のopenシステムコールはカーネル空間のopenメソッド に対応する。同様にユーザ空間のcloseシステムコールはカーネル空間の releaseメソッドに対応する。



Subsections

MANOME Yoichi 平成19年1月6日