Ett uppskjutet procedursamtal (DPC) är en avbrottshanteringsmekanism i Microsoft Windows operativsystem som drivrutiner kan hänvisa till vid körning av vissa processer. DPC tillåter en uppgift att aktiveras men inte exekveras, från en hög prioriterad avbrytningsbegäranivå (IRQL). Detta gör det möjligt för en drivrutin att snabbt hantera en interrupt-servicerutin (ISR) på hög nivå, samtidigt som man utesluter utförandet av lägre IRQL-koder. Drivrutiner använder DPC: er för att schemalägga ingång / utgång (I / O) -operationer. Drivrutiner är programvara som används av Windows för att kommunicera med hårdvaruenheter.
överföringar
En drivrutin för drivrutinsdrift hanterar konventionellt överföringen av en ljud- eller videodataström från eller till en extern enhet. Databehandlingen av enhetsdrivrutinerna är avbrottsdriven. Den externa hårdvaran genererar rutinmässigt avbrott för att begära enhetsdrivrutinen att överföra nästa sändning av data. En enhetsdrivrutin kan inte behandla data direkt i sin avbrottsrutin; operativsystemet behöver därför utlösa en återuppringningsrutin, vilken är DPC. Kärnläget, eller systemläget och användarläget är driftsätten för din centralbehandlingsenhet. Kärnan kontrollerar alla systembehandlingsaktiviteter.
schemaläggning
Begreppet ett uppringt procedur samtal existerar endast i kärnläge. Operativsystemet håller DPC: erna schemalagda av enhetsdrivrutinerna i en kö. Om ditt system behöver hantera avbrott kontrollerar kärnan DPC-köen och kör den första DPC-enheten om det inte finns några avbrott och inga DPC-processer körs. DPC är den högsta prioriterade tråden i systemet, eftersom DPC-köbehandling sker innan avsändaren väljer en tråd och tilldelar detta till CPU. DPC har tre prioritetsnivåer: låg, medium och hög.
processer
Varje DPC är kopplad till ett systemdefinierat DPC-objekt. När en förare registrerar en DPCForslr-rutin, initierar systemet det tidigare definierade DPC-objektet. Om mer än en DPC krävs, skapar en drivrutin ytterligare DPC-objekt som är kända som CustomDPC-rutiner. DPCForlsr-rutinen hanterar flera processer; Den kompletterar I / O-operationen som beskrivs av inmatnings- / utmatningsförfrågningspaketet (IRP), deckar nästa IRP, ställer in / ut-status i den mottagna IRP och processen för att slutföra förfrågan.
rutiner
Normalt har en drivrutin med avbrottstjänst rutin åtminstone en DPCForIsr eller CustomDPC-rutin för att slutföra behandlingen av avbrottsdrivna I / O-operationer. Enligt Open Systems Resources, Inc. beror den grundläggande orsaken till att en förare har en DPCForlsr-rutin, en uppsättning CustomDPC-rutiner eller båda beror på vilken underliggande enhet som helst och den uppsättning I / O-förfrågningar som den måste stödja. En förare ISR behöver ringa IoRequestDPC för avbrottsdrivna I / O-operationer med hjälp av DPCForlsr-rutiner. Omvänt, för överlappande operationer, avbryta driven I / O-operationer med CustomDPC-rutiner, måste ISR ringa KeInsertQueueDPC.