DMAとは(全体像)
ふつう、装置(SSDやネットワークカードなど)とメモリの間でデータを動かすときは、CPUがいちいち仲介する。でもそれだとCPUがデータ運びに忙しくなり、本来の計算ができない。
そこで使うのがDMA。専用の担当(DMAコントローラ)にデータの運搬を任せ、CPUは別の仕事に集中する。
身近にたとえると、CPUは上司、DMAはアシスタント。上司が「この資料を倉庫から運んで」と指示し(開始)、アシスタントが運び、終わったら「完了しました」と報告する(終了)。運搬の間、上司は別の重要な仕事に集中できる。これがDMAの本質だ。
詳しく:CPUの関わり方と転送モードだけ覚えれば戦える
ここが記事の心臓部。まずCPUの関わり方を押さえよう。
DMAの動きとCPUの関わり
| 場面 | 担当 | CPUの関わり |
|---|---|---|
| 転送の開始 | CPUがDMACに指示 | あり(割込み) |
| 転送中 | DMACが運ぶ | なし(CPUは別の仕事) |
| 転送の終了 | DMACがCPUに報告 | あり(割込み) |
ここで取り違えやすいのが、「DMAならCPUは完全に不要」ではないこと。開始と終了のときだけCPUが割込みで関わる。転送中はCPUは関わらず、別の処理に集中できる。
次に、データの運び方には2つのモードがある。
転送モード2種
| モード | 動き | 特徴 |
|---|---|---|
| サイクルスチール | CPUが使う合間を少しずつ借りて運ぶ | CPUへの影響が小さい・転送は遅め |
| バーストモード | 一気にまとめて運ぶ(その間CPUは待つ) | 転送が速い・CPUは待たされる |
つまり、こまめに少しずつ運ぶのがサイクルスチール、一気にまとめて運ぶのがバースト。小さく頻繁な転送ならサイクルスチール、大量データの一括転送ならバースト、と使い分ける、というわけだね。
わかりやすく言い換えると
要するに、DMAは「データ運びをアシスタントに任せて、CPUは本業に集中する」しくみだ。
①直接転送 … 装置とメモリを直接つなぎ、CPUは仲介しない(負担が減る)
②CPUの関わり … 開始と終了だけ(完全に不要ではない)
③2モード … サイクルスチール(こまめに少しずつ)/バースト(一気にまとめて)
「DMAでもCPUは開始・終了で関わる」だけは取り違えやすい。
試験のツボ
🔴 一番出る:CPUを介さず直接転送
①装置とメモリを直接つなぎ、CPUの仲介を省く
②転送中はCPUが別の仕事に集中できる(負荷軽減)
🔴 次に出る:CPUの関わりは開始・終了だけ
①DMACが転送を担当する
②開始と終了のときだけCPUに割込みで知らせる
🟡 押さえると安定:転送モード
①サイクルスチールはこまめに少しずつ(CPU影響小)
②バーストは一気にまとめて(速いがCPUは待つ)
よくある間違い
①「DMAならCPUは完全に不要」→ ✗ 開始と終了のときはCPUが割込みで関わる。不要なのは転送中だけ。
②「サイクルスチールとバーストは同じもの」→ ✗ サイクルスチールはこまめ、バーストは一気で、性能の特性が違う。
③「DMAはCPUがデータを1つずつ運ぶしくみ」→ ✗ CPUを介さず、DMACが直接運ぶ。CPUが運ぶのではない。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(DMAのしくみ)
DMAに関する次の記述のうち、正しいものはどれか。
- DMAはCPUがデータを1つずつ手作業で運ぶしくみで、CPUの負担はかえって増える
- DMAはデータをいっさい運ばず、転送が必要かどうかを調べるだけのしくみとされている
- DMAはCPUを介さず装置とメモリを直接つないで、CPUの負担を減らすしくみである
- DMAはメモリを使わず、すべてのデータをCPU内部だけで処理するしくみとされている
解答は 3 である。
DMAはCPUを介さず装置とメモリを直接つなぎ、CPUの負担を減らすしくみなのだ。運搬をアシスタントに任せるイメージなるぞ。
選択肢1の「CPUが手作業」、選択肢2の「運ばない」、選択肢4の「CPU内部だけ」はどれも誤りである。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | CPUを介さず運ぶ |
| 2 | ✗ | データを運ぶ |
| 3 | ✓ | 直接転送でCPU負荷を減らす |
| 4 | ✗ | メモリと装置の間で運ぶ |
オリジナル問題2(CPUの関わり)
DMAとCPUの関わりに関する次の記述のうち、正しいものはどれか。
- DMAでは開始と終了だけCPUが割込みで関わり、転送中はCPUは別の仕事に取り組める
- DMAではCPUがいっさい関わらず、開始も終了もCPUは関知しないものとされている
- DMAではCPUが転送の最初から最後までつきっきりで、別の仕事はできないものである
- DMAではCPUが転送の途中だけ関わり、開始と終了にはいっさい関わらないものとされる
解答は 1 である。
DMAでは開始と終了のときだけCPUが割込みで関わり、転送中はCPUは別の仕事ができるのだ。完全に不要なわけではないなるぞ。
選択肢2の「いっさい関わらない」、選択肢3の「つきっきり」、選択肢4の「途中だけ」はどれも誤りである。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✓ | 開始・終了で関わり転送中は不要 |
| 2 | ✗ | 開始・終了で関わる |
| 3 | ✗ | 転送中は別の仕事ができる |
| 4 | ✗ | 関わるのは開始と終了 |
オリジナル問題3(転送モード)
DMAの転送モードに関する次の記述のうち、正しいものはどれか。
- サイクルスチールは一気にまとめて運び、バーストはこまめに少しずつ運ぶものとされる
- サイクルスチールはこまめに少しずつ運び、バーストは一気にまとめて運ぶモードである
- サイクルスチールもバーストもまったく同じ運び方で、性能に違いはないものとされる
- 転送モードは1種類しかなく、サイクルスチールやバーストという区別はないものとされる
解答は 2 である。
サイクルスチールはこまめに少しずつ運び、バーストは一気にまとめて運ぶモードなのだ。小さく頻繁ならサイクルスチール、大量一括ならバーストなるぞ。
選択肢1はサイクルスチールとバーストが逆。選択肢3の「同じ」、選択肢4の「1種類」も誤りである。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 2つが逆 |
| 2 | ✓ | サイクルスチール=こまめ・バースト=一気 |
| 3 | ✗ | 性能特性が違う |
| 4 | ✗ | 2種類ある |
まとめ
押さえどころ
- 🔴 DMAのしくみ = CPUを介さず装置とメモリを直接つなぎ、CPUの負担を減らす。担当はDMAC。
- 🔴 CPUの関わり = 開始と終了だけ割込みで関わる。転送中は別の仕事ができる(完全に不要ではない)。
- 🟡 転送モード = サイクルスチール(こまめ・CPU影響小)、バースト(一気・速いがCPUは待つ)。
次に学ぶ
執筆: SikakuQuest編集部