Condividi tramite


Introduzione agli oggetti controller

Come suggerisce il nome, un oggetto controller rappresenta in genere un controller dispositivo fisico con dispositivi collegati. 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 dell'oggetto controller di I/O manager.

Nota

L'uso degli oggetti controller non è supportato nei driver WDM.

In genere, i driver usano oggetti controller per sincronizzare le operazioni ai dispositivi collegati se i criteri seguenti contengono:

  • 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 la tastiera e i dispositivi del mouse che possono essere connessi alla tastiera e al controller del dispositivo ausiliario.

  • Il driver è progettato per essere monolitico: a livello singolo in relazione al controller del dispositivo e ai dispositivi fisici collegati, anziché essere progettato come driver di porta (per il controller) con uno o più driver di classe (per i dispositivi collegati) strati sul driver della porta.

I driver dei 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. È semplicemente un meccanismo di sincronizzazione per serializzare 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 I/O né un driver di livello superiore possono configurare un'I/O richiesta di I/O in un dispositivo rappresentato da un oggetto controller. Le richieste di I/O vengono sempre rilasciate agli oggetti dispositivo. Solo il driver può usare l'oggetto controller.

Sincronizzazione e sovrapposizione di I/O

I driver monolitici dei dispositivi fisici con funzionalità come quelli del controller di disco "AT" non sono necessari per usare un oggetto controller per sincronizzare le operazioni di I/O del dispositivo. Ad esempio, un writer del driver potrebbe provare una tecnica di sincronizzazione simile alla tecnica di sincronizzazione seguente anziché usare un oggetto controller:

  • Configurare oggetti dispositivo denominati per rappresentare i dispositivi destinati alle richieste di I/O.

  • Mantenere le informazioni sullo stato (forse un set di flag Attività dispositivo in ogni estensione del dispositivo o in un'unica estensione del dispositivo) che indica quale oggetto dispositivo è la destinazione dell'operazione di I/O corrente.

  • Eseguire operazioni di I/O per l'oggetto dispositivo attualmente occupato e ripetere l'esecuzione di irP in ingresso per altri oggetti 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 forza anche il driver a completare l'IRP corrente prima che la routine StartIo possa iniziare a elaborare il successivo IRP, 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 di disco potrebbe consentire al driver di sovrapporsi su un disco con operazioni di lettura/scrittura in un altro disco.

Inoltre, l'uso di un oggetto controller è un modo relativamente semplice per sincronizzare le operazioni di I/O per più di un oggetto dispositivo di destinazione tramite un singolo dispositivo fisico, ad esempio un controller disco "AT". L'uso di un oggetto controller consente a un driver monolitico di sincronizzare le operazioni di I/O in un set di oggetti dispositivo denominati senza dover mantenere lo stato su ogni dispositivo e il controller del dispositivo in una o più estensioni del dispositivo e senza dover riquequere i provider di integrazione.

Tuttavia, alcuni dispositivi progettati per sovrapporsi alle operazioni di I/O, ad esempio controller seriali full-duplex o adattatori master del bus, in genere hanno driver che configurano code interne per i provider di integrazione.