입출력장치와 메모리 사이 데이터 흐름에서 CPU를 배제하기 위해 사용하는 입출력 제어 방식
예를 들어 하드디스크에서 메모리로 데이터를 이동시킬 때, 가장 기본적인 방식인 Programmed I/O(Polling) 방식으로 구현하면 하드디스크에서 데이터를 꺼낸 후 시스템 버스를 통해 CPU 레지스터에 옮겨지고 다시 시스템 버스를 통해 CPU 레지스터에서 메모리로 이동한다.
위 Programmed I/O 방식의 단점을 제거한것이 DMA 방식이다. 이름 그대로 입출력장치가 메모리에 직접 접근한다는 뜻이다.
DMA Controller를 이용하면 하드디스크와 메모리를 직접 연결하여 CPU는 제어신호만 주고받을 뿐 데이터 전송에서 제외시킬 수 있다. 따라서 입출력 시 CPU는 제어를 위해 데이터 전송 시작과 완료에만 할당되어 CPU 자원의 낭비가 제거된다.
DMA가 없다면 프로세스의 버퍼에 데이터를 쓰고 소켓 버퍼에 보내고 TCP/IP 버퍼에 보내고 NIC에 보낸다. 문제는 프로세스부터 IP계층까지 버퍼는 모두 RAM을 사용하는데 불필요한 복사와 전송 과정이 생긴다는 것이다.
만약 DMA가 있다면 프로세스의 버퍼에서 바로 NIC으로 전달되면서 두 앞서 중간의 두 버퍼를 생략하고 전달이 가능하게 된다.
만약 두 개의 VM에서의 프로세스끼리 데이터를 송수신할 때, DMA가 없다고 생각하면 굳이 두 개의 컴퓨터가 통신하는 과정을 거쳐야 한다.
이 때 DMA를 이용한다면 사실상 프로세스끼리 바로 데이터 전송이 되는 수준이기 때문에(결국 같은 RAM이기 때문에) 가상환경의 장점이 될 수 있다.