DMA vs 프로그램 방식 I/O: 차이점 설명
장치와 메모리 사이에서 데이터를 옮기는 방법은 두 가지입니다. 프로그램 방식 I/O(PIO)에서는 CPU가 직접 레지스터를 통해 모든 워드를 읽고 씁니다. 직접 메모리 접근(DMA)에서는 DMA 컨트롤러가 스스로 데이터를 옮기고, CPU는 전송을 설정하기만 하며 완료되면 통지를 받습니다. DMA는 CPU를 해방하고 대용량 전송을 훨씬 빠르게 처리하지만, 더 많은 설정과 주의가 필요합니다.
| 비교 항목 | 프로그램 방식 I/O(PIO) | DMA |
|---|---|---|
| 데이터를 옮기는 주체 | CPU가 load와 store 명령으로 워드 단위로 옮김 | DMA 컨트롤러 또는 장치 자체가 메모리와 직접 주고받음 |
| CPU 부하 | 높음: 전송하는 내내 CPU가 바쁨 | 낮음: CPU는 전송을 설정하고 다른 작업을 함 |
| 대용량 전송 처리량 | CPU 속도에 제한됨 | 높음 |
| 설정 오버헤드 | 없음 | 주소, 길이 또는 디스크립터, 완료 처리가 필요 |
| 소량 전송 | 설정이 없어서 더 빠른 경우가 많음 | 설정 비용이 이점보다 클 수 있음 |
| 복잡도 | 단순 | 더 복잡함: 디스크립터 링, 버퍼 정렬, 캐시 일관성, IOMMU 설정 |
| 메모리 버스 사용 | CPU를 거침 | DMA 엔진이 CPU와 메모리 대역폭을 두고 경쟁 |
| 주요 용도 | 작은 제어 레지스터, 단순한 센서, 레거시 PIO 모드 | SSD와 NVMe, 네트워크 카드, 오디오 버퍼, ADC 샘플 스트림, GPU 전송 |
수치는 대략적인 자릿수 기준이며, 공정 세대와 제품에 따라 달라져요.