FreeBSD ハンドブック : FreeBSD の内部 : DMAとはどういったものでどういう働きをするのか
Previous: PC におけるメモリの利用
Next: DMA転送の例

22.3. DMAとはどういったものでどういう働きをするのか

原作: Frank Durda IV <uhclem@FreeBSD.ORG>

訳: 鈴木 康修 <yasu@hike.te.chiba-u.ac.jp>
10 December 1996.

Direct Memory Access (DMA)は, 中央演算処理装置 (CPU)からの干渉なく データを計算機中である場所から別の場所に動かすための手法です.

DMA機能の実装の方法はそれぞれの計算機アーキテクチャ間で異なるもので あるため, ここでの議論はIBMパーソナルコンピュータ(PC), PC/ATとその互換機におけるDMAサブシステムの実装と働きに限定します.

PCの DMAサブシステムは, Intelの 8237 DMAコントローラをベースにして います. 8237はそれぞれ独立にプログラムできる4つのDMAチャネルを持ち, それぞれどのチャネルもいつでもアクティブにできます. これらのチャネルは順に 0, 1, 2, 3となっています. PC/ATからは, セカンド 8237 チップが追加され,それらは 4, 5, 6, 7と なっています.

オリジナルの DMAコントローラ(0, 1, 2, 3)は, 1回の転送で1バイト 転送します. セカンドDMAコントローラ(4, 5, 6, 7)は1回で 隣接する2つのメモリ番地から 16ビット転送します. ここで, 最初のバイトは通常偶数のアドレスになります. 2つのコントローラは全く同じものであり, 転送量が異なるのは セカンドコントローラがシステムに直結しているためです.

8237 は個々のチャネルについて, DRQと-DACKという2つの電気信号を 持っています. その他に, HRQ (Hold Request), HLDA (Hold Acknowledge), -EOP (End of Process)があり, バス制御信号として -MEMR (Memory Read), -MEMW (Memory Write), -IOR (I/O Read), and -IOW (I/O Write)があります.

8237 DMACは, いわゆる``fly-by'' DMAコントローラです. これは, データの移動を行う際に, データは DMACチップを通過せず, DMACチップに格納されないことを意味します. また, DMACはI/Oポートとメモリアドレス間でのみデータを 転送することができますが, 2つのI/Oポートもしくは2つのメモリアドレス 間ではできません.

注: 8237は, 非``fly-by''モードでは, 互いに接続された 2つのチャネルでのメモリ-メモリ間でのDMA操作を許可します. しかし, PCメーカは, ただでさえ乏しいこのリソースをこんなふうに 使ったりしません。 なぜなら, CPUを使用してメモリ間のデータを動かす方が早いからです.

PCアーキテクチャでは, それぞれのDMAチャネルは, 通常そのDMAを 使用するハードウェアがそのチャネルについてDRQを使って 転送を要求した時のみ動作します.

22.3.1. DMA転送の例

22.3.2. DMA ページレジスタ および 16メガ アドレス空間制限

22.3.3. DMA操作モードとその設定

22.3.4. DMAのプログラミング

22.3.5. DMAポートのマップ

22.3.5.1. 0x00 - 0x1f DMA コントローラ #1 (Channels 0, 1, 2 and 3)
22.3.5.2. 0xc0 - 0xdf DMA コントローラ #2 (Channels 4, 5, 6 and 7)
22.3.5.3. 0x80 - 0x9f DMA ページレジスタ

FreeBSD ハンドブック : FreeBSD の内部 : DMAとはどういったものでどういう働きをするのか
Previous: PC におけるメモリの利用
Next: DMA転送の例
FreeBSD Home Page
www@freebsd.org
Updated May 23, 1997