Evitar dispositivos de sondeo
Un controlador de dispositivo debe evitar sondear su dispositivo a menos que sea absolutamente necesario y nunca debe usar un segmento de tiempo completo para el sondeo. El sondeo de un dispositivo es una operación costosa que hace que cualquier sistema operativo esté enlazado a proceso dentro del controlador de sondeo. Un controlador de dispositivo que realiza mucho sondeo interfiere con las operaciones de E/S en otros dispositivos y puede hacer que el sistema sea lento y no responde a los usuarios.
Dispositivos desarrollados recientemente, que son tan tecnológicamente avanzados como los procesadores en los que Windows está diseñado para ejecutarse, rara vez requieren un controlador para sondear su dispositivo, ya sea para asegurarse de que el dispositivo está listo para iniciar una operación de E/S o de que una operación está completa.
Sin embargo, algunos dispositivos aún en uso se diseñaron para trabajar con procesadores antiguos, que tenían buses de datos estrechos, velocidades de reloj lentas y sistemas operativos de tareas únicas y de un solo usuario que hacían E/S sincrónica. Estos dispositivos pueden requerir sondeos o algún otro medio de esperar a que el dispositivo actualice sus registros.
Aunque puede parecer lógico resolver un problema de dispositivo lento mediante la codificación de un bucle simple que incrementa un contador, "desperdiciando" un intervalo mínimo mientras se registran las actualizaciones del dispositivo, es poco probable que un controlador sea portátil en todas las plataformas Windows. El contador de bucle máximo requeriría la personalización de cada plataforma. Además, si el controlador se compila con un buen compilador de optimización, el compilador podría quitar la variable de contador del controlador y los bucles donde se incrementa.
Nota Siga esta guía de implementación si el controlador debe detenerse mientras el hardware del dispositivo actualiza el estado: un controlador puede llamar a KeStallExecutionProcessor antes de leer los registros del dispositivo. El controlador debe minimizar el intervalo en el que se detiene y, en general, especificar un intervalo de parada no superior a 50 microsegundos.
La granularidad de un intervalo KeStallExecutionProcessor es un microsegundo.
Si el dispositivo requiere con frecuencia más de 50 microsegundos para actualizar el estado, considere la posibilidad de configurar un subproceso dedicado al dispositivo en el controlador.