竹下世界塔の計算機よもやま話

アクセスカウンタ

zoom RSS DMAについて

<<   作成日時 : 2012/01/19 19:35   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

 Direct Memory Access(DMA)とはI/Oやメモリとの転送をプロセッサを介せずに行う方法。

 DMAはプロセッサの処理速度が遅くてI/Oからの読み出しを取りこぼすような場合に使用された(経験的には6809の2MHzで2HDのFDDからデータ転送が出来るかどうかのレベル)。バスマスタになるDMAコントローラ(MC6844,Z80DMA,MC68450等)に処理を依頼することになる。プロセッサの速度が向上すると使われなくなってきた。MC68020の場合は32bit幅のDMAコントローラが存在せず、もう一個別のMC68020をDMA用に使用するといった例を見たことがある。
DMAの利点はI/Oやメモリの転送についてプロセッサが張り付かなくてもいいことだ。タイミングが厳しい転送では割込みも禁止しなければならないが、この間に他のことをする余裕ができる。
 DMAコントローラはバスマスタになる必要があるため、プロセッサと同等の足回りを持たなければならない。バスの構造が変わればそれに合わせて作りなおす必要もある。ではプロセッサ内部にDMAの機能を持たせたらどうだろうか?バスが変わっても問題ないし、キャッシュコヒーレンシも勝手に保ってくれる。
 命令セットでDMA類似の機能を持っている例として、Z80はメモリ-メモリ間の転送やI/O-メモリ間の転送を行う命令を持つ。8086もブロック転送命令を持っている。SPARC64は浮動小数点レジスタをワークとして使うブロック転送命令を持っている。
 では、どのような実装にしようか?
 転送元アドレス、転送先アドレス、転送バイト数を設定するレジスタ、実行中/待機中を表示するステータスレジスタ。転送モードとして転送元/転送先のアドレスを固定にするI/O⇔メモリ間転送、一回の転送に使用するデータ幅、キャッシュをバイパスするモード、メモリオーダリングに関する設定、優先度の設定、ぐらいだろうか。命令セットに入れてしまうとあとから外せないし、機能変更も簡単にできなくなるのでプロセッサからは周辺LSIのように見えるようにしたほうがよさそうだ。

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文




DMAについて 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる