Hva er utsatt prosedyrekall?

Innholdsfortegnelse:

Anonim

Et utsatt prosedyreanrop (DPC) er en avbruddshåndteringsmekanisme i Microsoft Windows-operativsystemet som driverne kan referere til når du kjører bestemte prosesser. DPC tillater en oppgave å bli aktivert, men ikke utført, fra et høyt prioritert interrupt request level (IRQL). Dette tillater en driver å behandle et høyt nivå avbruddstjenesteversjon (ISR) raskt, mens det utsettes for utførelse av lavere IRQL-koder. Drivere bruker DPC til å planlegge inngang / utgang (I / O) operasjoner. Drivere er programvare som brukes av Windows for å kommunisere med maskinvareenheter.

Overganger

En kjernemodus-enhetsdriver håndterer overføring av en lyd- eller videodatastrøm fra eller til en ekstern enhet. Databehandlingen av enhetsdriverne er avbruddstilt. Den eksterne maskinvaren genererer rutinemessig avbrudd for å be om at enhetsdriveren skal overføre neste batch av data. En enhetsdriver kan ikke behandle data øyeblikkelig i interruptrutinen; Derfor må operativsystemet utløse en tilbakeringingsrutine, som er DPC. Kjernemodus eller systemmodus og brukermodus er driftsmodusene til den sentrale behandlingsenheten. Kjernen kontrollerer alle systembehandlingsaktiviteter.

planlegging

Konseptet med en utsatt prosedyreanrop eksisterer bare i kjernemodus. Operativsystemet holder DPCene planlagt av enhetsdrivere i en kø. Hvis systemet ditt trenger å behandle avbrudd, kontrollerer kjernen DPC-køen og utfører den første DPC-en hvis det ikke er noen avbrudd og ingen DPC-prosesser går. DPC er den høyeste prioriterte tråden i systemet, ettersom DPC-køprosessen skjer før senderen velger en tråd og tilordner dette til CPU. DPC har tre prioritetsnivåer: lav, middels og høy.

prosesser

Hver DPC er koblet til ett systemdefinert DPC-objekt. Når en driver registrerer en DPCForslr-rutin, initierer systemet det tidligere definerte DPC-objektet. Hvis det kreves mer enn én DPC, oppretter en driver flere DPC-objekter kjent som CustomDPC-rutiner. DPCForlsr-rutinen håndterer flere prosesser; Den fullfører I / O-operasjonen beskrevet av Input / Output Request Packets (IRP), deques neste IRP, setter inn / ut-status i den mottatte IRP og prosessen for å fullføre forespørselen.

rutiner

Normalt har en enhetsdriver som har en avbruddstjeneste rutine minst en DPCForIsr eller CustomDPC-rutine for å fullføre behandlingen av avbruddsdrevne I / O-operasjoner. Ifølge Open Systems Resources, Inc., er grunnleggende årsaken til at en driver har en DPCForlsr-rutine, et sett med CustomDPC-rutiner, eller begge avhenger av arten av den underliggende enheten og settet med I / O-forespørsler det må støtte. En førers ISR trenger å ringe IoRequestDPC for avbruddsdrevet I / O-operasjoner ved hjelp av DPCForlsr-rutiner. Omvendt, for overlappede operasjoner, avbryterdrevet I / O-operasjoner ved hjelp av CustomDPC-rutiner, må ISR ringe til KeInsertQueueDPC.