誊肌

答撩梦急

バス

  • バスには蝗脱涪がある。
    • バスの蝗脱涪を积つ材墙拉があるものをバスマスタという。
      • 毋¨CPU、DMAコントロ〖ラ
  • バスの蝗脱涪は1刨に1つのバスマスタが狸铜することができる。
    • 毋えば、DMAコントロ〖ラがバス蝗脱涪を积っているときは、CPUはバスを蝗脱できない。
  • バスマスタが剩眶赂哼するときに、バス蝗脱涪の拇匿を乖うものをバスア〖ビタという。
    • バスコントロ〖ラはこのバスア〖ビタの怠墙を积つ。

DMA∈Direct Memory Access∷数及

 バスマスタ〖の涪嘎があれば、コンピュ〖タの回带炭吾废琵を积つ。これにより件收チップやメモリを毁芹布に弥くことができる。コンピュ〖タが弹瓢した木稿は答塑弄にMPUがバスマスタ〖になる。ところが、眷圭によってデ〖タの啪流を光庐步するために、DMAコントロ〖ラ∈毋えばディスプレイインタフェ〖スに矢机や茶咙を啪流するとき∷やFDコントロ〖ラ∈FDとデ〖タの粕み今きをする箕∷にバスマスタ〖の涪嘎を败すことがある。

 デ〖タ翁が驴いとき、マイコンバスCPUの毁芹から艰り惧げ、办箕弄に戮の刘弥がこのバスを漓铜して、跟唯を惧げる。この数恕をDMAという。つまり、DMAとは掐叫蜗扩告の办硷である。この眷圭は、CPUを奶さずに、木儡嘲婶怠达とメモリの粗でデ〖タ啪流を乖うので、光庐刨で驴翁のデ〖タをブロックとして啪流できる。

 办数、CPUを拆哼させてINPUT炭吾、OUTPUT炭吾などを悸乖してデ〖タ啪流を乖う数恕をProgrammed I/O数及∈PIO数及という。このときは炭吾胳が10镍刨涩妥になり、啪流件袋は100[μs]涟稿になり、光庐な啪流に稍羹きである。つまり、掐叫蜗のための炭吾胳などを悸乖することがスピ〖ド你布を痉いているのである。

 よって、DMAはCPUを纳庶して、件收怠达∈FDDˇディスプレイˇカセットテ〖プレコ〖ダ〖∷とメモリを木冯してしまうという雇えである。ただし、CPUの洛わりにDMAコントロ〖ラ∈DMAC∷と钙ばれるハ〖ドウェアが涩妥である。

DMAコントロ〖ラ

  • ♂DMAC
  • 掐叫蜗刘弥と肩淡脖刘弥の粗でデ〖タ啪流を乖う。そのパタ〖ンとしては肌がある。
    • 掐叫蜗刘弥に滦してはバスコンロロ〖ラを沸统して粕み今きを乖う。
    • 肩淡脖刘弥に滦炳する柒垄ROM/RAMに滦しては柒婶バスを拆して粕み今きを乖う。
    • 肩淡脖刘弥に滦炳する嘲婶ROM/RAMに滦してはバスコントロ〖ラを沸统して粕み今きを乖う。

フォンˇノイマンボトルネック

  • DMAを蝗うと、奶撅のCPUが蝗うバスに裁えて、バス惧を萎れるデ〖タの翁を笼える。そのため、コントロ〖ラはバスの宠瓢を拇腊する涩妥がある。
  • 庭れた肋纷でも、妥滇されるデ〖タの啪流翁のバスの钓推啪流翁を亩えることがある。
    • これはバスを拆してデ〖タを啪流するノイマン房コンピュ〖タ泼铜の啼玛なので、フォンˇノイマンボトルネックと钙ぶ。

DMAの尸梧

DMAの缄界

洁洒

 DMA数及で啪流を乖うためには、啪流を幌める涟にプログラムによる肌の介袋拎侯を涩妥とされる。

1¨アドレスレジスタへDMA啪流を倡幌するメモリの戎孟を啪流する。

2¨啪流するデ〖タの改眶をカウンタへ啪流する。カウンタの洛わりにアドレスレジスタがもうひとつあるときは、DMA啪流の姜位メモリ戎孟を啪流する眷圭もある。

3¨ステ〖タスレジスタに扩告コ〖ドを啪流する。扩告コ〖ドとは件收怠达からメモリへデ〖タを啪流するのか∈デ〖タ啪流∷、メモリから件收怠达へ啪流するのか、DMA瓢侯をアクティブにするのかインアクティブにするのかを、泼年の疤弥のビットの0/1で年めるものである。

 これらの攫鼠は、デ〖タバスを沸てDMAコントロ〖ラのレジスタに今き哈まれる。

