DMA HANDOFF

DMA 전송 역할

대용량 I/O에서 CPU가 바이트마다 복사하면 계산 시간이 사라집니다. DMA는 설정, 전송, 완료 통지를 분리해 인터럽트 수와 복사 비용을 줄입니다.

1. Setup CPU 작업

드라이버가 버퍼 주소와 전송 길이를 DMA 디스크립터에 기록합니다.

src, dst, count, direction

전송이 시작되면 CPU는 다른 작업으로 돌아갈 수 있습니다.

A
명령 제출

장치 큐에 전송 요청을 넣고 시작 신호를 보냅니다.

B
버스 전송

DMA가 메모리 버스를 사용해 블록을 직접 복사합니다.

C
완료 알림

전송이 끝나면 인터럽트로 커널을 깨웁니다.

2. Result 메모리 버퍼

장치 데이터가 커널 버퍼나 사용자 버퍼로 모이고, CPU는 완료 처리만 수행합니다.

interrupt count: 1

바이트마다 깨우지 않기 때문에 대용량 전송에서 효과가 큽니다.

캐시 일관성 CPU 캐시와 DMA가 본 메모리 값이 어긋나지 않도록 동기화가 필요합니다.
Scatter-Gather 흩어진 버퍼 목록을 디스크립터로 넘기면 복사 없이 순서대로 전송합니다.
사이클 스틸링 전송 중 메모리 버스를 공유하므로 CPU 메모리 접근은 약간 느려질 수 있습니다.