web-dev-qa-db-ja.com

DMAコントローラはどのように機能しますか?

セクション5.1.4からのダイレクトメモリアクセスAndrew S. Tanenbaumによる最新のオペレーティングシステム、Herbert Bos、2014年

説明を簡単にするために、CPUは、図5-4に示すように、CPU、メモリ、およびI/Oデバイスを接続する単一のシステムバスを介してすべてのデバイスとメモリにアクセスすると仮定します。

enter image description here

  1. DMAがどのように機能するかを説明するために、まずDMAが使用されていない場合のディスク読み取りの様子を見てみましょう。

    • 最初に、ディスクコントローラーはドライブからブロック(1つ以上のセクター)をビット単位でシリアルに読み取り、ブロック全体がコントローラーの内部バッファーに格納されるまで続けます。
    • 次に、チェックサムを計算して、読み取りエラーが発生していないことを確認します。次に、コントローラーが割り込みを発生させます。オペレーティングシステムが実行を開始すると、ループを実行することにより、ディスクブロックをコントローラのバッファバイトまたはワードから一度に読み取ることができます。反復ごとに1バイトまたはワードを読み取りますコントローラデバイスレジスタとメインメモリに格納します。

    Q:2番目のステップでは、

    • データは「コントローラのバッファから」からメインメモリに転送されていませんか? 「コントローラのバッファから」と「コントローラのデバイスレジスタから」の両方が表示されるのはなぜですか?

    • 2番目のステップでは、CPUに割り込むことなく、またOSを再度関与させることなく、コントローラーがデータをバッファーからメインメモリに転送できますか?

  2. DMAを使用する場合は、手順が異なります。

    • 最初に、CPUはレジスタを設定してDMAコントローラをプログラムし、転送先がわかるようにします(図5-4のステップ1)。
      ディスクから内部バッファーにデータを読み込むように指示するコマンドもディスクコントローラーに発行しますで、チェックサムを確認します。
    • 有効なデータがディスクコントローラーのバッファーにある場合、DMAを開始できます。 DMAコントローラーは、バスを介してディスクコントローラーに読み取り要求を発行することによって転送を開始します(ステップ2)。この読み取り要求は他の読み取り要求と同じように見え、ディスクコントローラーは、CPUからのものかDMAコントローラーからのものかを知りません(または気にしません)。通常、書き込み先のメモリアドレスはバスのアドレスライン上にあるため、ディスクコントローラーが内部バッファーから次のワードをフェッチすると、書き込み先がわかります。メモリへの書き込みは別です標準バスサイクル(ステップ3)。
    • 書き込みが完了すると、ディスクコントローラーは肯定応答信号をDMAコントローラーに、バスを介して送信します(ステップ4)。次に、DMAコントローラは、使用するメモリアドレスをインクリメントし、バイトカウントをデクリメントします。それでもバイトカウントが0より大きい場合は、カウントが0になるまでステップ2〜4が繰り返されます。
    • その時点で、DMAコントローラーはCPUに割り込み、転送が完了したことを通知します。オペレーティングシステムの起動時に、ディスクブロックをメモリにコピーする必要はありません。それはすでにそこにあります。

    Q:2番目のステップでは、DMAコントローラーがディスクコントローラーに、データをディスクコントローラーのバッファーからメインメモリに転送するように要求します。最初のステップで、CPUはディスクコントローラーにコマンドを発行し、ディスクから内部バッファーにデータを読み取るように指示します。同時に、ディスクコントローラーがディスクからディスクコントローラーのバッファーへのデータの転送を完了すると、CPUはディスクコントローラーにディスクコントローラーのバッファーからメインメモリにデータを転送するように指示できます。 DMAコントローラは、ディスクコントローラのバッファからメインメモリにデータを転送するようにディスクコントローラに指示しますか? (ディスクとメインメモリ間のデータ転送にDMAコントローラーが必要な理由が理解できないので、見積もりを理解するために重要な何かを見逃していると思います)。

  3. デバイスのデバイスコントローラは、デバイスを制御し、デバイス上で操作を実行します。 DMAコントローラーはどのデバイスを制御および操作しますか?

ありがとう!

14
Tim

Q1

最初のステップでは、DMAを使用していないため、ディスクコントローラーの内容はプロセッサーによって1つずつ読み取られます。もちろん、プロセッサーは(データが実際に何かに使用され、捨てられるだけではないと想定して)、システムのメモリーに保管します。

この場合のバッファは、ハードディスク(コントローラ)自体のメモリの一部であり、コントローラデバイスは、ハードディスク(コントローラ)自体の制御レジスタを登録します。

OS(またはその他のソフトウェア)を使用しない場合は、何らかのDMA操作が必要であり、質問のこの部分で説明しているテキストのセクションはDMAを使用していません。したがって、いいえ、この場合、そのようなことは起こりません。

Q2

したがって、DMAコントローラの重要な点は、「デバイスの内部バッファからメインメモリにデータを保存するという面倒なタスクを実行すること」です。CPUは、両方のDMAコントローラとディスクデバイスディスク自体がこれを実行できる場合、DMAコントローラは必要ありません。

