Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Come suggerisce il nome, un oggetto controller rappresenta in genere un controller di un dispositivo fisico con dispositivi associati. Un driver non WDM di livello più basso per un set di dispositivi simili coordinati da un controller fisico può creare un oggetto controller e usarlo per sincronizzare le operazioni di I/O tra i dispositivi collegati. Il driver implementa una routine ControllerControl e chiama le routine di supporto dell'oggetto controller del manager I/O.
Nota
L'uso di oggetti controller non è supportato nei driver WDM.
In genere, i driver usano oggetti controller per sincronizzare le operazioni con i dispositivi collegati se si verificano i criteri seguenti.
Il controller non esegue operazioni lunghe senza interrompere, quindi il driver non deve creare un thread dedicato al dispositivo o usare thread di lavoro di sistema.
I dispositivi connessi al controller sono simili. Ovvero, non sono dispositivi con proprietà fisiche completamente diverse o funzionalità operative, ad esempio i dispositivi di tastiera e mouse che possono essere connessi alla tastiera e al controller del dispositivo ausiliario.
Il driver è progettato per essere monolitico: a strato unico rispetto al controller del dispositivo e ai dispositivi fisici collegati, invece di essere progettato come driver di interfaccia (per il controller) con uno o più driver di classe (per i dispositivi collegati) sovrapposti al driver di interfaccia.
I driver di dispositivi con canali di I/O e un set di oggetti dispositivo logici possono usare anche un oggetto controller per sincronizzare le operazioni di I/O tra o tra i canali di tale dispositivo.
Un oggetto controller non ha alcun nome e pertanto non è la destinazione delle richieste di I/O. Si tratta semplicemente di un meccanismo di sincronizzazione per serializzare l'I/O da un set di oggetti dispositivo. Poiché un oggetto controller non ha alcun nome, è invisibile ai sottosistemi protetti in modalità utente, che non possono effettuare richieste di I/O del dispositivo senza ottenere un handle per l'oggetto file che rappresenta l'oggetto dispositivo di destinazione. Un oggetto controller è anche invisibile ai driver di livello superiore, che non possono collegare i propri oggetti dispositivo a un oggetto controller. In altre parole, né il gestore di I/O né un driver di livello superiore possono configurare un IRP che richiede I/O in un dispositivo rappresentato da un oggetto controller. Le richieste di I/O vengono sempre inviate agli oggetti dispositivo. Solo il driver può usare l'oggetto controller.
Sincronizzazione e I/O sovrapposto
I driver monolitici dei dispositivi fisici con funzionalità simili a quelle del controller disco "AT" non richiedono l'uso di un oggetto controller per sincronizzare le loro operazioni di I/O. Ad esempio, uno sviluppatore di driver potrebbe provare la seguente tecnica di sincronizzazione anziché usare un oggetto controller:
Configura oggetti dispositivo denominati per rappresentare i dispositivi che sono destinatari delle richieste di I/O.
Mantenere le informazioni sullo stato, magari un set di flag Device Busy in ogni estensione del dispositivo o in un'unica estensione del dispositivo, per indicare quale oggetto dispositivo è la destinazione dell'operazione di I/O corrente.
Eseguire operazioni di I/O per l'oggetto del dispositivo attualmente impegnato e mettere in coda gli IRP in ingresso per altri oggetti del dispositivo fino al completamento dell'IRP corrente.
La tecnica di sincronizzazione precedente serializza l'elaborazione IRP per tutti gli oggetti dispositivo di destinazione del driver. Si noti che obbliga anche il driver a completare l'IRP corrente prima che la routine StartIo possa iniziare a elaborare l'IRP successivo, che purtroppo riduce le prestazioni del driver.
Se alcune operazioni del dispositivo possono essere sovrapposte, l'uso di un oggetto controller può aumentare la velocità effettiva di I/O di un driver, perché questa tecnica di sincronizzazione consente al driver di determinare se può sovrapporsi alle operazioni appena prima di configurare il dispositivo fisico. Ad esempio, un controller del disco potrebbe consentire al driver di sovrapporre le ricerche su un disco con operazioni di lettura/scrittura su un altro disco.
Inoltre, l'uso di un oggetto controller è un metodo relativamente semplice per sincronizzare le operazioni di I/O tra più oggetti dispositivo di destinazione attraverso un unico dispositivo fisico, come ad esempio un controller di disco di tipo "AT". L'uso di un oggetto controller consente a un driver monolitico di sincronizzare le operazioni di I/O su un insieme di oggetti dispositivo denominati senza dover mantenere lo stato di ogni dispositivo e controller in una o più estensioni del dispositivo e senza dover riaccodare gli IRP.
Tuttavia, alcuni dispositivi progettati per sovrapporre le operazioni di I/O, come i controller seriali full-duplex o gli adattatori bus-master, in genere hanno driver che configurano code interne per i pacchetti di richiesta I/O.