DMA(Direct Memory Access) 뜻과 장점

시작하기 전에

내가 경험했던 디스플레이에 이미지를 그리는 프로젝트들은 항상 DMA가 강제되었다. DMA를 사용하지 않으면 이미지가 한박자 늦게 출력되었다. 심지어 사이즈가 큰 이미지의 경우 출력시 왼쪽에서 오른쪽으로 스프레드되는 과정까지 볼 수 있었다. DMA는 대부분의 AP(or MCU)에서 함수로 제공이 될 것이다. DMA를 깊게 이해하고 사용하기는 어려움이 있을지라도 해당 AP의 예제를 따라하는 수준이라도 DMA 유무는 충분히 체감할 수 있다.

DMA 요약

입출력장치와 메모리 사이 데이터 흐름에서 CPU를 배제하기 위해 사용하는 입출력 제어 방식

기본적인 입출력 제어 방식

예를 들어 하드디스크에서 메모리로 데이터를 이동시킨다. 이때 가장 기본적인 방식인 Programmed I/O(Polling) 방식으로 구현하면 하드디스크에서 데이터를 꺼낸 후 시스템 버스를 통해 CPU 레지스터에 옮겨지고 다시 시스템 버스를 통해 CPU 레지스터에서 메모리로 이동한다.

위와 같은 방식은 CPU를 거쳐가기 때문에 한곳을 더 거쳐가는 지연시간도 있겠지만 가장 큰 문제는 입출력 시간 동안 CPU가 idle 상태로 대기하는 것이다. I/O 디바이스에 비해 CPU는 비교할 수 없을 정도로 고속이기 때문에 그 시간을 낭비한다는 것은 상당히 비효율적이다.

DMA : Direct Memory Access

위 Programmed I/O 방식의 단점을 제거한것이 DMA 방식이다. DMA는 Direct Memory Access인데, 이름 그대로 입출력장치가 메모리에 직접 접근한다는 뜻이다.

위 예에서 DMA Controller를 이용하면 하드디스크와 메모리를 직접 연결하여 CPU는 제어신호만 주고받을 뿐 데이터 전송에서 제외시킬 수 있다. 따라서 입출력 시 CPU는 제어를 위해 데이터 전송 시작과 완료에만 할당되어 CPU 자원의 낭비가 제거된다.

DMA 동작 순서

DMA 동작 순서는 아래와 같다.

  1. 입출력장치가 CPU에게 입출력 요청
  2. CPU가 DMA 컨트롤러에 명령 송신
  3. DMA가 CPU에게 시스템 버스 사용 요청
  4. CPU가 버스 사용 허가(CPU가 버스 사용 포기)
  5. DMA 컨트롤러가 입출력장치에서 데이터 읽은 후 메모리로 전송
  6. 전송 완료 후 CPU에게 완료 신호 송신

Leave a Comment