阅读:2139回复:11
驱动中开的线程运行在那个中断级上??
在开线程以后,在线程函数中,调用KeSetPriority()来设置线程的优先级,这个优先级是不是就是指它的中断级?
按照DDK,系统线程的优先级应该是LOW_REALTIME_PRIORITY,这个是不是等于让这个线程运行在DISPATCH_LEVEL上呢? 这个线程除非自己将自己挂起(如调用KeWaitForSingleObject()),他将一直得到cpu时间,导致应用得不到cpu时间,是这样子吗?? 能有高手比较一下在驱动中开线程和设置计时器各自的优缺点吗? |
|
沙发#
发布于:2005-01-27 10:00
谢谢各位大虾的讲解,我以前清楚中断级和优先级是两回事,不过看ddk的时候,kesetpriority()中的第二个参数low_real_time我一直以为系统是通过提高线程的中断级来实现高的优先级的。
我现在知道驱动中开的线程是运行在passive_level中断级了。只是拥有较高的优先级。 还有一个问题,就是驱动中计时器的DPC例程是否运行在dispatch_level中断级? 现在我在和下位机交互是这样子的: 我在驱动中开了一个计时器,每隔5ms计时器超时,然后在计时器的DPC例程中向下位机要一次数据,存储在驱动开的缓冲区中。同时当应用和驱动要数据的时候将从设备受到的数据传给它。 现在的问题是驱动和下位机要数据的速度很快,但是应用和驱动要数据的速度慢,我在softice的打印消息中发现基本要驱动向设备要十次数据以后应用才向驱动要一次数据,导致了驱动中开的缓冲区很快满了而不能和设备继续要数据。 是不是因为DPC例程的中断级在dispatch_level上导致了应用得不到cpu? |
|
板凳#
发布于:2005-01-27 16:06
在开线程以后,在线程函数中,调用KeSetPriority()来设置线程的优先级,这个优先级是不是就是指它的中断级? 开线程和设置计时器的方法的优缺点能帮我再解释一下吗?? |
|
地板#
发布于:2005-01-27 18:22
非常感激大家的关注!给分了:)
再稍带着问一下,驱动中开线程和计时器的区别,因为驱动中计时器DPC例程运行在dispatch_level上的,而开的线程运行在passive_level,只是优先级比较高罢了。 这样子的话,应该是开线程占用cpu少一些了,也可以省掉中断切换时间。 |
|