폴링
계속 확인CPU가 상태 레지스터를 반복해서 읽습니다.
구현은 단순하지만 기다리는 동안 CPU 시간이 낭비됩니다.
장치가 느릴수록 CPU가 상태 레지스터만 반복 확인하는 방식은 비효율적입니다. 현대 OS는 인터럽트와 DMA로 CPU 점유 시간을 줄이고 큰 전송을 장치가 직접 처리하게 합니다.
프로세스가 read/write를 호출하면 커널이 요청을 큐에 넣습니다.
드라이버가 컨트롤러 레지스터에 명령과 버퍼 위치를 씁니다.
컨트롤러가 CPU 대신 메모리와 장치 사이의 데이터를 옮깁니다.
작업이 끝나면 컨트롤러가 CPU에 완료 신호를 보냅니다.
커널이 결과를 확인하고 잠든 프로세스를 다시 실행 가능하게 합니다.
CPU가 상태 레지스터를 반복해서 읽습니다.
구현은 단순하지만 기다리는 동안 CPU 시간이 낭비됩니다.
CPU는 다른 일을 하다가 장치가 보낸 신호로 돌아옵니다.
짧은 작업이 너무 많으면 인터럽트 처리 비용도 커질 수 있습니다.
컨트롤러가 메모리 버퍼에 데이터를 직접 읽고 씁니다.
큰 블록 전송에서 CPU 개입을 크게 줄이는 방식입니다.
폴링은 CPU가 기다리고, 인터럽트는 장치가 완료를 알려주며, DMA는 데이터 이동 자체를 컨트롤러가 맡습니다.