왜 DMA를 사용할까?
폴링은 프로그램에 의한 입출력 방식이여서 CPU가 계속 주변장치를 감시하기 때문에 CPU의 효율이 떨어진다고 했다. 이런 점을 개선하기 위해 CPU개입없이 주변장치와 상호작용하는 DMA(Direct Memory Access)가 개발되었다.
그럼 CPU개입이 적은 인터럽트를 사용하면 되지 않을까?
인터럽트를 사용하더라도 여전히 CPU는 데이터 전송을 하기위해 개입하게 되고, 입출력하는 시간이 길어지게 되면 CPU는 입출력하는 동안 다른 일을 못하게 된다.
DMA 과정
그럼 CPU는 무엇을 하면 될까? CPU는 DMAC(DMA controller)에게 입출력 관련 정보만 주고 다른일을 계속 하면된다.
입출력 정보에는 뭐가 있을까? CPU는 DMAC에게 어떤 source를 보내는지, 목적지는 어딘지, 얼마만큼 보내는지를 알려주고 언제 전송을 시작하고 어떤 방식으로 할지만 알려주면 DMAC가 알아서 데이터를 전송해준다.
전송이 끝나면 DMAC는 CPU에게 인터럽트를 발생시킨다. 결론적으로 CPU는 전송의 시작과 끝에만 관여하게 되고 직접적이 데이터 전송은 DMAC가 하게 되는 것이다.
여러가지 모드들도 있는데 자세히 모르겠어서 기본적인 개념만 적었다.
'MCU 제어 > 개념' 카테고리의 다른 글
인터럽트(Interrupt) 방식 (0) | 2020.02.10 |
---|---|
폴링(Polling) 방식 (0) | 2020.02.07 |
UART 통신 이론 (0) | 2020.02.02 |