web-dev-qa-db-ja.com

キャラクターデバイスとは何ですか?

/dev/のなじみのないファイル/エンティティ(hidraw2など)に遭遇したときに、USBドライブにパーティションを作成しようとしていました。ファイルマネージャで/ devを開いてプロパティを調べたところ、それらはcharacter devicesであると表示されます。それらについて検索していると、「ブロックデバイス」とは何かを説明する投稿に出くわしましたが、これまでのところキャラクターデバイスの投稿はありませんでした。

キャラクターデバイスとは何か、何をするのか知りたいです。また、デバイスと呼ばれる理由についても疑問に思います。

7
NurShomik

これは簡単な説明です:

  • キャラクター( 'c')デバイスは、ドライバーが単一のキャラクター(バイト、オクテット)を送受信することで通信するデバイスです。
  • ブロック( 'b')デバイスは、ドライバーがデータブロック全体を送信することで通信するデバイスです。
  • キャラクターデバイスの例:シリアルポート、パラレルポート、サウンドカード。
  • ブロックデバイスの例:ハードディスク、USBカメラ、Disk-On-Key。
  • ユーザーにとっては、デバイスのタイプ(ブロックまたはキャラクター)は重要ではありません。これはハードディスクパーティションまたはサウンドカードであることに注意してください。
  • ただし、ドライバープログラマーは注意します。

詳細は次のとおりです。

16.1.4.2ブロックおよびキャラクタデバイスブロックデバイスは、Digital UNIXでサポートされるブロックI/Oの観点から動作するように設計されたデバイスです。バッファキャッシュを介してアクセスされます。ブロックデバイスには、カーネルが提供するバッファーキャッシュからファイルシステムのブロックサイズのバッファーを使用してI/Oを実行するブロックデバイスドライバーが関連付けられています。ブロックデバイスドライバーは、最も一般的なブロックデバイスであるディスクドライブに特に適しています。

キャラクターデバイスとは、キャラクターのストリームを読み書きできるデバイスです。キャラクターデバイスには、一度に1文字を処理するラインプリンターなどのデバイスに使用できるキャラクターデバイスドライバーが関連付けられています。ただし、キャラクタードライバーは、一度に1文字ずつI/Oを実行することに限定されません(「キャラクター」ドライバーという名前にもかかわらず)。たとえば、テープドライバは頻繁にI/Oを10Kチャンクで実行します。キャラクターデバイスドライバーは、ユーザープロセスとの間でデータを直接コピーする必要がある場合にも使用できます。 I/O処理の柔軟性のため、多くのドライバーはキャラクタードライバーです。ラインプリンター、対話型端末、およびグラフィックディスプレイは、キャラクター型デバイスドライバーを必要とするデバイスの例です。

ソース:

http://haifux.org/lectures/86-sil/kernel-modules-drivers/node10.html

https://arstechnica.com/civis/viewtopic.php?t=787631

10
George Udosen