什么是延期程序调用?

目录:

Anonim

延迟过程调用(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,则驱动程序会创建称为CustomDPC例程的其他DPC对象。 DPCForlsr例程处理几个进程;它完成输入/输出请求数据包(IRP)描述的I / O操作,逼真下一个IRP,设置接收到的IRP中的输入/输出状态以及完成请求的过程。

例程

通常,具有中断服务例程的设备驱动程序至少具有一个DPCForIsr或CustomDPC例程来完成中断驱动的I / O操作的处理。根据Open Systems Resources,Inc。,驱动程序具有单个DPCForlsr例程的基本原因,一组CustomDPC例程或两者都取决于其底层设备的性质以及它必须支持的I / O请求集。驱动程序的ISR需要使用DPCForlsr例程调用IoRequestDPC进行中断驱动的I / O操作。相反,对于重叠操作,使用CustomDPC例程的中断驱动I / O操作,ISR需要调用KeInsertQueueDPC。