Hvad er udskudte procedureopkald?

Et udskudt procedureopkald (DPC) er en afbrydningshåndteringsmekanisme i Microsoft Windows-operativsystemet, som drivere kan henvise til, når de kører bestemte processer. DPC tillader, at en opgave aktiveres, men ikke udføres, fra et højt prioriteret interrupt-anmodningsniveau (IRQL). Dette giver en driver mulighed for hurtigt at behandle en ISR (High-Level Interrupt Service Routine), mens den udsætter udførelsen af ​​IRQL-koder på lavere niveau. Drivere bruger DPC'er til at planlægge input / output (I / O) operationer. Drivere er software, der bruges af Windows til at kommunikere med hardwareenheder.

Overførsler

En enhedsdriver til kernetilstand håndterer traditionelt overførslen af ​​en lyd- eller videodatastrøm fra eller til en ekstern enhed. Databehandlingen af ​​enhedsdriverne er afbrydelsesdrevet. Den eksterne hardware genererer rutinemæssigt afbrydelser for at anmode enhedsdriveren om at overføre den næste batch af data. En enhedsdriver kan ikke behandle data med det samme i sin afbrydelsesrutine; således skal operativsystemet udløse en tilbagekaldningsrutine, som er DPC. Kernetilstand eller systemtilstand og brugertilstand er driftsformerne for din centralbehandlingsenhed. Kernen styrer alle systembehandlingsaktiviteter.

Planlægning

Begrebet et udskudt procedureopkald findes kun i kernetilstand. Operativsystemet holder DPC'erne planlagt af enhedsdriverne i en kø. Hvis dit system skal behandle afbrydelser, kontrollerer kernen DPC-køen og udfører den første DPC, hvis der ikke er nogen afbrydelser, og ingen DPC-processer kører. DPC er den højest prioriterede tråd i systemet, da DPC-købehandlingen finder sted, inden afsenderen vælger en tråd og tildeler dette til CPU'en. DPC'er har tre prioritetsniveauer: lav, medium og høj.

Processer

Hver DPC er forbundet med et systemdefineret DPC-objekt. Når en driver registrerer en DPCForslr-rutine, initialiserer systemet det tidligere definerede DPC-objekt. Hvis der kræves mere end én DPC, opretter en driver yderligere DPC-objekter kendt som CustomDPC-rutiner. DPCForlsr rutinen håndterer flere processer; det fuldfører I / O-operationen beskrevet af input / output-anmodningspakkerne (IRP), deques den næste IRP, indstiller input / output-status i den modtagne IRP og processen til at fuldføre anmodningen.

Rutiner

Normalt har en enhedsdriver, der har en afbrydelsesrutine mindst en DPCForIsr- eller CustomDPC-rutine til at fuldføre behandlingen af ​​afbrydelsesdrevne I / O-operationer. Ifølge Open Systems Resources, Inc. afhænger den grundlæggende årsag til, at en driver har en enkelt DPCForlsr-rutine, et sæt CustomDPC-rutiner eller begge dele, arten af ​​den underliggende enhed og det sæt I / O-anmodninger, den skal understøtte. En chaufførs ISR skal ringe til IoRequestDPC til afbrydelsesdrevne I / O-operationer ved hjælp af DPCForlsr-rutiner. Omvendt skal ISR for overlappende operationer, afbrydelsesdrevne I / O-operationer ved hjælp af CustomDPC-rutiner, kalde KeInsertQueueDPC.