Device I/O handoff

DMA와 대량 입출력

인터럽트는 완료 알림에 강하고, DMA는 데이터 이동에 강하며, 드라이버는 둘 사이의 큐와 버퍼 소유권을 관리한다.

driver

버퍼 고정

커널은 DMA 대상 페이지가 이동하지 않게 준비하고 장치가 이해하는 descriptor를 만든다.

controller

장치 실행

디스크나 NIC 컨트롤러가 버스 마스터로 메모리와 장치 사이의 데이터를 직접 옮긴다.

interrupt

완료 통지

전송이 끝나면 인터럽트가 발생하고 top half는 빠르게 상태를 확인한 뒤 지연 작업을 넘긴다.

bottom half

후속 처리

softirq, tasklet, workqueue가 패킷 처리나 대기 프로세스 깨우기처럼 긴 일을 맡는다.

폴링

짧은 지연이 필요하고 장치가 곧 준비될 때는 바쁜 대기가 인터럽트 왕복보다 빠를 수 있다.

인터럽트 병합

네트워크 카드가 여러 패킷 완료를 묶어 알리면 CPU 사용률은 낮아지지만 개별 지연은 늘 수 있다.

scatter-gather

연속되지 않은 페이지 목록을 descriptor 체인으로 넘겨 큰 복사를 피하고 DMA 효율을 높인다.