DMAが利用可能な場合、プロセッサはディスクブロックの長い読み取りまたは書き込み要求をDMAにルーティングし、他の作業に集中できることを読みました。ただし、この転送中は、メモリデータ/制御チャネルへのDMAがビジーです。この間にプロセッサは他に何ができますか?
4 に答える
まず第一に、DMA(それ自体)はほとんど完全に時代遅れです。最初に定義されたように、DMAコントローラーは、バスにメモリーの読み取り/書き込みとI/Oの読み取り/書き込みをアサートするための別々のラインがあるという事実に依存していました。DMAコントローラは、メモリ読み取りとI / O書き込み(またはその逆)の両方を同時にアサートすることにより、これを利用しました。次に、DMAコントローラはバス上に連続するアドレスを生成し、データはメモリから読み取られ、バスサイクルごとに出力ポートに書き込まれます(またはその逆)。
ただし、PCIバスには、メモリの読み取り/書き込みとI/Oの読み取り/書き込み用に別々のラインがありません。代わりに、特定のトランザクションに対して1つ(そして1つだけ)のコマンドをエンコードします。通常、PCIはDMAを使用する代わりに、バスマスタリング転送を実行します。これは、I / Oデバイスとメモリ間でメモリを転送するDMAコントローラの代わりに、I/Oデバイス自体がメモリとの間で直接データを転送することを意味します。
その時点でCPUが他に何ができるかについては、すべて異なります。DMAが一般的だった頃、答えは通常「それほど多くない」でした。たとえば、初期のバージョンのWindowsでは、フロッピーディスク(DMAコントローラーを使用していました)の読み取りまたは書き込みにより、システムがほぼロックされていました。
ただし、現在、メモリの帯域幅は通常I / Oバスよりもかなり広いため、周辺機器がメモリの読み取りまたは書き込みを行っている場合でも、通常、CPUが使用できる帯域幅はかなり残っています。さらに、最近のCPUは通常、かなり大きなキャッシュを備えているため、メインメモリをまったく使用せずに何らかの命令を実行できることがよくあります。
注意すべき重要な点は、CPUバスは常にDMAによって部分的に使用され、チャネルの残りの部分は他のジョブ/プロセスの実行に自由に使用できることです。これは、I/Oに対するDMAの主な利点です。これがあなたの質問に答えたことを願っています:-)
ただし、この転送中は、メモリデータ/制御チャネルへのDMAがビジーです。
忙しいということは、あなたが飽和状態にあり、他の同時転送を行うことができないという意味ではありません。確かに、メモリの応答性は通常よりも少し劣る可能性がありますが、CPUは依然として有用な作業を実行できます。また、CPUが妨げられることなく実行できることは他にもあります。すでにキャッシュにあるデータを処理したり、ハードウェア割り込みを受信したりするなどです。データの量ですが、生成される速度:一部のデバイスはハードリアルタイムでデータを作成し、すぐに消費する必要があります。そうしないと、データが上書きされて失われます。DMAなしでこれを処理するには、ソフトウェアが自分自身を次に、CPUコアは、待機と読み取りをスピンします。ほとんどの場合、それ以上のデータの準備ができていなくても、スケジューラのタイムスライス全体で他のタスクにスワップされることはありません。
DMA転送中、CPUはアイドル状態であり、メモリバスを制御できません。高インピーダンス状態を使用してCPUをアイドル状態にします