キャラクタースペシャルファイルとブロックスペシャルファイルは、Unixライクなシステムの通常のファイルとどう違うのですか?なぜそれぞれ「キャラクタースペシャル」と「ブロックスペシャル」と呼ばれているのですか?
プログラムがファイルからデータを読み取ったり書き込んだりすると、要求はカーネルドライバーに送られます。ファイルが通常のファイルの場合、データはファイルシステムドライバーによって処理され、通常はディスクまたは他のストレージメディアのゾーンに格納されます。ファイルから読み取られるデータは、以前その場所に書き込まれたものです。さまざまなことが発生する他のファイルの種類があります。
データがデバイスファイルに読み書きされると、要求はそのデバイスのドライバーによって処理されます。各デバイスファイルには、使用するドライバーを識別する番号が関連付けられています。デバイスがデータを処理するのは独自のビジネスです。
ブロックデバイス(ブロックスペシャルファイルとも呼ばれる)は通常、通常のファイルと同様に動作します。これらはバイトの配列であり、特定の場所で読み取られる値は、最後にそこに書き込まれた値です。ブロックデバイスからのデータをメモリにキャッシュし、キャッシュから読み戻すことができます。書き込みはバッファリングできます。ブロックデバイスは通常シーク可能です(つまり、アプリケーションが変更できるファイル内の位置の概念があります)。 「ブロックデバイス」という名前は、通常、対応するハードウェアが一度にブロック全体(たとえば、ハードディスク上のセクター)を読み書きするという事実から来ています。
キャラクターデバイス(キャラクタースペシャルファイルとも呼ばれます)は、パイプやシリアルポートなどのように動作します。それらへの書き込みや読み取りは即座に実行されます。ドライバーがデータを処理するのは、それ自体のビジネスです。キャラクターデバイスにバイトを書き込むと、画面に表示され、シリアルポートに出力され、サウンドに変換されます...デバイスからバイトを読み取ると、シリアルポートが入力を待機する場合があり、ランダムに返される場合がありますバイト(/dev/urandom
)、...「キャラクターデバイス」という名前は、各キャラクターが個別に処理されることから来ています。
詳細は Wikipedia および / devとそのサブディレクトリとファイルについて を参照してください。
それらはドライバーを指し、[mknod][1]
によって作成できます。マニュアルページを見ると、キャラクターデバイスはバッファリングされていないのに対して、ブロックデバイスはバッファリングされているようです。ブロックデバイスには、アクセス可能なブロックのサイズを示す「ブロックサイズ」があります。 (ストレージデバイスの場合、ブロックサイズは通常512 Bと4 KiBの間です)ストレージデバイスとメモリは通常ブロックデバイスとしてアクセスされますが、シリアルポートやターミナルなどのデバイスは通常キャラクターデバイスとしてアクセスされます。
それらは通常/ devにあります(そしてnodev
オプション(またはそれに相当するもの)でマウントされたパーティションでは機能しません)
ls -l
では、通常サイズが見つかる場所にあるデバイスの2つのコンマ区切りの数値を表示します。それらは、ドライバーを指すメジャー番号とマイナー番号です。それらのタイプは、ls -l
の出力の許可列に「c」または「b」として示されます。
/ devはいくつかの方法で入力できます。最近のLinuxカーネルバージョンでは通常 dev が使用され、Solarisでは仮想devfsファイルシステムである/ devicesへのリンクが含まれています。
Unix/Linuxでのファイルタイプ:通常または通常のファイル、ディレクトリ、デバイス(特殊)ファイル、リンク、名前付きパイプ、およびソケット。
デバイス(特殊)ファイルは、通常のファイルのようにファイルシステムに表示されるデバイスドライバのインターフェイスです。これらは、キャラクターデバイス、ブロックデバイス、および擬似デバイス(/dev/null
など)です。
Character-drivenは一度に1文字を送信するため、小さな負荷で運ぶ必要がありますが、多くのリクエストを行う必要があります。 ブロック駆動型は、文字(データ)の大きなコレクションを取得することを意味します。これにより、**大きな負荷がかかりますが、実行する要求が少なくなります。 分析:基本的には、ボトルまたはクレートでソーダを購入するのと同じです。
ブロックドリブンは、予想できるデータ量がわかっている場合に役立ちます。これは、ディスク上のファイルによく見られます。
データがいつ停止するかわからない場合は、文字駆動型の方がより実用的です。したがって、文字がなくなるまで実行を続けます。たとえば、サーバーから受信するデータストリームのサイズがわからない場合のインターネット接続。
例: