1

BSD read() write() 操作を使用して /dev ノードで実行された読み取り/書き込み操作がどのように HDD に到達するかを誰でも説明できますか。

それはファイルシステムを介して行われますか、それともデバイスドライバーを介して直接対話します....

4

2 に答える 2

1

たとえば、次の場合を考えてみましょう。HDDである架空の/dev/bdデバイスを開きます。カーネルは、システムコール要求を処理するために、最初に/ dev/bdパスに関連付けられたiノードを見つけようとします。成功した後、iノードのタイプが何であるかが決定され、ちょうど今読み取られています。この場合、iノードのタイプはBLOCK-SPECIFICになります。この時点で、カーネルは、このiノードがドライバー(ブロック固有のデバイスのドライバー)を表していることを認識しています。すべてのデバイスには(major_id、minor_id)ペアが関連付けられており、さまざまなデバイスを識別します。iノードでは、それを見つけることができ、カーネルは、どのドライバーが要求を処理できるかを正確に認識しています。また、要求に応じて、ドライバーの適切な機能が呼び出されます(読み取りなど)。

于 2011-11-06T09:34:12.600 に答える
1

デバイスドライバーと直接対話します。一部のオペレーティング システム (OS X については不明) はバッファ キャッシュを使用しますが、バイパスするものもあります。場合によっては、デバイス ノードに依存することもあります。たとえば、OS X には /dev/disk* と /dev/rdisk* があり、rdisk* デバイス ノードは raw アクセスです。

于 2011-08-30T03:24:44.087 に答える