DMA悸乖の办毋

 件收怠达からDMAREQ∈DMA Request¨DMA妥滇慨规∷が、DMAコントロ〖ラに丸たとする。このとき、ステ〖タスレジスタがDMA瓢侯のアクティブを绩していれば、DMAコントロ〖ラはCPUに滦してHOLD REQ慨规を流慨する。HOLDが钓材されると、件收怠达へアクノレッジド慨规DMAACKを叫蜗する。

 デ〖タ啪流がメモリへの今き哈みだとすると、DMAACKが丸るごとに件收怠达はデ〖タバスに啪流するべき攫鼠を流り叫す。办数、DMAコントロ〖ラはアドレスレジスタの柒推をアドレスバスに流り叫して、WRITE瓢侯を绩す扩告俐をステ〖タスレジスタにしたがってアクティブにする。

 笆惧の瓢侯のタイミングがうまくとれていれば、メモリのほうはアドレスの绩すチップ柒のメモリセルのデ〖タを艰り哈むことになる。扩告慨规ˇデ〖タˇアドレス慨规の券栏富がCPUであっても、DMAコントロ〖ラであっても、RAMには簇犯ないことである。1つ啪流するごとにDMAコントロ〖ラはカウンタの猛をデクリメントするので、ゼロになれば啪流を姜位したことになる。なお、カウンタの洛わりに姜位戎孟を绩すレジスタがある眷圭には、黎片戎孟を绩すレジスタをインクリメントしていく。

DMA啪流の姜位

 DMA啪流が姜位し眷圭に、充り哈みをかけてCPUに梦らせる眷圭もある。

 また、介袋猛脱の淡脖レジスタを积っていれば、浩刨介袋肋年を乖い、CPUが贿まるまで借妄を悸乖する眷圭もある。

件收怠达が剩眶改赂哼する眷圭のDMA啪流

 件收怠达が剩眶赂哼し、称」がDMA啪流を妥滇する眷圭でも、付妄弄には办つの眷圭と恃わらない。称DMA啪流妥滇に滦して、アドレスレジスタ、カウンタ、ステ〖タスレジスタをDMAコントロ〖ラの面に肋けておき、介袋肋年のプログラムで努碰な猛を今き哈んでおけばよいのである。

 啼玛はDMAREQの庭黎刨であるが、DMAコントロ〖ラ巴赂になる。

    • Intel家の8257,8257-5などのプログラマブルDMAコントロ〖ラ
      • 4改のDMAREQ眉灰を积ち、庭黎界疤の盖年ができる。
      • さらに、DMAサイクルごとの庭黎界疤の恃构も材墙である。

DMA数及の庙罢爬

  • DMAコントロ〖ラが啪流借妄を乖う。
    • そのため、ソフトウェア娄は侍の借妄を么碰できる。
    • DMA啪流は回年した搀眶ˇサイズで乖われるため、嘿かいチェックはできない。つまり、帽姐なデ〖タ啪流のみとなる。
  • デ〖タ啪流にソフトウェアが拆哼しないため、PIO啪流と孺べて啪流借妄箕粗が庐い。
  • ソフトウェアによりDMAコントロ〖ラに滦して啪流傅ˇ啪流黎ˇ啪流サイズを回年する涩妥がある。
    • そのため、警翁のデ〖タ啪流の眷圭、另箕粗がPIO啪流より觅くなることがある。
  • DMA啪流の眷圭、DMAコントロ〖ラがデ〖タ啪流を乖うためにバス蝗脱涪を艰评して、CPUがバスを蝗脱できず、冯蔡としてソフトウェアの悸乖が奶撅よりも觅くなってしまうことも材墙拉としてありえる。
    • 泼に寥み哈み怠达の眷圭、剩眶の奶慨を乖ったり、1マイクロ擅帽疤での扩告を乖ったり、箕粗のずれを扩告したりすることがあるため、デ〖タ啪流でバスが狸铜されてしまい、メイン借妄が瓢かなくなってしまっては啼玛となってしまう。
    • この啼玛を豺疯するためには、サイクルスチ〖ルモ〖ド*1やバ〖ストモ〖ド*2でDMA啪流を乖うようにしたり、寥み哈み怠达の瓢侯に逼读を涂えないように啪流搀眶を尸充したりする数恕が雇えられる。

徊雇矢弗

  • ∝ステップ及 マイコン答撩怪郝≠
  • ∝池浆コンピュ〖タ 1978钳2奉规≠
  • ∝コンピュ〖タサイエンス掐嚏≠


*1 CPUがバスを蝗脱できないときにDMA啪流を乖うモ〖ド。
*2 肋年したデ〖タ啪流が姜わるまでDMAコントロ〖ラがバス蝗脱涪を狸铜するモ〖ド。