Condividi tramite


Introduzione a Annulla routine

Qualsiasi driver in cui è possibile tenere gli IRP in uno stato in sospeso per un intervallo indefinito deve avere una o più routine Annulla . Ad esempio, un driver della tastiera potrebbe attendere in modo indefinito per un utente di premere un tasto. Al contrario, se un driver non accoderà mai più IRP di quanto possa essere completato in cinque minuti, probabilmente non ha bisogno di una routine Annulla .

Si supponga che un thread in modalità utente effettui una richiesta di I/O, accodata da una routine di invio del driver di dispositivo di livello più alto e che il thread di richiesta venga terminato mentre l'IRP viene accodato. Gli IRP accodati per conto di un thread terminato devono essere annullati. Di conseguenza, il driver deve impostare una routine Annulla fornita dal driver in ogni IRP che accoda.

Un driver che crea indirizzi IP associati deve annullarli quando l'IRP master viene annullato. Poiché i irp associati non sono associati a un thread di richiesta, la routine Annulla di IRP master è responsabile dell'annullamento di eventuali INDIRIZZI di rete associati quando l'IRP master viene annullato.

Il numero di routine Annulla ogni driver dipende dalla progettazione del driver. In generale, un driver deve avere una routine Annulla per ogni fase dell'elaborazione di I/O in cui un'IRP può essere mantenuta in uno stato in sospeso per un intervallo indefinito. Tali IRP in sospeso devono essere mantenuti in uno stato annullabile.

Prendere in considerazione le linee guida di progettazione seguenti:

  • Il driver di livello più alto in una catena di driver a livelli deve avere almeno una routine Annulla se esegue la coda di irP o in caso contrario contiene irP in uno stato annullabile. Può avere più routine Annulla , se necessario.

  • I driver di livello inferiore in cui possono essere mantenuti in uno stato annullabile per intervalli relativamente lunghi dovrebbero avere anche una o più routine Annulla .

  • Se un driver gestisce le proprie code interne di IRP, deve avere una routine Annulla separata per ognuna delle relative code.

Alcuni driver di livello più alto per dispositivi interattivi, ad esempio tastiera, mouse, suono, classe parallela e driver seriali, devono disporre di routine Cancel . Alcuni driver di livello inferiore, ad esempio un driver di porta parallela che contiene irP accodati per un certo numero di driver di classe di livello superiore per intervalli relativamente lunghi, dovrebbe anche avere routine Annulla .

I driver dei dispositivi di archiviazione di massa, insieme ai driver intermedi su di essi, sono improbabili che le routine Annullano . È responsabilità di un driver di file system gestire l'annullamento delle richieste di I/O dei file, mentre gli input IRP per i driver di archiviazione di massa di livello inferiore vengono in genere elaborati per il completamento troppo rapidamente per essere annullabili.