バッファを含むディスクコントローラのようなものがあることは理解していますが、CPUがこのバッファから直接読み取るのか、それともデータを最初にメモリ内の特定の場所に移動してから自分自身を読み取る必要があるのか疑問に思っていましたCPUによって?
バッファが何と呼ばれるかも知っている人はいますか?そして、DMAはこれらすべてにどのように適合しますか?
ディスク読み取りの場合、データフローは基本的に次のとおりです。
ディスクへの書き込みも同様ですが、データがPCからディスクコントローラーに転送され、ECCが計算され、要求されたセクターが特定されてから、データがセクターバッファーからプラッターに書き込まれる点が異なります。
追加のクレジットの場合:
"scatter-gather"転送を読んでください。これはDMAチェーンを使用しますおよびメモリアドレスとバッファ長のスキャッタギャザーリスト。 1つの大きな連続したメモリバッファの代わりに、「スキャッタギャザー」転送を使用すると、ディスクI/O要求に対して非連続のメモリバッファを集約できます。
カーネルがディスクのドライバを割り当てた特定のメモリ領域に入ります。具体的な名前はないと思います。このメモリ領域は通常、 リングバッファ として設定されます。 OSによっては、このメモリをアプリケーションが使用するためにユーザースペースにもう一度コピーする場合があります。
[〜#〜] dma [〜#〜] は「ダイレクトメモリアクセス」です。これは、ディスクドライブのコントローラがCPUを使用せずにRAMより多くのデータが利用可能かどうかを繰り返し尋ねます(ポーリングと呼ばれます-物事の使用方法の実行方法)。代わりに、バッファー全体が転送されたら、次に、コントローラーはCPUに割り込んで、データが使用可能になったことを通知します。
さらに低いレベルに興味がある場合、ドライバーは ioctl 呼び出しを行います。