Direct Memory Access
出典: フリー百科事典『ウィキペディア(Wikipedia)』
Direct Memory Access (DMA) とは、機械語の命令群によらず、メモリとメモリまたはメモリとI/Oデバイスの間で直接データを転送することである。
目次 |
[編集] 歴史
数MHzで動作するマイクロプロセッサでは、CPUによるデータ転送で、ハードディスク等の10MB/秒程度の転送速度を発揮する事は困難であったため、専用のコントローラでデータ転送を行う必要があった。このコントローラは、データ転送を高速に行う機能に特化したCPUであったともいえる。例として、Z80にはZ80DMA、MC68000には、MC68450などのDMAコントローラ (DMAC) が存在した。
Intelのi80286 (APX286) などでは、当時通常のI/Oを制御するためには充分な動作速度だった事、主流のパーソナルコンピュータにおいて、i8249等の低速なDMACしか搭載されておらず、他に適当なDMACが存在しなかった事などから、DMAはあまり使用されなくなった。
CPUの世代がPentiumになり、充分に高速になると、今度は、低速なI/Oの管理がボトルネックとなったため、いわゆるチップセットにI/O専用の高速なDMACが搭載されたり、周辺機器制御LSIが簡単なDMA機能を持つようになり、再度DMAが活用されるようになり、その後の主流となっている。
[編集] 高機能DMAC
初期のDMACは単純に指定されたアドレス範囲を指定されたメモリもしくはポートに入出力する機能のみを備えていた。しかしオペレーティングシステムが普及し、ハードディスクへのI/OにDMACを使う様になってから、DMACには「データブロックを分割する(スキャッタリング)」「データブロックを集約する(ギャザリング)」を行う機能を要求された。MC63450 DMAC等には、DMACがリンクリストを読み取って転送内容を分割したり集約する機能が搭載されている。PC/AT互換機向けのSCSIホストアダプタカード等では、コントローラチップに集積されているDMACがこの機能を担当していた。スキャッタリング・ギャザリング機能が無い場合CPUは最低でも1セクタ分ずつメモリ・メモリ間転送を行わなければならず、またDMACに読み取らせるメモリ領域が転送完了するまで使用できない為、I/O時のCPU負荷上昇とI/O待ち時間が発生しシステム性能に悪影響を与えた。
[編集] DMAの方式
- バーストモードDMA
- CPUから制御を奪い、データを一気に転送する方法。
- サイクルスチールモードDMA
- CPUがメモリをアクセスしていない時にDMAを行なう方法。
[編集] 代表的なDMAC、DMA機能を持つLSI
- Z80DMA
- MC68450
- i430など、PentiumCPU以降対応のチップセット