Care sunt procedurile solicitate pentru amânare?

Cuprins:

Anonim

Un apel de procedură amânată (DPC) este un mecanism de manipulare a întreruperii în sistemul de operare Microsoft Windows, la care șoferii pot face referire atunci când rulează anumite procese. DPC permite ca o sarcină să fie activată, dar neexecutată, de la un nivel de solicitare de întrerupere cu prioritate foarte mare (IRQL). Acest lucru permite unui conducător auto să proceseze rapid o rutină de întrerupere la nivel înalt (ISR) în timp ce amâna executarea codurilor IRQL de nivel inferior. Conducătorii folosesc DPC pentru a programa operațiunile de intrare / ieșire (I / O). Driverele sunt software-ul folosit de Windows pentru a comunica cu dispozitivele hardware.

transferuri

Un driver de dispozitiv de tip kernel se ocupă, în mod convențional, cu transferul unui flux de date audio sau video de pe sau pe un dispozitiv extern. Prelucrarea datelor driverelor de dispozitiv este determinată de întreruperi. Hardware-ul extern generează în mod curent întreruperi pentru a solicita driverului dispozitivului să transfere următorul lot de date. Un driver de dispozitiv nu poate procesa date instantaneu în rutina de întrerupere a acestuia; astfel, sistemul de operare trebuie să declanșeze o rutină de apel invers, care este DPC. Modul kernel, modul de sistem și modul de utilizare sunt modurile de operare ale unității centrale de procesare. Kernel-ul controlează toate activitățile de procesare a sistemului.

Programare

Conceptul de apel de procedură amânată există numai în modul kernel. Sistemul de operare menține DPC-urile programate de către driverele de dispozitive într-o coadă. Dacă sistemul dvs. trebuie să proceseze întreruperi, kernelul verifică coada DPC și execută primul DPC dacă nu există întreruperi și nu se execută procese DPC. DPC este cel mai înalt fir prioritar din sistem, deoarece procesarea coadă DPC are loc înainte ca dispecerul să aleagă un fir și să îl atribuie CPU-ului. DPC au trei niveluri de prioritate: nivel scăzut, mediu și ridicat.

procese

Fiecare DPC este legat de un obiect DPC definit de sistem. Când un driver înregistrează o rutină DPCForslr, sistemul inițializează obiectul DPC definit anterior. Dacă sunt necesare mai multe DPC, un driver creează alte obiecte DPC cunoscute sub numele de rutine CustomDPC. Rutina DPCForlsr se ocupă de mai multe procese; completează operația de I / O descrisă de pachetele de solicitare de intrare / ieșire (IRP), deques următorul IRP, stabilește starea intrare / ieșire în IRP primită și procesul de completare a cererii.

rutine

În mod normal, un driver de dispozitiv care are o rutină de întrerupere a serviciului are cel puțin o rutină DPCForIsr sau CustomDPC pentru a finaliza procesarea operațiilor I / O de întrerupere. Potrivit Open Systems Resources, Inc., motivul fundamental în care un driver are o singură rutină DPCForlsr, un set de rutine CustomDPC sau ambele depinde de natura dispozitivului de bază și de setul de cereri de I / O pe care trebuie să îl suporte. ISR-ul unui șofer trebuie să apeleze IoRequestDPC pentru operații de I / O cu întrerupere prin rutine DPCForlsr. În schimb, pentru operațiile suprapuse, operațiile de I / O cu întreruperi care utilizează rutinele CustomDPC, ISR trebuie să sune KeInsertQueueDPC.