rev.2503041454 : 첫 작성.
이번엔 DMA에 대해 알아보자.
여느 때와 마찬가지로 DMA가 무엇인지에 대한 것부터 알아보자.
DMA
DMA는 Direct Memory Access의 약어이다.
앞서 배웠던 Polling 방식이나 Interrupt 방식 모두 I/O 장치가 Memory Data에 접근하기 위해선 CPU가 해당 과정을 처리해야 한다.
CPU는 굉장히 속도가 빠름에도 불구하고 단순 Memory 처리를 수행하게 되면 그 시간에 다른 연산같은 중요한 처리를 못하게 된다.
비효율적이라는 소리다.
Interrupt 방식이 기존 Polling 방식을 개선한 방식이라고는 하지만 여전히 Memory에 접근할 때 CPU를 거쳐야되기 때문에 이러한 과정을 없애고자 DMA방식을 만든 것이다.
결국, DMA는 Polling 방식을 개선하기 위해 Interrupt를 고안했던 것처럼,
Interrupt보다 더 효율적으로 CPU를 사용하기 위한 I/O장치의 Memory 접근 방식이다.

위 사진에서 왼쪽이 기존 DMA가 없는 구조, 오른쪽이 DMA를 사용하는 구조이다.
위에서 볼 수 있듯이, DMA 방식을 사용하기 위해선 MCU가 별도의 DMA Controller를 가지고 있어야한다.
하드웨어가 지원해야 한다는 소리다.
물론, DMA 방식도 Data 접근을 위해 아예 접근하지 않는 것은 아니다.
예를 들어, I/O Device로 어떤 메시지를 출력해야 된다고 하면,
우선 CPU가 DMA Controller에게 Memory의 어떤 부분을 출력하라고 명령을 한다.
그 다음부터의 Memory 관련 처리를 DMA가 I/O Device에게 직접하게 된다.
그 후, 메모리 처리가 완료되면, DMA는 CPU에게 완료됐다고 신호를 보내게 되고 CPU가 정상적으로 됐는지 확인을 한다.
하지만, CPU는 명령과 확인만 할 뿐, 실질적인 Data처리를 하지 않으므로 그 시간에 다른 작업을 수행할 수 있게 된다.
결국, DMA란 속도가 빠른 CPU가 적합한 작업을 최대의 시간으로 처리할 수 있도록 하는 것이 목적이고, I/O 디바이스가 Memory에 접근하는 것을 CPU가 아닌 별도의 Controller를 이용해 데이터를 처리하는 방식인 것이다.
번외로,
요즘엔 반도체 기술이 발달하여, 아래와 같은 구조로 많이 쓰인다고 한다.

결론
이 포스팅에서는 DMA의 개념에 대해 알아보았다.
다음엔 MCU로 직접 사용해보자.