디바이스 폴링 방지

디바이스 드라이버는 절대적으로 필요한 경우가 아니면 디바이스 폴링을 피해야 하며 폴링에 전체 시간 조각을 사용하면 안 됩니다. 디바이스 폴링은 폴링 드라이버 내에서 모든 운영 체제를 컴퓨팅 바인딩하는 비용이 많이 드는 작업입니다. 많은 폴링을 수행하는 디바이스 드라이버는 다른 디바이스에서 I/O 작업을 방해하고 시스템을 느리고 사용자에게 응답하지 않게 만들 수 있습니다.

Windows가 실행되도록 설계된 프로세서만큼 기술적으로 진보된 최근에 개발된 디바이스는 디바이스가 I/O 작업을 시작할 준비가 되었는지 또는 작업이 완료되었는지 확인하기 위해 드라이버가 디바이스를 폴링할 필요가 거의 없습니다.

그럼에도 불구하고 여전히 사용 중인 일부 디바이스는 좁은 데이터 버스, 느린 시계 속도 및 동기 I/O를 수행하는 단일 사용자 단일 작업 운영 체제가 있는 이전 프로세서와 작동하도록 설계되었습니다. 이러한 디바이스에는 폴링 또는 디바이스가 레지스터를 업데이트할 때까지 기다리는 다른 수단이 필요할 수 있습니다.

카운터를 증가시키는 간단한 루프를 코딩하여 느린 디바이스 문제를 해결하는 것이 논리적으로 보일 수 있지만 디바이스 업데이트가 등록되는 동안 최소 간격을 "낭비"하므로 이러한 드라이버는 Windows 플랫폼에서 이식할 가능성이 낮습니다. 루프 카운터 최대값에는 각 플랫폼에 대한 사용자 지정이 필요합니다. 또한 드라이버가 적절한 최적화 컴파일러로 컴파일되는 경우 컴파일러는 드라이버의 카운터 변수와 증가되는 루프를 제거할 수 있습니다.

참고 디바이스 하드웨어가 상태를 업데이트하는 동안 드라이버가 중단되어야 하는 경우 이 구현 지침을 따릅니다. 드라이버는 디바이스 레지스터를 읽기 전에 KeStallExecutionProcessor 를 호출할 수 있습니다. 드라이버는 중단되는 간격을 최소화해야 하며 일반적으로 50마이크로초 이하의 중단 간격을 지정해야 합니다.

KeStallExecutionProcessor 간격의 세분성은 1 마이크로초입니다.

디바이스에서 상태를 업데이트하는 데 50 마이크로초 이상이 자주 필요한 경우 드라이버에서 디바이스 전용 스레드 를 설정하는 것이 좋습니다.