延迟过程调用,即 DPC。
这是一种机制,当上层请求下来,由于过多的操作步骤,为了使系统性能更好,使用一个完成调用例程,告诉上层“我完成了”,这样就可以处理下面的请求了,而系统会把剩下得处理过程加入到一个叫做DPC的队列中,等系统有空时,再来调用。这就是--延迟过程调用。
说白了,就是一种缓冲机制。
这是系统控制的。几乎每种现代操作系统都有这样的类似机制。
延时过程调用的应用延时调用可用在Windows驱动程序的中断处理中。由于中断处理的中断级别较高--在DIRQL级别,所以应该使其执行时间尽可能短。于是一般的情况是在中断处理程序里判断中断发生,然后调用延时过程调用例程实现中断程序的功能。说明如下:? 当硬件设备产生中断请求时,驱动程序则需要注册一个处理程序,在中断到达时进行正确的处理。在DriverWorks中通过 KInterrupt类实现硬件中断处理,该类封装了IoConnectInterrupt函数来初始化中断及将一个中断服务例程连接到一个中断上。中断 服务例程是运行在DIRQL级别上,因此处理时间应该尽可能的短,并且在该级别上还有很多内核函数不能调用。所以一般在中断服务例程中只判断该中断是否由 自己的设备产生,若是则调用一个在DISPATCH_LEVEL级别上运行的延迟过程调用。在延迟过程调用例程中可完成大部分的中断处理工作。
例如,在中断服务程序中通过判断是不是该设备产生的中断,以响应中断(以下程序都只给出关键代码):
?status?=?m_IoPortRange0.ind(INTCSR);?//获取设备的中断状态
?if?((status?&?0x800000)?!=?0x800000) {?return?FALSE;?}
?//判断是不是由该设备产生的中断,如果不是则返回
?m_IoPortRange0.outd(INTCSR,?status?&?0xff02ffff); //屏蔽中断
?if?(!m_DpcFor_Irq.Request(NULL,?NULL))?; //调用延时过程调用例程,处理中断事件?
android 协程延迟循环执行 延迟过程调用
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Android面试题之Kotlin协程一文搞定
一文搞定协程
Android kotlin 协程 并发 面试 -
zabbix监控显示不可用状态未知
背景介绍由于EasyNVR的受众越来越多,时常会遇到很多类似的问题咨询,之前虽然有写过很多的博文进行技术的或者使用问题的解答,随着客户询问的增多,我发现,要想让客户了解问题和解决问题,往往引导和给一个思路比直接给与支持和回答更有效果。因此在后续的博文中我将不间断的更新Easy系列相关问题的自我排查和解决思路和方法。帮助大家解决问题的同时更加了解软件。问题反馈:EasyNVR显示设备不在线怎么办?问
zabbix监控显示不可用状态未知 EasyNVR设备不在线 设备端排查 网络端排查 H5、谷歌chrome直播