Hvad er udskudt procedureopkald?

Indholdsfortegnelse:

Anonim

Et udskudt procedureopkald (DPC) er en afbrydelsesmekanisme i Microsoft Windows-operativsystemet, som chauffører kan henvise til, når de kører visse processer. DPC tillader en opgave at blive aktiveret, men ikke udført, fra et højt prioriteret interrupt request level (IRQL). Dette giver en driver mulighed for hurtigt at behandle en interrupt service routine (ISR) på højt niveau, mens udskyde udførelsen af ​​lavere niveau IRQL koder. 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 kerne-enhedsdriver driver konventionelt overførslen af ​​en lyd- eller videodatastrøm fra eller til en ekstern enhed. Databehandlingen af ​​enhedsdrivere er afbrydelsesdrevet. Den eksterne hardware genererer rutinerne afbrydelser for at anmode enhedsdriveren om at overføre den næste batch af data. En enhedsdriver kan ikke behandle data øjeblikkeligt i sin afbrydelsesrutine; operativsystemet skal derfor udløse en tilbagekaldelsesrutine, hvilket er DPC. Kernel-tilstanden eller systemtilstanden og brugerfunktionen er driftsmåden for din centrale behandlingsenhed. Kernen styrer alle systembehandlingsaktiviteter.

Planlægning

Konceptet om et udsat procedure kald kun findes i kernel mode. 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'en er den højest prioriterede tråd i systemet, da DPC-køforarbejdning sker, inden dispatcheren vælger en tråd og tildeler denne til CPU'en. DPC har tre prioriterede niveauer: lav, mellem 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 en DPC, opretter en driver yderligere DPC-objekter, der kaldes CustomDPC-rutiner. DPCForlsr-rutinen håndterer flere processer; det fuldender I / O-operationen beskrevet af input / output request packets (IRP), deques den næste IRP, indstiller input / output status i den modtagne IRP og processen for 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. er den grundlæggende årsag til, at en driver har en enkelt DPCForlsr-rutine, et sæt CustomDPC-rutiner, eller begge afhænger af dens underliggende enhed og det sæt af I / O-anmodninger, som det skal understøtte. En førerens ISR skal ringe til IoRequestDPC for afbrydelsesdrevne I / O-operationer ved hjælp af DPCForlsr-rutiner. Omvendt skal ISR kalde KeInsertQueueDPC for overlappede operationer, afbryd-drevne I / O-operationer ved hjælp af CustomDPC-rutiner.