はじめに
「昔はよく、パフォーマンスを改善するためにDMA転送を使ってプログラムしてたよ。」
と飲み会の場で、上司から聞くことがあるかもしれません。(ないかもしれません)
今回は、そもそもDMA転送って何?っていうのを説明したいと思います。
DMAって何?
DMA=”Direct Memory Access”の略になります。
これは、CPUを介さずにメモリと周辺機器間でデータを直接転送する技術で、これによりCPUの負荷を軽減し、データ転送の効率を向上させる機能です。
少し小難しいですね。。
これを例えると・・・
レストランのオーダーを例にして考えてみましょう。
"CPU(シェフ)"が一人でやっている場合、シェフは料理(データ)を作り、直接テーブル(メモリや周辺機器)に運ぶ必要があります。
そうすると、運んでいる間に料理(データ)を作れずに提供が遅くなってしまいます。
ここで、"ウェイター(DMAコントローラ)"の登場です。
シェフは料理(データ)を作り、ウェイターに料理(データ)を渡します。
ウェイターはテーブル(メモリや周辺機器)に料理を運んでくれるので、シェフは料理(データ)に専念することができ、効率があがります。
このように料理(データ)を専門で渡すことをDMA転送と呼びます。
なぜ昔のプログラマはDMA転送を気にしていたのか
昔のプログラマがDMA転送を気にしていたのは、CPUの負荷を軽減し、効率的にデータを転送する必要があったからです。
当時のコンピュータは、今と比べてスペックが低く、処理能力が限られていました。
そのため、CPUがデータ転送を直接行うと、他の重要な処理が滞ってしまうことがよくありました。
例えば、音声やビデオのリアルタイム処理、ネットワーク通信などでは、データ転送の遅延が許されませんでした。
そこで、DMA転送が登場しました。
DMAを使うことで、CPUを介さずにメモリと周辺機器間でデータを直接転送できるため、CPUの負荷を大幅に軽減し、システム全体の効率を向上させることができました。
このように、限られたリソースを最大限に活用するために、DMA転送は非常に重要な技術だったのです。
最後に
現在ではPCの性能も上がっているため、設計や実装の際にはあまり気にしないかもしれません。
ただ、DMA転送の仕組みを知っておくと、システムのパフォーマンスを上げるための強力な武器になる(かもしれません)ので、今回紹介させていただきました。