본문 바로가기

개념 정리

DMA(Direct Memory Access)

DMA란

CPU의 개입 없이 주변 장치들이 메모리에 직접 접근하여 읽거나 쓸 수 있도록 하는 기능입니다.

 

DMA 사용 이유

주변장치의 데이터를 사용하기 위해서는 그 데이터가 반드시 RAM에 저장되어야 합니다. 그리고 이때 반드시 CPU의 개입이 필요한데, 그 이유는 RAM에 접근하기 위한 주소를 CPU가 생성하기 때문입니다.

그림1은 DMA를 사용하지 않는 기존의 PIO(Programmed Input/Output)방식으로 주변장치에서 데이터를 읽고 쓰기 위해서 CPU가 RAM과의 데이터 전송을 지속합니다. 따라서 이 방식에서 CPU는 데이터 처리가 끝날 때까지 다른 일을 할 수 없습니다.

반면에 그림2는 아래와 같은 프로세스를 거칩니다.

1) RAM에 I/O 장치의 데이터가 필요할 때 CPU는 전송 크기, 대상 주소 및 기타 중요한 정보와 함께 DMA 요청을 DMA 컨트롤러에 신호로 보냅니다.  

2) CPU로부터 받은 정보를 바탕으로 DMA 컨트롤러가 데이터를 RAM으로 직접 전송합니다.

3) 데이터 전송이 모두 끝나면, DMA 컨트롤러가 CPU에 "작업이 완료됐다"고 알려줍니다(인터럽트 생성). CPU는 이 신호를 받고 전송 작업이 끝났음을 인지하게 됩니다.

 

결론적으로 DMA는 CPU가 해야 할 주변장치와의 데이터 전송을 대신함으로써, CPU는 다른 일을 자유롭게 할 수 있습니다.


<참고 자료>

https://ksk-developer.tistory.com/40

 

개발자도 알면 좋은 DMA(direct memory access)

기존에도 DMA?하면 direct memory access인 것은 알았지만 뭐하는지는 알지 못했는데 lucene을 공부하면서 mmap에 대해 좀 더 자세히 알게 되었고 그러다가 zero copy까지 공부하게 되었는데 거기서 DMA의 역

ksk-developer.tistory.com

https://kkhipp.tistory.com/168

 

DMA(Direct Memory Access)란? (+PIO, 채널제어방식)

입출력 제어 방식은 크게 4가지가 있습니다. 1. 프로그램에 의한 I/O (CPU 개입 O) 2. 인터럽트에 의한 I/O (CPU 개입 O) 3. DMA에 의한 I/O (CPU 개입 X) 4. 채널에 의한 I/O (CPU 개입 X) 이제 DMA에 대해서 알아

kkhipp.tistory.com

 

'개념 정리' 카테고리의 다른 글

UART 직렬 통신의 기본 개념과 데이터 전송 구조  (0) 2024.10.29
UART 데이터 전송 과정  (0) 2024.10.29
인코딩(Encoding)  (0) 2024.03.15