การเรียกขั้นตอนที่เลื่อนเวลา (DPC) เป็นกลไกการจัดการขัดจังหวะในระบบปฏิบัติการ Microsoft Windows ซึ่งไดรเวอร์สามารถอ้างอิงเมื่อใช้กระบวนการบางอย่าง DPC อนุญาตให้เปิดใช้งาน แต่ไม่ได้ดำเนินการจากระดับการร้องขอขัดจังหวะ (IRQL) ที่มีลำดับความสำคัญสูง สิ่งนี้จะช่วยให้ไดรเวอร์สามารถประมวลผลรูทีนการบริการขัดจังหวะระดับสูง (ISR) ได้อย่างรวดเร็วในขณะที่ชะลอการเรียกใช้งานรหัส IRQL ระดับล่าง ไดร์เวอร์ใช้ DPCs เพื่อกำหนดการทำงานของอินพุต / เอาท์พุต (I / O) ไดรเวอร์คือซอฟต์แวร์ที่ Windows ใช้เพื่อสื่อสารกับอุปกรณ์ฮาร์ดแวร์
บริการรถรับส่ง
โปรแกรมควบคุมอุปกรณ์โหมดเคอร์เนลจัดการการถ่ายโอนกระแสข้อมูลเสียงหรือวิดีโอตามอัตภาพจากหรือไปยังอุปกรณ์ภายนอก การประมวลผลข้อมูลของไดรเวอร์อุปกรณ์นั้นถูกอินเตอร์รัปต์ ฮาร์ดแวร์ภายนอกสร้างการขัดจังหวะเป็นประจำเพื่อขอให้ไดรเวอร์อุปกรณ์ถ่ายโอนชุดข้อมูลต่อไป ไดรเวอร์อุปกรณ์ไม่สามารถประมวลผลข้อมูลได้ทันทีในชุดคำสั่งขัดจังหวะ ดังนั้นระบบปฏิบัติการจำเป็นต้องเรียกรูทีนการเรียกกลับซึ่งก็คือ DPC โหมดเคอร์เนลหรือโหมดระบบและโหมดผู้ใช้เป็นโหมดการทำงานของหน่วยประมวลผลกลางของคุณ เคอร์เนลควบคุมกิจกรรมการประมวลผลระบบทั้งหมด
การกำหนด
แนวคิดของการเรียกโพรซีเดอร์ที่เลื่อนออกไปมีอยู่ในโหมดเคอร์เนลเท่านั้น ระบบปฏิบัติการเก็บ DPC ที่กำหนดเวลาไว้โดยไดรเวอร์อุปกรณ์ในคิว หากระบบของคุณต้องการประมวลผลการขัดจังหวะเคอร์เนลจะตรวจสอบคิว DPC และดำเนินการ DPC แรกหากไม่มีการขัดจังหวะและไม่มีกระบวนการ DPC ทำงาน DPC เป็นเธรดที่มีความสำคัญสูงสุดในระบบเนื่องจากการประมวลผลคิว DPC เกิดขึ้นก่อนที่โปรแกรมเลือกจ่ายงานจะเลือกเธรดและกำหนดสิ่งนี้ให้กับ CPU DPC มีสามระดับความสำคัญ: ต่ำปานกลางและสูง
กระบวนการ
DPC แต่ละอันเชื่อมโยงกับหนึ่งวัตถุ DPC ที่ระบบกำหนด เมื่อไดรเวอร์ลงทะเบียนชุดคำสั่ง DPCForslr ระบบจะเริ่มต้นวัตถุ DPC ที่กำหนดไว้ก่อนหน้านี้ หากต้องการมากกว่าหนึ่ง DPC ไดรเวอร์จะสร้างวัตถุ DPC เพิ่มเติมที่เรียกว่ารูทีน CustomDPC ชุดคำสั่ง DPCForlsr จัดการกระบวนการต่าง ๆ เสร็จสิ้นการดำเนินการ I / O ที่อธิบายโดยแพ็กเก็ตคำร้องขออินพุต / เอาต์พุต (IRP), ยกเลิกสัญญาณ IRP ถัดไป, ตั้งค่าสถานะอินพุต / เอาต์พุตใน IRP ที่ได้รับและกระบวนการเพื่อดำเนินการตามคำขอให้เสร็จสมบูรณ์
การปฏิบัติ
โดยปกติแล้วไดรเวอร์อุปกรณ์ที่มีรูทีนการบริการขัดจังหวะจะมีชุดคำสั่ง DPCForIsr หรือ CustomDPC อย่างน้อยหนึ่งชุดเพื่อให้การประมวลผลการดำเนินการ I / O ขับเคลื่อนโดยขัดจังหวะ ตาม Open Systems Resources, Inc. เหตุผลพื้นฐานที่ไดร์เวอร์มีรูทีน DPCForlsr เดี่ยวชุดของ CustomDPC รูทีนหรือทั้งสองอย่างขึ้นอยู่กับลักษณะของอุปกรณ์ที่รองรับและชุดคำขอ I / O ที่ต้องสนับสนุน ISR ของไดรเวอร์ต้องเรียก IoRequestDPC สำหรับการดำเนินการ I / O ที่ขัดจังหวะโดยใช้รูทีน DPCForlsr ในทางกลับกันสำหรับการดำเนินการที่ทับซ้อนกันการดำเนินการ I / O ที่ขัดจังหวะโดยใช้รูทีน CustomDPC นั้น ISR ต้องเรียก KeInsertQueueDPC