I/O COMPLETION

폴링, 인터럽트, DMA는 CPU가 기다리는 방식을 바꾼다

장치가 느릴수록 CPU가 상태 레지스터만 반복 확인하는 방식은 비효율적입니다. 현대 OS는 인터럽트와 DMA로 CPU 점유 시간을 줄이고 큰 전송을 장치가 직접 처리하게 합니다.

1 요청 등록

프로세스가 read/write를 호출하면 커널이 요청을 큐에 넣습니다.

2 명령 전달

드라이버가 컨트롤러 레지스터에 명령과 버퍼 위치를 씁니다.

3 DMA 전송

컨트롤러가 CPU 대신 메모리와 장치 사이의 데이터를 옮깁니다.

4 인터럽트

작업이 끝나면 컨트롤러가 CPU에 완료 신호를 보냅니다.

5 깨우기

커널이 결과를 확인하고 잠든 프로세스를 다시 실행 가능하게 합니다.

폴링

계속 확인

CPU가 상태 레지스터를 반복해서 읽습니다.

구현은 단순하지만 기다리는 동안 CPU 시간이 낭비됩니다.

인터럽트

완료 시 알림

CPU는 다른 일을 하다가 장치가 보낸 신호로 돌아옵니다.

짧은 작업이 너무 많으면 인터럽트 처리 비용도 커질 수 있습니다.

DMA

직접 전송

컨트롤러가 메모리 버퍼에 데이터를 직접 읽고 씁니다.

큰 블록 전송에서 CPU 개입을 크게 줄이는 방식입니다.

핵심 정리

폴링은 CPU가 기다리고, 인터럽트는 장치가 완료를 알려주며, DMA는 데이터 이동 자체를 컨트롤러가 맡습니다.