콘텐츠로 이동

DMA (Direct Memory Access)

Jan 22, 2026 · Updated Jan 25, 2026

장치 컨트롤러가 CPU의 개입 없이 장치와 주 메모리 간에 전체 데이터 블록을 직접 전송하는 방식.

인터럽트 기반 I/O는 소량의 데이터 이동에는 적합하지만, Network Video Server I/O와 같은 대량 데이터 이동에 사용하면 높은 오버헤드가 발생한다. 저속 장치는 바이트당 하나의 인터럽트를 발생시키므로 대량 데이터 전송 시 CPU 부하가 크게 증가한다.

1 설정
버퍼, 포인터, 카운터 설정
2 전송
장치 컨트롤러가 블록 직접 전송 (CPU는 다른 작업 수행)
3 완료
블록당 하나의 인터럽트로 알림
비교 항목인터럽트 기반 I/ODMA
인터럽트 발생바이트당 1개블록당 1개
CPU 개입매 전송마다 필요설정 및 완료 시에만
적합한 용도소량 데이터대량 데이터 (bulk data)
  • DMA command block: 소스 포인터, 목적지 포인터, 전송 바이트 수를 포함하는 메모리 블록
  • Scatter-gather: 비연속적인 여러 소스/목적지 주소를 하나의 DMA 명령으로 전송
  • Handshaking: DMA-request와 DMA-acknowledge 와이어로 컨트롤러와 DMA 간 통신
  • Cycle stealing: DMA가 메모리 버스를 점유하는 동안 CPU가 잠시 메인 메모리 접근 불가 (캐시는 접근 가능)
  • DVMA: 가상 주소를 사용하여 두 메모리 맵 장치 간 직접 전송

디스크에서 대량의 데이터를 메모리로 읽어올 때, DMA를 사용하면 CPU는 그 동안 다른 프로세스를 실행할 수 있다.

  • 장점: CPU 실행 부하 감소, 대량 데이터 전송 효율성 향상, 시스템 전체 성능 개선
  • 단점: 추가 하드웨어(DMA 컨트롤러) 필요, cycle stealing으로 CPU의 메모리 접근 일시 지연
  • Interrupt-Driven I/O - 바이트당 인터럽트를 발생시키는 방식으로, DMA는 이 오버헤드를 블록당 인터럽트로 줄임
  • Polling - CPU가 장치 상태를 반복 확인하는 가장 단순한 I/O 방식
  • 디바이스 드라이버 - DMA 전송을 설정하고 완료를 처리하는 커널 모듈
  • 버퍼링 (Buffering) - DMA가 데이터를 전송할 대상 메모리 버퍼를 관리하는 기법
  • 인터럽트 (Interrupt) - DMA 전송 완료 시 CPU에 알림을 보내는 하드웨어 메커니즘
  • Operating System Concepts, 10th Edition, Chapter 1, p.15