ディスクの読み取りまたは書き込みが発生した場合、データはどこに行きますか?


10

バッファーを含むディスクコントローラーのようなものがあることを理解していますが、CPUがこのバッファーから直接読み取るのか、またはデータを最初にメモリ内の特定の場所に移動してから、それ自体を読み取る必要があるのか​​疑問に思っていましたCPUで?

誰かがバッファが何と呼ばれているのか知っていますか?そして、DMAはこれらすべてにどのように適合しますか?

回答:


20

ディスク読み取りの場合、データフローは基本的に次のとおりです。

  • 読み取り/書き込みアセンブリが要求されたシリンダーにある後、要求された読み取り/書き込みヘッドが選択されます。
  • 各セクターで、セクターIDが読み取られます。読み取られたセクター番号が要求されたセクター番号と一致する場合、セクターデータが読み取られます。
  • セクターデータはシリアルビットストリームとして読み取られ、バイトに変換されます。
  • セクターのバイトはセクターバッファー(通常はコントローラーのSRAM)に格納されます。このセクターバッファーは、「ディスクキャッシュ」とは異なります。
  • セクター全体が読み取られると、データはECCを使用して検証され、おそらく修正されます。
  • 検証されると、セクターデータはコントローラーからホストPCに転送されます。注:このセクターバッファーの存在はよく知られていないため、ホスト(egATA)インターフェイスの転送速度がR / Wヘッドのビットレートによって制限または制限されているという誤解が広まっています。これらの2つのデータ転送は独立した順次操作であり、同時ではないため、これは完全に誤りです。
  • PCがATAインターフェイスを介してディスクコントローラーからデータを受信すると、PCはプログラムされたI / O(CPUがATAポートのデータレジスタを繰り返し読み取り、値を宛先メモリにコピーする)またはDMA(DMAコントローラーはATAポートのデータレジスタからメモリバッファーにNバイトをコピーするための設定(CPUの介入なし)。
  • データを受け取るPCのメモリ「バッファ」は、アプリケーションのバッファ(ブロックI / Oシステムコールを使用する場合)、またはファイルシステム制御下の内部システムバッファ、あるいはデータがスワップからのものである場合はプログラムまたはデータメモリである可能性があります。エリア(またはページファイル)。

ディスクへの書き込みも同様ですが、データがPCからディスクコントローラーに転送され、ECCが計算され、要求されたセクターが特定され、データがセクターバッファーからプラッターに書き込まれる点が異なります。

追加のクレジット:

DMAチェーンとメモリアドレスとバッファー長のスキャッターギャザーリストを使用する「スキャッターギャザー」転送について読んでください。「スキャッターギャザー」転送では、1つの大きな連続したメモリバッファーの代わりに、ディスクI / O要求用に非連続のメモリーバッファーを集約することができます。


1
最近、非機械的なドライブがより頻繁に使用されているため、「R / Wヘッド」について少し具体的ではないかもしれませんが、それは良い答えです。
Shinrai、2011年

@Shinrai-私は、可動アームのディスクドライブでの直接のプログラミング経験しかありません(そして、固定ヘッドドライブを使用しました)。SSDの動作に関する2番目または3番目の情報を推測または繰り返さないことを選択します。
おがくず

このすばらしい答えの+1、十分に文書化および記述されています。とてもプロフェッショナル。
climenole

2

カーネルがディスクのドライバを割り当てた特定のメモリ領域に入ります。特に名前が付けられているとは思いません。このメモリ領域は通常、リングバッファとして構成されます。OSによっては、このメモリがアプリケーションが使用するユーザースペースにもう一度コピーされる場合があります。

DMAは、( -ウェイ事ポーリングとして知られているディスクドライブのコントローラが直接より多くのデータが利用可能である場合は、それを聞いて、繰り返しCPUを持たずにRAMに書き込むことができることを意味し、「ダイレクトメモリアクセス」で使用行われます)。代わりに、バッファー全体が転送されると、コントローラーはCPUに割り込み、データが使用可能になったことを知らせます。

さらに低いレベルに興味がある場合は、ドライバーがioctl呼び出しを行います


1
リングバッファーは、データが要求せずに(予期せず保留中の読み取り要求なしに)到着する可能性があるため、通常、ネットワークデバイス(イーサネットコントローラーなど)で使用されます。ディスクドライブ/コントローラからのデータは、常にホストからの要求に応答します。データは送信請求されるため、ディスクドライバーに「リングバッファー」は必要ありません。
おがくず2011年

OK私はDACをドライバーレベルでのみ使用しており、それらもリングバッファーを使用しているので、想定していた。
アーロンD.マラスコ2011年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.