Các cuộc gọi theo thủ tục hoãn lại là gì?

Lệnh 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 trình điều khiển xử lý một quy trình dịch vụ ngắt mức cao (ISR) một cách nhanh chóng trong khi trì hoãn việc thực thi các mã IRQL cấp thấp hơn. Trình điều khiển sử dụng DPC để lập 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 khoản

Trình điều khiển thiết bị chế độ hạt 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 một thiết bị bên ngoài. Quá trình xử lý dữ liệu của trình điều khiển thiết bị được điều khiển theo hướng 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 quy trình ngắt của nó; do đó, hệ điều hành cần kích hoạt một quy trình gọi lại, đó là DPC. Chế độ hạt 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. Kernel kiểm soát tất cả các hoạt động xử lý của hệ thống.

Lập kế hoạch

Khái niệm về một lệnh gọi thủ tục hoãn lại chỉ tồn tại trong chế độ hạt nhân. Hệ điều hành giữ các DPC được trình điều khiển thiết bị lập lịch trong một hàng đợi. Nếu hệ thống của bạn cần xử lý ngắt, hạt nhân 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 đang 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 người điều phối chọn một luồng và gán luồng này cho CPU. UBND huyện có ba mức ư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 quy trình DPCForslr, hệ thống sẽ khởi tạo đối tượng DPC đã được xác định trước đó. Nếu yêu cầu 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 quy trình CustomDPC. Quy trình DPCForlsr xử lý một số quy trình; nó hoàn thành hoạt động I / O được mô tả bởi các gói yêu cầu đầu vào / đầu ra (IRP), xác định IRP tiếp theo, đặt trạng thái đầu vào / đầu ra trong IRP đã nhận 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ó quy trình dịch vụ ngắt có ít nhất một quy trình DPCForIsr hoặc CustomDPC để hoàn tất quá trình xử lý các hoạt động I / O theo hướng ngắt. Theo Open Systems Resources, Inc., lý do cơ bản mà trình điều khiển có một quy trình DPCForlsr duy nhất, một tập hợp các quy trình CustomDPC hoặc cả hai tùy 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ợ. ISR của trình điều khiển cần gọi IoRequestDPC cho các hoạt động I / O theo hướng ngắt sử dụng quy 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 theo hướng ngắt sử dụng các quy trình CustomDPC, ISR cần gọi KeInsertQueueDPC.