総合手引 | セクション 4 | English | Deutsch | オプション |
一般に、デバイスの抽象化の上位層では、 共通的なシステムコール群が提供されます。 これらのシステムコールはカーネルの上位層によって 対応するデバイスドライバへ送られます。 デバイスに利用できるシステムコール群は、 open(2), close(2), read(2), write(2), ioctl(2), select(2), mmap(2) から選ばれます。 すべてのドライバがこれらのシステムコールすべてを 実装しているわけではありません。例えば、 mmap(2) を端末デバイス上で呼び出しても何の役にも立たないでしょう。
devfs(5) が完全に機能していなければ、各デバイスノードは静的に、 かつ関連するデバイスドライバの存在とは無関係に、作成される必要があります。 大抵は MAKEDEV(8) を実行させて作成します。
これはつまり、一貫した状態にならないかもしれないということです。 関連するドライバが設定されていないようなデバイスノードが 存在するかもしれませんし、デバイスの検出に成功したのに、 対応するデバイスノードがまだ無いために アクセスできないドライバが存在するかもしれません。 前者の場合では、そのデバイスノードを通してデバイスを参照しようとしても、 カーネルの上位層からエラーが返されます。 通常このエラーは ‘ENXIO’ です。 後者の場合では、ドライバとデバイスを使えるようにするには、 デバイスノードを作成する必要があります。
デバイスによっては 2 種類に分かれることがあります。 ブロック型 (block) デバイス と キャラクタ型 (character) デバイス です。より正確に言えばすなわち、 バッファリングされるデバイスとバッファリングされないデバイス (raw デバイス) です。 ‘ls -l’ の出力では、ファイルの型の識別に文字 ‘b’ と ‘c’ で慣習的な呼び名を表しています。 バッファリングされるデバイスは、 オペレーティングシステムのバッファキャッシュを経由してアクセスされています。 そして、このようなデバイスは、その上位にファイルシステムを 重ねることのみを目的としています。 通常、バッファリングされるデバイスは、 ディスクやディスク風デバイス、 それに歴史的な理由からテープデバイスにのみ実装されます。
raw デバイスはすべてのドライバに利用できます。 これにはバッファリングされるデバイスも実装するようなドライバも含みます。 そのようなデバイスでは、慣習的にデバイスノードのパス名に文字 ‘r’ を前置して違いを表します。 例えば、 /dev/rda0 は 1 台目の SCSI ディスク用の raw デバイスを表します。一方、 /dev/da0 は同じくバッファリングされるデバイスのデバイスノードです。
バッファリングされないデバイスは、 ファイルシステム操作に関連しない動作すべてに用いられるでしょう。 これはそのデバイスがディスクデバイスだとしてもです。 これには、ディスクパーティション全体のバックアップを取るときや、 raw フロッピディスクへバックアップする場合を含みます (このとき、フロッピディスクはテープのように使われます) 。
デバイスノードへのアクセス制限は、 カーネル内部のドライバによって直接に暗黙指定されているわけではなく、 普通はそのデバイスノードエントリの通常ファイルパーミッションの問題です。
FreeBSD 2.1 | INTRO (4) | January 20, 1996 |
総合手引 | セクション 4 | English | Deutsch | オプション |
このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.
“ | A typical Unix /bin or /usr/bin directory contains a hundred different kinds of programs, written by dozens of egotistical programmers, each with its own syntax, operating paradigm, rules of use ... strategies for specifying options, and different sets of constraints. | ” |
— The Unix Haters' handbook |