Wat zijn uitgestelde procedureaanroepen?

Inhoudsopgave:

Anonim

Een uitgestelde procedureaanroep (DPC) is een interrupt-verwerkingsmechanisme in het Microsoft Windows-besturingssysteem waarnaar bestuurders kunnen verwijzen bij het uitvoeren van bepaalde processen. Met DPC kan een taak worden geactiveerd, maar niet uitgevoerd, vanaf een sterk geprioriteerd interrupt request-niveau (IRQL). Hierdoor kan een bestuurder snel een interrupt-service-routine (ISR) op hoog niveau verwerken terwijl de uitvoering van IRQL-codes van lager niveau 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 te communiceren met hardwareapparaten.

transfers

Een stuurprogramma van de kernelmodus regelt conventioneel de overdracht van een audio- of videodatastream van of naar een extern apparaat. De gegevensverwerking van de apparaatstuurprogramma's wordt door een interrupt gestuurd. De externe hardware genereert routinematig interrupts om de apparaatdriver te vragen de volgende batch gegevens over te dragen. Een apparaatstuurprogramma kan de gegevens niet onmiddellijk verwerken in de interruptroutine; dus moet het besturingssysteem een ​​callback-routine activeren, namelijk de DPC. De kernelmodus, of systeemmodus, en de gebruikersmodus zijn de werkingsmodi van uw centrale verwerkingseenheid. De kernel bestuurt alle systeemverwerkingsactiviteiten.

scheduling

Het concept van een call met uitgestelde procedure bestaat alleen in de kernelmodus. Het besturingssysteem houdt de DPC's die zijn gepland door de stuurprogramma'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 geen DPC-processen worden uitgevoerd. De DPC is de thread met de hoogste prioriteit in het systeem, omdat 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 een door het systeem gedefinieerd DPC-object. Wanneer een bestuurder een DPCForslr-routine registreert, initialiseert het systeem het eerder gedefinieerde DPC-object. Als er meer dan één DPC is vereist, maakt een stuurprogramma extra DPC-objecten die bekend staan ​​als CustomDPC-routines. De routine DPCForlsr verwerkt verschillende processen; het voltooit de I / O-bewerking die wordt beschreven door de invoer / uitvoerverzoekpakketten (IRP), kiest de volgende IRP, stelt de invoer / uitvoerstatus in de ontvangen IRP in en het proces om het verzoek te voltooien.

routines

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