Wat zijn uitgestelde procedureoproepen?

Een uitgestelde procedure-aanroep (DPC) is een mechanisme voor het afhandelen van onderbrekingen in het Microsoft Windows-besturingssysteem waarnaar stuurprogramma's kunnen verwijzen bij het uitvoeren van bepaalde processen. Met DPC kan een taak worden geactiveerd, maar niet uitgevoerd, vanaf een hoog geprioriteerd interruptverzoekniveau (IRQL). Dit stelt een bestuurder in staat om een ​​high-level interrupt service routine (ISR) snel te verwerken, terwijl de uitvoering van lagere IRQL-codes wordt uitgesteld. Stuurprogramma's gebruiken DPC's om invoer/uitvoer (I/O)-bewerkingen te plannen. Stuurprogramma's zijn software die door Windows wordt gebruikt om met hardwareapparaten te communiceren.

Overboekingen

Een apparaatstuurprogramma in de kernelmodus zorgt conventioneel voor de overdracht van een audio- of videogegevensstroom van of naar een extern apparaat. De gegevensverwerking van de apparaatstuurprogramma's is interruptgestuurd. De externe hardware genereert routinematig interrupts om het apparaatstuurprogramma te vragen de volgende batch gegevens over te dragen. Een apparaatstuurprogramma kan gegevens niet onmiddellijk verwerken in zijn onderbrekingsroutine; het besturingssysteem moet dus een callback-routine activeren, de DPC. De kernelmodus, of systeemmodus, en de gebruikersmodus zijn de werkingsmodi van uw centrale verwerkingseenheid. De kernel bestuurt alle systeemverwerkingsactiviteiten.

Het roosteren

Het concept van een uitgestelde procedureaanroep bestaat alleen in de kernelmodus. Het besturingssysteem houdt de DPC's die zijn gepland door de apparaatstuurprogramma's in een wachtrij. Als uw systeem interrupts moet verwerken, controleert de kernel de DPC-wachtrij en voert de eerste DPC uit als er geen interrupts zijn en er geen DPC-processen lopen. De DPC is de thread met de hoogste prioriteit in het systeem, aangezien de DPC-wachtrijverwerking plaatsvindt voordat de coördinator een thread kiest en deze toewijst aan de CPU. DPC's hebben drie prioriteitsniveaus: laag, gemiddeld en hoog.

Processen

Elke DPC is gekoppeld aan één door het systeem gedefinieerd DPC-object. Wanneer een stuurprogramma een DPCForslr-routine registreert, initialiseert het systeem het eerder gedefinieerde DPC-object. Als er meer dan één DPC nodig is, maakt een stuurprogramma extra DPC-objecten die bekend staan ​​als CustomDPC-routines. De DPCForlsr-routine behandelt verschillende processen; het voltooit de I/O-bewerking die wordt beschreven door de invoer/uitvoerverzoekpakketten (IRP), dequeert de volgende IRP, stelt de invoer/uitvoerstatus in op de ontvangen IRP en het proces om het verzoek te voltooien.

routines

Normaal gesproken heeft een apparaatstuurprogramma met een interruptserviceroutine ten minste één DPCForIsr- of CustomDPC-routine om de verwerking van interruptgestuurde I/O-bewerkingen te voltooien. Volgens Open Systems Resources, Inc. is de fundamentele reden waarom een ​​stuurprogramma een enkele DPCForlsr-routine, een set CustomDPC-routines of beide heeft, afhankelijk van de aard van het onderliggende apparaat en de reeks I/O-verzoeken die het moet ondersteunen. De ISR van een stuurprogramma moet IoRequestDPC aanroepen voor interrupt-gestuurde I/O-bewerkingen met behulp van DPCForlsr-routines. Omgekeerd, voor overlappende operaties, interrupt-gestuurde I/O-operaties met behulp van CustomDPC-routines, moet ISR KeInsertQueueDPC aanroepen.