他のUNIXシステムではストレージデバイスとして文字デバイスが必要ですが、Linuxではそうでないのはなぜですか?
他のUNIXオペレーティングシステム(AIX、HPUX、Solaris、およびmacOS)は、「/dev/rdisk#」や「/dev/disk#」などのストレージデバイスを使用します。
答え1
私の考えでは、このウィキペディアの記事https://en.wikipedia.org/wiki/Raw_deviceよく説明されています:
コンピューティング、特にUnixまたはUnixファミリーのオペレーティングシステムでは、rawデバイスは、オペレーティングシステムのキャッシュとバッファをバイパスしてハードドライブなどのストレージデバイスに直接アクセスできるようにする文字デバイスファイルに関連付けられている特殊な論理デバイスです(ハードウェアキャッシュは引き続き使用されます。することができます)。データベース管理システムなどのアプリケーションはrawデバイスを直接使用できるため、この操作をオペレーティングシステムに送信するのではなく、データのキャッシュ方法を管理できます。
FreeBSDでは、すべてのデバイスファイルは実際にはrawデバイスです。バッファ管理を簡素化し、スケーラビリティとパフォーマンスを向上させるために、FreeBSD 4.0では、rawデバイスではなくデバイスのサポートが削除されました。1
Linuxカーネルでは、rawデバイスは廃止され、O_DIRECTフラグを代わりに使用できるため、ある時点で削除される予定です。
答え2
ブロックデバイスにインターフェイスするときにネイティブインターフェイスを使用したいのは、通常はネイティブインターフェイスがより速いためです。オペレーティングシステムは、ブロック特殊ファイルに対してのみバッファキャッシュを実行します。
テープなどのメディアから非常に大きなファイルを読み書きする場合、オペレーティングシステムのバッファキャッシュはブロックを何度も読み取らないため、何の利点もありません。生のデバイスインターフェイスを使用すると、不要なシステムアクティビティを回避できます。
磁気メディアで非常に大きなストリーミングファイルを処理するときにRAWデバイスインターフェイスを使用するもう1つの理由は、RAWインターフェイスが非常に大きなブロックサイズをサポートして非常に高いデータ転送速度を達成できるためです。ブロックデバイスインターフェイスを使用してデバイスにアクセスするとき、すべての読み書きはシステムバッファを通過する必要があるため、ファイルシステムのブロックサイズ(通常は1Kまたは2Kバイト)に制限されます。生のデバイスを使用している場合は、32K以上のブロックサイズを使用できます。 ——ジョンJ.バリ、UNIXプログラマリファレンス1991.
パフォーマンスの向上に加えて、ブロックインターフェイスを介してアクセスされるファイルシステムは、キャッシュの一貫性のためにオフロードする必要があります。システムキャッシュブロックは、ディスクに書き戻されたときにブロックデバイスを介して行われた変更を損なう可能性があります。 fschk以前の分解はマイナーな迷惑です。直接アクセスが必要なアプリケーションがシステムの主な用途である場合は、さらにそうです。
あなたの元の質問への答えでは、多くの質問は非常に歴史的です。最新のシステムでは、デバイスバッファがシステムバッファより大きい場合は一般的ではありません。 (ワークステーションのメモリより大きいバッファを使用して高速プリンタに接続されたワークステーションを最後に使用したときはいつですか?)