そして実際、最近のシステムでは、コントローラに「バスマスタリング」機能があるという意味で、DMA機能は通常、ハードディスクコントローラ自体に組み込まれています。つまり、コントローラ自体[〜#〜] is [〜#〜]DMAデバイスのコントローラです。ただし、 2つの個別のデバイスにより、DMAの概念全体が理解しにくくなるためです。

Q(種類)

ハードディスクを建築現場に配送されたばかりのレンガの積み重ねと考え、プロセッサはレンガを敷いて家を建てるレンガ層です。 DMAコントローラは、ブリックの積み重ねからブリック層に必要な場所にブリックを運ぶ労働者です。つまり、ブリック層は、実際のブリック敷設作業(これは自分で試したことがある場合は熟練した作業)、「フェッチアンドキャリー」という単純な作業は、あまり熟練していない作業者でも実行できます。

事例証拠:最初にDMAディスクからメモリへの転送は1997年くらいでしたが、IDEコントローラがDMAの使用を開始し、 「マザーボードIDEコントローラ」ドライバでIDEがDMAを実行できるようにします。このとき、ハードディスクからの読み取りには約6-10%かかります。ここで、DMAは、同じセットアップでCPU時間の約1%を使用します。それまでは、SCSIディスクコントローラを備えた豪華なシステムのみがDMAを使用します。

7
Mats Petersson

これは答えではありません。コメントにするには長すぎる明確化の要求です。

誰もがこの質問に答えられる前に、議論されているコンピュータシステムアーキテクチャを明確に説明する必要があります。つまり:

  • この説明に含まれるバスシステムは何ですか?

    • ほとんどのコンピュータシステムにはメモリバスがあります。
    • ほとんどのコンピュータには、他の種類のバスシステムもあります。
  • ディスクIOもメモリバスを経由しますか?

    • つまり、ディスクはアドレスにアドレスバスラインを使用し、データにデータバスラインを使用しますか?
  • ディスクコントローラはメモリバスを...

    • メモリバス?つまり、メモリチップと通信していると考えます。つまり、RAS(行アクセスストローブ)、CAS(列アクセスストローブ)、...
    • ほとんどありません-メモリチップと通信するには、DRAMタイミング(レイテンシ)に応じてコマンドを発行することが非常に正確である必要があります。
  • では、ディスクコントローラはバスを「実際には」何と考えていますか?

  • ほとんどのコンピュータシステムには、「ポートI/O」と呼ばれる種類のIOがあります。

    • ポートI/Oは、メモリバスに便乗するか、別の専用バスを持っている可能性があります。
    • ポートI/Oの特徴は、DRAMタイミングの危険性を気にする必要がない、単一の(または事前定義された定数の)バスサイクルで物事を完了することができることです。
  • より高度な(20年前から)システムには、新しいタイプのバスシステムがあります。たとえば、ISA、PCI、AGP、PCMCIA ... SCSI、ATA、SAS、SATA、FC-AL ...


現在、「議論されているコンピューターシステム」について多くの不確実性が生じているため、質問に対して明確な答えが得られない理由を理解できます。

はい、それは教科書からのものであることを知っています。コピーがあります。私はしません。 (自宅にはありませんが、オフィスに1つあります。)したがって、答えが必要な場合は、いくつかの図を表示し、コンピューターのバスシステムがどのように見えるかを説明する必要があります。


ただし、一番下の行で:

  • A DMAはプログラム可能なデバイスです。つまり、CPUはを伝える最終的な責任がありますDMA何をすべきか。もちろん、DMAがシステムを引き継ぐ時間帯の間、CPUはDMA =ショーを実行します。

  • CPU(およびそれを実行するOS)の制御下で、DMAは、1つ以上のバス(複数)の制御を引き継ぐことができます) ディスクコントローラからメインメモリへのデータ転送を容易にするため。

  • DMA=がバスを引き継ぐ(複数))期間中、DMAはそのバスを介して、つまり通常のコントローラの代わりに、つまりDMAは、CPUの仕事をしているふりをします。

  • データ転送に2つの異なるバスが含まれる場合、DMAはこれを異なるバスに対して行う必要がある場合があります。

  • 多数のバイト(ワードなど)を移動できるようにするために、DMAには、コピーされるデータの残量を追跡するためのループカウンターが含まれています。

  • メインメモリに書き込むことができるように、DMAにはCPUでプログラム可能なメモリアドレスレジスタが含まれているため、CPUはDMA =データを書き込む場所。

  • システムのバス設計に応じて、DMAは、DRAMタイミングサイクルの陰惨な詳細に対処する必要がある場合とそうでない場合があります。

  • 昔々DMAが発明されてからしばらくすると、一部の周辺機器がDMAをコントローラにプリパッケージします-これはバスマスタリングそれでも、DMAがCPUパッケージ、マザーボード、またはI/Oカードのいずれに配置されていても、最終的には制御下にある必要があります( CPUのプログラミング)。システムバス(複数)およびメインメモリへのアクセスを何らかの方法でネゴシエートする必要があるためです。

  • 最近のコンピューターシステムには、DRAMコントローラーと呼ばれる専用のサブシステムがあります。存在する場合、このDRAMコントローラーがDMAの機能も満たすことはほぼ確実です。つまり、プログラム可能な「バイトコピーループ」のように見え、前述の複雑さはすべてDRAMのシリコン内に隠されています。コントローラ。


あなたがそれを非常に混乱させると思うなら-私もそれを混乱させる-ダイアグラムが必要になるでしょう。たくさんの図。システム図。バス図。タイミング図。状態遷移図。等.


5
rwong