Τι είναι οι αναβαλλόμενες κλήσεις διαδικασίας

Μια αναβαλλόμενη κλήση διαδικασίας (DPC) είναι ένας μηχανισμός χειρισμού διακοπών στο λειτουργικό σύστημα Microsoft Windows στον οποίο μπορούν να αναφερθούν τα προγράμματα οδήγησης κατά την εκτέλεση ορισμένων διαδικασιών. Το DPC επιτρέπει την ενεργοποίηση μιας εργασίας, αλλά δεν εκτελείται, από ένα επίπεδο αιτήματος διακοπής με υψηλή προτεραιότητα (IRQL). Αυτό επιτρέπει σε ένα πρόγραμμα οδήγησης να επεξεργάζεται μια ρουτίνα υπηρεσίας διακοπής υψηλού επιπέδου (ISR) γρήγορα, ενώ αναβάλλει την εκτέλεση κωδικών IRQL χαμηλότερου επιπέδου. Οι οδηγοί χρησιμοποιούν DPC για τον προγραμματισμό λειτουργιών εισόδου / εξόδου (I / O). Τα προγράμματα οδήγησης είναι λογισμικό που χρησιμοποιείται από τα Windows για επικοινωνία με συσκευές υλικού.

Μεταφορές

Ένα πρόγραμμα οδήγησης συσκευής λειτουργίας πυρήνα χειρίζεται συμβατικά τη μεταφορά μιας ροής δεδομένων ήχου ή βίντεο από ή προς μια εξωτερική συσκευή. Η επεξεργασία δεδομένων των προγραμμάτων οδήγησης συσκευών καθοδηγείται από διακοπές. Το εξωτερικό υλικό δημιουργεί τακτικά διακοπές για να ζητήσει από το πρόγραμμα οδήγησης συσκευής να μεταφέρει την επόμενη παρτίδα δεδομένων. Ένα πρόγραμμα οδήγησης συσκευής δεν μπορεί να επεξεργαστεί δεδομένα άμεσα στη ρουτίνα διακοπής του. Επομένως, το λειτουργικό σύστημα πρέπει να ενεργοποιήσει μια ρουτίνα επανάκλησης, που είναι το DPC. Η λειτουργία πυρήνα ή η λειτουργία συστήματος και η λειτουργία χρήστη είναι οι τρόποι λειτουργίας της κεντρικής μονάδας επεξεργασίας. Ο πυρήνας ελέγχει όλες τις δραστηριότητες επεξεργασίας συστήματος.

Χρονοδρομολόγηση

Η έννοια μιας αναβαλλόμενης κλήσης διαδικασίας υπάρχει μόνο σε λειτουργία πυρήνα. Το λειτουργικό σύστημα διατηρεί τα DPC προγραμματισμένα από τα προγράμματα οδήγησης συσκευών σε ουρά. Εάν το σύστημά σας πρέπει να επεξεργαστεί τις διακοπές, ο πυρήνας ελέγχει την ουρά DPC και εκτελεί το πρώτο DPC εάν δεν υπάρχουν διακοπές και δεν εκτελούνται διαδικασίες DPC. Το DPC είναι το νήμα με την υψηλότερη προτεραιότητα στο σύστημα, καθώς η επεξεργασία της ουράς DPC πραγματοποιείται πριν ο διεκπεραιωτής επιλέξει ένα νήμα και το εκχωρήσει στην CPU. Τα DPC έχουν τρία επίπεδα προτεραιότητας: χαμηλό, μεσαίο και υψηλό.

Διαδικασίες

Κάθε DPC συνδέεται με ένα αντικείμενο DPC που καθορίζεται από το σύστημα. Όταν ένα πρόγραμμα οδήγησης καταγράφει μια ρουτίνα DPCForslr, το σύστημα αρχικοποιεί το αντικείμενο DPC που ορίστηκε προηγουμένως. Εάν απαιτούνται περισσότερα από ένα DPC, ένα πρόγραμμα οδήγησης δημιουργεί πρόσθετα αντικείμενα DPC γνωστά ως ρουτίνες CustomDPC. Η ρουτίνα DPCForlsr χειρίζεται διάφορες διαδικασίες. ολοκληρώνει τη λειτουργία εισόδου / εξόδου που περιγράφεται από τα πακέτα αιτήσεων εισόδου / εξόδου (IRP), διακόπτει το επόμενο IRP, ορίζει την κατάσταση εισόδου / εξόδου στο ληφθέν IRP και τη διαδικασία ολοκλήρωσης του αιτήματος.

Ρουτίνες

Κανονικά, ένα πρόγραμμα οδήγησης συσκευής που έχει ρουτίνα διακοπής υπηρεσίας έχει τουλάχιστον μία ρουτίνα DPCForIsr ή CustomDPC για να ολοκληρώσει την επεξεργασία των λειτουργιών εισόδου / εξόδου που οδηγούνται από διακοπές. Σύμφωνα με την Open Systems Resources, Inc., ο θεμελιώδης λόγος για τον οποίο ένας οδηγός έχει μια ρουτίνα DPCForlsr, ένα σύνολο ρουτίνων CustomDPC ή και τα δύο εξαρτάται από τη φύση της υποκείμενης συσκευής του και το σύνολο αιτημάτων εισόδου / εξόδου που πρέπει να υποστηρίζει. Το ISR ενός προγράμματος οδήγησης πρέπει να καλέσει το IoRequestDPC για λειτουργίες εισόδου / εξόδου που οδηγούν σε διακοπές χρησιμοποιώντας ρουτίνες DPCForlsr. Αντιστρόφως, για αλληλεπικαλυπτόμενες λειτουργίες, λειτουργίες εισόδου / εξόδου με χρήση διακοπών χρησιμοποιώντας ρουτίνες CustomDPC, το ISR πρέπει να καλέσει KeInsertQueueDPC.