Condividi tramite


Evitare il polling dei dispositivi

Un driver di dispositivo deve evitare di eseguire il polling del dispositivo a meno che non sia assolutamente necessario e non deve mai usare un'intera sezione temporale per il polling. Il polling di un dispositivo è un'operazione costosa che rende qualsiasi calcolo del sistema operativo associato all'interno del driver di polling. Un driver di dispositivo che esegue molto polling interferisce con le operazioni di I/O su altri dispositivi e può rendere il sistema lento e non risponde agli utenti.

I dispositivi sviluppati di recente, che sono tecnologicamente avanzati come i processori in cui Windows è progettato per l'esecuzione, richiedono raramente un driver per eseguire il polling del dispositivo, per assicurarsi che il dispositivo sia pronto per avviare un'operazione di I/O o che un'operazione sia stata completata.

Tuttavia, alcuni dispositivi ancora in uso sono stati progettati per funzionare con i vecchi processori, che avevano bus di dati ristretti, velocità di clock lente e sistemi operativi a singola attività a singolo utente che hanno eseguito operazioni di I/O sincrone. Tali dispositivi potrebbero richiedere il polling o altri mezzi per attendere che il dispositivo aggiorni i registri.

Anche se potrebbe sembrare logico risolvere un problema lento-dispositivo codificando un ciclo semplice che incrementa un contatore, di conseguenza "sprecare" un intervallo minimo durante la registrazione degli aggiornamenti del dispositivo, tale driver è improbabile che sia portabile tra le piattaforme Windows. Il valore massimo del contatore del ciclo richiederebbe la personalizzazione per ogni piattaforma. Inoltre, se il driver viene compilato con un buon compilatore di ottimizzazione, il compilatore potrebbe rimuovere la variabile contatore del driver e i cicli in cui viene incrementato.

Nota Seguire questa linea guida di implementazione se il driver deve bloccarsi durante lo stato di aggiornamento dell'hardware del dispositivo: un driver può chiamare KeStallExecutionProcessor prima di leggere i registri del dispositivo. Il driver deve ridurre al minimo l'intervallo di stallo e, in generale, specificare un intervallo di stallo non superiore a 50 microsecondi.

La granularità di un intervallo KeStallExecutionProcessor è di un microsecondo.

Se il dispositivo richiede spesso più di 50 microsecondi per aggiornare lo stato, valutare la possibilità di configurare un thread dedicato al dispositivo nel driver.