BSD read() write() 操作を使用して /dev ノードで実行された読み取り/書き込み操作がどのように HDD に到達するかを誰でも説明できますか。
それはファイルシステムを介して行われますか、それともデバイスドライバーを介して直接対話します....
たとえば、次の場合を考えてみましょう。HDDである架空の/dev/bdデバイスを開きます。カーネルは、システムコール要求を処理するために、最初に/ dev/bdパスに関連付けられたiノードを見つけようとします。成功した後、iノードのタイプが何であるかが決定され、ちょうど今読み取られています。この場合、iノードのタイプはBLOCK-SPECIFICになります。この時点で、カーネルは、このiノードがドライバー(ブロック固有のデバイスのドライバー)を表していることを認識しています。すべてのデバイスには(major_id、minor_id)ペアが関連付けられており、さまざまなデバイスを識別します。iノードでは、それを見つけることができ、カーネルは、どのドライバーが要求を処理できるかを正確に認識しています。また、要求に応じて、ドライバーの適切な機能が呼び出されます(読み取りなど)。
デバイスドライバーと直接対話します。一部のオペレーティング システム (OS X については不明) はバッファ キャッシュを使用しますが、バイパスするものもあります。場合によっては、デバイス ノードに依存することもあります。たとえば、OS X には /dev/disk* と /dev/rdisk* があり、rdisk* デバイス ノードは raw アクセスです。