セクション5.1.4からのダイレクトメモリアクセスアンドリュー・タネンバウム、ハーバート・ボス、2014年までに近代オペレーティングシステム、
説明を簡単にするために、図5-4に示すように、CPU、メモリ、I / Oデバイスを接続する単一のシステムバスを介して、CPUがすべてのデバイスとメモリにアクセスすると仮定します。
DMAがどのように機能するかを説明するために、DMAが使用されていないときにディスク読み取りがどのように発生するかをまず見てみましょう。
- 最初に、ディスクコントローラは、ブロック全体がコントローラの内部バッファに格納されるまで、ブロック(1つまたは複数のセクタ)をドライブからビットごとにシリアルに読み取ります。
- 次に、チェックサムを計算して、読み取りエラーが発生していないことを確認します。次に、コントローラーが割り込みを発生させます。オペレーティングシステムが実行を開始すると、ループを実行することで、コントローラーのバッファーからディスクブロックを一度に1バイトまたは1ワードずつ読み取り、各反復でコントローラーデバイスレジスタから1バイトまたは1ワードを読み取り、メインメモリに格納できます。
Q:2番目のステップでは、
データは「コントローラーのバッファー」からメインメモリーに転送されませんか?「コントローラのバッファから」と「コントローラデバイスのレジスタから」の両方が表示されるのはなぜですか?
2番目のステップでは、コントローラーはCPUに割り込むことなく、OSを再度関与させることなく、バッファーからメインメモリにデータを転送できますか?
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コントローラーが必要な理由が理解できないので、見積もりを理解するために重要な何かを見逃していると思います)。
- まず、CPUはレジスタを設定してDMAコントローラーをプログラムし、何をどこに転送するかを認識します(図5-4のステップ1)。
デバイスのデバイスコントローラーは、デバイスを制御し、デバイスで操作を実行します。DMAコントローラーはどのデバイスで操作を制御および実行しますか?
ありがとう!