Atliktais procedūras izsaukums (DPC) ir pārtraukumu apstrādes mehānisms Microsoft Windows operētājsistēmā, uz kuru draiveri var atsaukties, izpildot noteiktus procesus. DPC ļauj aktivizēt, bet neizpildīt uzdevumu no ļoti prioritārā pārtraukuma pieprasījuma līmeņa (IRQL). Tas ļauj vadītājam ātri apstrādāt augsta līmeņa pārtraukuma pakalpojumu rutīnu (ISR), vienlaikus atliekot zemāka līmeņa IRQL kodu izpildi. Draiveri izmanto DPC, lai ieplānotu ievades / izvades (I / O) darbības. Draiveri ir programmatūra, kuru Windows izmanto saziņai ar aparatūras ierīcēm.
Pārskaitījumi
Kodola režīma ierīces draiveris parasti veic audio vai video datu straumes pārsūtīšanu no ārējas ierīces vai uz to. Ierīču draiveru datu apstrāde notiek ar pārtraukumiem. Ārējā aparatūra regulāri ģenerē pārtraukumus, lai pieprasītu ierīces draiverim pārsūtīt nākamo datu partiju. Ierīces draiveris nevar nekavējoties apstrādāt datus savā pārtraukuma rutīnā; tādējādi operētājsistēmai ir jāaktivizē atzvanīšanas rutīna, kas ir DPC. Kodola vai sistēmas režīms un lietotāja režīms ir jūsu centrālā procesora darbības režīmi. Kodols kontrolē visas sistēmas apstrādes darbības.
Plānošana
Atliktā procedūras izsaukuma jēdziens pastāv tikai kodola režīmā. Operētājsistēma ierīču draiveru ieplānotos DPC saglabā rindā. Ja jūsu sistēmai ir jāapstrādā pārtraukumi, kodols pārbauda DPC rindu un izpilda pirmo DPC, ja nav pārtraukumu un nedarbojas DPC procesi. DPC ir visaugstāk prioritārais pavediens sistēmā, jo DPC rindas apstrāde notiek pirms dispečers izvēlas pavedienu un piešķir to CPU. DPC ir trīs prioritārie līmeņi: zems, vidējs un augsts.
Procesi
Katrs DPC ir saistīts ar vienu sistēmas definētu DPC objektu. Kad draiveris reģistrē DPCForslr rutīnu, sistēma inicializē iepriekš definēto DPC objektu. Ja nepieciešams vairāk nekā viens DPC, draiveris izveido papildu DPC objektus, kas pazīstami kā CustomDPC rutīnas. DPCForlsr rutīna apstrādā vairākus procesus; tas pabeidz I / O darbību, ko apraksta ievades / izvades pieprasījuma paketes (IRP), noņem deques nākamo IRP, iestata ievades / izvades statusu saņemtajā IRP un procesu pieprasījuma pabeigšanai.
Rutīnas
Parasti ierīces draiverim, kuram ir pārtraukuma pakalpojuma rutīna, ir vismaz viena DPCForIsr vai CustomDPC rutīna, lai pabeigtu ar pārtraukumiem saistītu I / O darbību apstrādi. Saskaņā ar Open Systems Resources, Inc. būtiskais iemesls, kāpēc draiverim ir viena DPCForlsr rutīna, CustomDPC rutīnu kopums vai abi, ir atkarīgs no tā pamatā esošās ierīces rakstura un I / O pieprasījumu kopas, kas tai jāatbalsta. Vadītāja ISR nepieciešams izsaukt IoRequestDPC, lai veiktu ar pārtraukumiem saistītas I / O darbības, izmantojot DPCForlsr rutīnas. Un otrādi, lai veiktu pārklāšanās, ar pārtraukumiem saistītas I / O operācijas, izmantojot CustomDPC rutīnas, ISR ir jāzvana KeInsertQueueDPC.