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


14

セクション5.1.4からのダイレクトメモリアクセスアンドリュー・タネンバウム、ハーバート・ボス、2014年までに近代オペレーティングシステム

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

ここに画像の説明を入力してください

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

    • 最初に、ディスクコントローラは、ブロック全体がコントローラの内部バッファに格納されるまで、ブロック(1つまたは複数のセクタ)をドライブからビットごとにシリアルに読み取ります。
    • 次に、チェックサムを計算して、読み取りエラーが発生していないことを確認します。次に、コントローラーが割り込みを発生させます。オペレーティングシステムが実行を開始すると、ループを実行することで、コントローラーのバッファーからディスクブロックを一度に1バイトまたは1ワードずつ読み取り、各反復でコントローラーデバイスレジスタから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コントローラーはどのデバイスで操作を制御および実行しますか?

ありがとう!


あなたの理解はバスマスタリングに基づいているように思われますが、それはその教科書で説明されているDMAの概念よりも現代的だと思います。教科書のDMAの概念はより原始的です。
-rwong

本が使用する単純化されたモデルの図を追加しました。
ティム

図の矢印3は、テキストの説明と一致していないようです...おめでとうございます。どちらが正しいかを判断するには、ステップ3のバスタイミング図が必要になります。さらに重要なことは、ステップ3でどのデバイスがデータ信号を保持しているのかを調べる必要があることです。ディスクコントローラーは最初にデータをDMAコントローラーに送信し、次にDMAコントローラーはデータを繰り返します(バスに独自の電圧をかけます) )メモリに?
rwong

手順4の「確認」も疑わしいです。DMAは、コピーするバイト数を既に知っていませんか?
rwong

明確にする方法がわからない。OSやアーキテクチャに関するどの本を勉強しましたか、または最高だと思いますか?
ティム

回答:


7

Q1

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

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

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

Q2

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

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

Q3(種類)

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

事例証拠:ディスクからメモリへのDMA転送について最初に学んだのは1997年頃で、IDEコントローラーがDMAの使用を開始したときに、IDEがDMAを実行できるように「マザーボードIDEコントローラー」ドライバーを取得する必要がありました。 、ハードディスクからの読み取りにはCPU時間の約6〜10%がかかりますが、同じ設定のDMAはCPU時間の約1%を使用します。それ以前は、SCSIディスクコントローラを備えた派手なシステムのみがDMAを使用していました。


5

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

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

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

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

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

    • メモリバス?つまり、メモリチップと通信していると考えられます。すなわち、RAS(行アクセスストロボ)、CAS(列アクセスストロボ)、...
    • 非常にまれ-メモリチップと通信するには、DRAMタイミング(レイテンシ)に応じてコマンドを発行することについて非常に正確である必要があります-数クロックサイクルが早すぎたり遅すぎたりすると、データ損失が発生します。
  • だから...ディスクコントローラはバスを「実際に」何と考えていますか?

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

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


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

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


一番下の行では、しかし:

  • 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のシリコン内に隠されています。コントローラ。


あなたがそれを非常に紛らわしいと思うなら-私もそれを紛らわしいと思う-あなたは図を必要とするでしょう。たくさんの図。システム図。バス図。タイミング図。状態遷移図。等


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.