Direct Memory Access (DMA) 는 주변 장치가 CPU의 개입 없이 메인 메모리(RAM)와 직접 데이터를 주고받는 방식이다. 대용량 데이터를 빠르게 전송할 수 있도록 하기 위해 도입된 구조로, I/O 처리 성능 향상에 매우 중요하다.
CPU가 I/O 장치와 메모리 간 데이터를 직접 읽고 쓰게 되면 다음과 같은 문제가 발생한다:
예: 하드디스크에서 메모리로 1GB를 복사할 때, CPU가 이를 직접 처리하면 전송 시간 동안 아무런 다른 계산도 하지 못한다.
┌────────────┐ ┌────────────┐ ┌────────────┐
│ I/O 장치 │◄───►│ DMA 컨트롤러 │◄───►│ 메모리 │
└────────────┘ └────────────┘ └────────────┘
▲
│
┌────────┐
│ CPU │ (설정만 하고 개입 X)
└────────┘
CPU는 설정만 담당하고, 데이터 전송은 완전히 DMA 컨트롤러가 수행한다.
| 항목 | 설명 |
|---|---|
| CPU 부하 감소 | 데이터 전송에 개입하지 않아도 되므로 CPU가 다른 연산을 수행할 수 있다 |
| 고속 전송 가능 | 하드웨어 레벨에서 직접 전송하므로 속도가 빠르다 |
| 효율적인 I/O 처리 | 대용량 데이터의 입출력 처리에 적합하다 |
| 구분 | DMA | Interrupt |
|---|---|---|
| 정의 | 메모리와 장치 간 직접 데이터 전송 | 장치의 상태 변화를 CPU에 알림 |
| CPU 역할 | 설정만 수행, 이후 관여 X | 인터럽트가 발생할 때마다 CPU가 응답 |
| 예시 | 디스크에서 파일 읽기 | 키보드 입력, 마우스 클릭 |
DMA는 대용량 전송, Interrupt는 이벤트 통지라는 점에서 사용 목적이 다르다.