Linux ユーザーとして、ブロック デバイスまたはキャラクター デバイスを使用する必要がある状況に遭遇したことがありますか?ブロック デバイスとキャラクター デバイスは、外観と機能は似ていますが、実装方法と使用方法が大きく異なります。今日は、Linux のブロック デバイスとストリング デバイスを深く理解し、それらの違いと正しい使用方法を探っていきます。
固定サイズのデータ片 (チャンク) にランダムに (順番ではなく) アクセスできるシステム内のデバイスはブロック デバイスと呼ばれ、これらのデータ片はブロックと呼ばれます。最も一般的なブロック デバイスはハードディスクですが、フロッピー ディスク ドライブ、CD-ROM ドライブ、フラッシュ メモリなど、他にも多くのブロック デバイスがあります。これらはすべてファイル システムをマウントする方法で使用されることに注意してください。これがブロック デバイスへの一般的なアクセス方法です。
もう 1 つの基本的なデバイス タイプは、キャラクタ デバイスです。キャラクタ デバイスは、キャラクタ ストリームに従って順序どおりにアクセスされ、シリアル ポートとキーボードはすべてキャラクタ デバイスです。ハードウェア デバイスがキャラクタ ストリームとしてアクセスされる場合、そのデバイスはキャラクタ デバイスとして分類される必要があり、逆に、デバイスがランダムに (順不同で) アクセスされる場合、そのデバイスはブロック デバイスとなります。
これら 2 種類のデバイスの基本的な違いは、ランダムにアクセスできるかどうか、つまり、デバイスへのアクセスがある場所から別の場所に自由に移動できるかどうかです。たとえば、キーボードのようなデバイスはデータ ストリームを提供し、文字列「fox」を入力すると、キーボード ドライバーは入力とまったく同じ順序で 3 文字からなるデータ ストリームを返します。キーボード ドライバーに文字列を順番どおりに読み込ませたり、他の文字を読み取ったりするように要求しても意味がありません。したがって、キーボードは典型的な文字デバイスであり、キーボードが提供するのは、ユーザーがキーボードから入力した文字ストリームです。キーボードから読み取ると、最初に「f」、次に「o」、次に「x」、最後にファイルの終わり (EOF) という一連の文字が生成されます。誰もキーボードを入力していないときは、文字ストリームは空です。ハードディスク デバイスの場合は状況が異なります。ハードディスク デバイスのドライバーは、ディスク上の任意のブロックの内容の読み取りを要求し、その後、他のブロックの内容の読み取りを要求する場合があります。ディスク上の読み取りブロックの位置は連続している必要はないため、ハード ディスク デバイスのディスクはランダムにアクセスでき、ストリームとしてアクセスされるのではなく、明らかにブロック デバイスです。
ブロック デバイスのカーネル管理は、キャラクター デバイスの管理よりもはるかに詳細であり、考慮する必要がある問題と完了する作業は、キャラクター デバイスの管理よりもはるかに複雑です。これは、キャラクター デバイスが制御する必要があるのは 1 つの場所 (現在の場所) だけであるのに対し、ブロック デバイスはメディアの異なるセクション間を行き来できる場所にアクセスできなければならないためです。したがって、実際には、カーネルはキャラクター デバイスを管理するための専用のサブシステムを提供する必要はありませんが、ブロック デバイスの管理にはサービスを提供する専用のサブシステムが必要です。ブロック デバイスの複雑さがキャラクタ デバイスの複雑さよりもはるかに高いだけでなく、より重要な理由は、ブロック デバイスの実行パフォーマンスに対する要件が非常に高いことです。ハードディスクを追加使用するたびに、システム全体のパフォーマンスが向上し、そのパフォーマンスが向上します。キーボードのスループット速度を 2 倍にするよりもはるかに大きな効果があります。さらに、これから説明するように、ブロック デバイスは複雑であるため、そのような最適化の余地が多く残されています。
裸のデバイス
簡単に言うと、ブロックデバイスはランダムにアクセスできますが、キャラクターデバイスはランダムにアクセスできません。
raw ディスク デバイスなどの raw デバイスをランダムに読み取ることはできませんか?次に、生の機器を使用してデータベースに 2G データ ファイルを作成します。最後のデータ ブロックにアクセスするために、Oracle は以前のデータ ブロックをすべて読み取る必要があります。明らかに事実と一致しません。このように説明される場合、オペレーティング システムをランダムに読み取ることはできません。読み取りだからといって、データベースもランダムに読み取ることができないわけではありません。
ブロック デバイスは、物理ディスクから直接ではなく、システム キャッシュを通じて読み取られます。キャラクターデバイスは、システムキャッシュを経由せずに物理ディスクから直接読み取ることができます。 (キーボードなど、適宜直接割り込み)
この記事の導入を通じて、ブロック デバイスと文字列デバイスの実装と使用には大きな違いがあることがわかりました。つまり、ブロックデバイスはブロックデータの入出力を指向しており、ストリングデバイスは文字ストリーム型の入出力を指向しています。同時に、実際のアプリケーションでは、必要に応じて適切なデバイス タイプを選択し、対応するコマンドを使用して作成、マウント、フォーマットなどの操作を行うことができます。一般に、ブロック デバイスとストリング デバイスの使用法を習得することは、Linux システムのパフォーマンスの最適化と管理レベルを向上させる上で非常に重要です。
以上がLinux におけるブロック デバイスと文字列デバイスの違いとその使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。