두 개의 Hardware Device간의 데이터 블록을 Transfer하는 트릭으로 사용되는 DMA, 직접 메모리 엑세스라고 해석되는 방법입니다.
CPU가 데이터를 전송할 때 일일이 신경을 쓰면 그만큼 속도도 나오지 않을 뿐 더러, CPU가 다른 일을 못하고 데이터 전송하는 일을 해야 하니까, 전체적이 System 성능에 악영향을 미칩니다.


DMA는 이런 식으로 CPU와 상관없이 전송하는걸 DMA라고 부릅니다. 실제 CPU가 Control하는 건 DMAC (DMA Controller)를 Countrol 해주는 과정을 의 미힙나다.
DMA는 source와 destination,, 그리고 전송할 바이트수만 주면 알아서 dat를 전송 해줍니다. Process가 전형 신경 쓰지 않아도 된다고 봐야합니다.
DMA는 모든 data 전송이 끝나면 HW interrupt로 CPU에게 완료를 알려주는 구조입니다. Source의 주소를 알려주는 Source Register, Destination의 주소를 알려주는 Dest_Register, 몇 개나 보낼 건지 알려주는 Counter_Register가 필요합니다.
Countrol_Register에는 전송시작 명령을 내릴 수 있는 bit나, 어떤 방식으로 데이터를 전송할 것인지를 정해줄 수 있는 bit등이 정의 되어 있습니다. DMAC가 일을 끝내면 Interrupt를 통해서 CPU에게 알려줍니다.

두가지 Trnasfer 방식이 있는데 하나는 Single Address Mode가 있고요, 이건 한번에 일고 쓰고를 한번씩 해주는 모드입니다. Counter를 1씩 줄여나가면서 0이 될 때까지 쓰는겨죠, 다 끝나면 DMA_INT를 통해서 CPU에게 알려줍니다.

Burst Address Mode는 무작정 시작하면 끝까지 Read Write를 무한 반복 하는 거에요. 이 녀석도 마찬가지로 Counter를 1씩 줄여나가면서 0이 될 때까지 하는 거죠. 다 끝나면 마찬가지로 DMA_INT를 이용해서 CPU에게 알려주고요.
Burst mode가 더 좋은데, 왜 이런 Single Addressing Mode가튼 녀석을 쓰느냐 하면 원 큰 Data를 계속 사용하는 경우라면 DMA가 Bus를 계속 장악하고 있어서 다른 녀석들이 Bus를 사용할 수가 없는 경우가 발생하는 거죠. 그래서 중간에 다른 녀석이 Arbiter를 통해서 Bus 사용권을 치고 들어 올 수 있도록 베려하는 Mode 입니다.