Cuộc gọi thủ tục hoãn lại (DPC) là một cơ chế xử lý ngắt trong hệ điều hành Microsoft Windows mà trình điều khiển có thể tham chiếu khi chạy các quy trình nhất định. DPC cho phép một tác vụ được kích hoạt, nhưng không được thực thi, từ mức yêu cầu ngắt được ưu tiên cao (IRQL). Điều này cho phép người lái xe xử lý nhanh quy trình dịch vụ ngắt cấp cao (ISR) trong khi trì hoãn việc thực thi mã IRQL cấp thấp hơn. Trình điều khiển sử dụng DPC để lên lịch hoạt động đầu vào / đầu ra (I / O). Trình điều khiển là phần mềm được Windows sử dụng để giao tiếp với các thiết bị phần cứng.
Chuyển
Trình điều khiển thiết bị chế độ nhân thông thường xử lý việc truyền luồng dữ liệu âm thanh hoặc video từ hoặc sang thiết bị bên ngoài. Việc xử lý dữ liệu của trình điều khiển thiết bị bị gián đoạn. Phần cứng bên ngoài thường xuyên tạo ra các ngắt để yêu cầu trình điều khiển thiết bị chuyển lô dữ liệu tiếp theo. Trình điều khiển thiết bị không thể xử lý dữ liệu ngay lập tức trong thói quen ngắt của nó; do đó, hệ điều hành cần kích hoạt một thói quen gọi lại, đó là DPC. Chế độ nhân, hoặc chế độ hệ thống và chế độ người dùng là các chế độ hoạt động của đơn vị xử lý trung tâm của bạn. Nhân kiểm soát tất cả các hoạt động xử lý hệ thống.
Lập kế hoạch
Khái niệm cuộc gọi thủ tục hoãn lại chỉ tồn tại trong chế độ kernel. Hệ điều hành giữ cho các DPC được lên lịch bởi trình điều khiển thiết bị trong hàng đợi. Nếu hệ thống của bạn cần xử lý các ngắt, kernel sẽ kiểm tra hàng đợi DPC và thực thi DPC đầu tiên nếu không có ngắt và không có tiến trình DPC nào chạy. DPC là luồng được ưu tiên cao nhất trong hệ thống, vì quá trình xử lý hàng đợi DPC xảy ra trước khi bộ điều phối chọn một luồng và gán nó cho CPU. Các DPC có ba cấp độ ưu tiên: thấp, trung bình và cao.
Quy trình
Mỗi DPC được liên kết với một đối tượng DPC do hệ thống xác định. Khi trình điều khiển đăng ký một thường trình DPCForslr, hệ thống sẽ khởi tạo đối tượng DPC được xác định trước đó. Nếu cần nhiều hơn một DPC, trình điều khiển sẽ tạo các đối tượng DPC bổ sung được gọi là các thường trình CustomDPC. Thường trình DPCForlsr xử lý một số quy trình; nó hoàn thành thao tác I / O được mô tả bởi các gói yêu cầu đầu vào / đầu ra (IRP), loại bỏ IRP tiếp theo, đặt trạng thái đầu vào / đầu ra trong IRP nhận được và quá trình hoàn thành yêu cầu.
Thói quen
Thông thường, trình điều khiển thiết bị có thói quen dịch vụ ngắt có ít nhất một thường trình DPCForIsr hoặc CustomDPC để hoàn tất xử lý các hoạt động I / O điều khiển ngắt. Theo Open Systems Resources, Inc., lý do cơ bản mà trình điều khiển có một thói quen DPCForlsr duy nhất, một tập hợp các thói quen CustomDPC hoặc cả hai đều phụ thuộc vào bản chất của thiết bị cơ bản của nó và tập hợp các yêu cầu I / O mà nó phải hỗ trợ. Trình điều khiển ISR ISR cần gọi IoRequestDPC cho các hoạt động I / O điều khiển ngắt sử dụng các thường trình DPCForlsr. Ngược lại, đối với các hoạt động chồng chéo, các hoạt động I / O điều khiển ngắt sử dụng các thường trình CustomDPC, ISR cần gọi KeInsertQueueDPC.