xiaorain
驱动牛犊
驱动牛犊
  • 注册日期2003-04-21
  • 最后登录2005-11-05
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1993回复:13

是否所有的dpc例程都运行在dispatch_level上呢??给分

楼主#
更多 发布于:2005-01-21 14:27
看了art baker的2000设备驱动程序设置指南,说中断服务历程的DPC运行在dispatch_level。

DPC历程好像有很多,像计时器也有DPC历程(通过KeSettimer即可设置),这个dpc历程是不是也运行在dispatch_level上呢??只有这样才能抢夺运行在passive_level上历程的cpu以得到执行?



xiaorain
驱动牛犊
驱动牛犊
  • 注册日期2003-04-21
  • 最后登录2005-11-05
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-01-21 16:42
在dispatch_level上运行的代码肯定比passive_level上的要紧急了,dispatch例程都在passive_level上进行,所以DPC例程比dispatch例程的中断级高。
由于线程调度器在dispatch_level运行,所以便于调度?即使DPC例程运行在passive_level上也同样的调度啊。
xiaorain
驱动牛犊
驱动牛犊
  • 注册日期2003-04-21
  • 最后登录2005-11-05
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-01-24 16:02
我现在设置了一个带DPC例程的计时器,在计时器超时的时候,DPC例程得到执行。
请问这个DPC例程运行在Dispatch_level上吗?
如果是的话,它就会比分发例程有更高得中断级。

现在分发例程要read一块非分页内存,此时计时器超时,那正在执行得分发例程被中断。OS保存上下文(此上下文包含这块内存吗),并调用DPC例程,DPC例程中要修改这一块非分页内存。这样子的话,会否导致分发例程重新得到CPU得时候出问题?因为非分页内存已经被改变了,从而导致了上下文得改变。
xiaorain
驱动牛犊
驱动牛犊
  • 注册日期2003-04-21
  • 最后登录2005-11-05
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-01-25 17:37
谢谢阿。
我关注的不是分业与否,确切地说,我知道非分业内存不会被交换到磁盘上,也不能再dispatch_level及其以上访问分业内存。
我想了解的是:
您所说的内核中不切换上下文是指中断到来的时候,os不保存当前的执行的环境??
还有ddk中常说的arbitary context和nonarbitary context是指的什么东东呢??

“所有的用户进程对应的核心是相同的,核心不切换。“这句话意思是说用户进程对应了同一个驱动,驱动不切换?能否解释一下?
xiaorain
驱动牛犊
驱动牛犊
  • 注册日期2003-04-21
  • 最后登录2005-11-05
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-01-26 18:20
谢谢您热心的回答!!给分:)))
上下文可以理解成一个进程吗?或者是一个线程?


游客

返回顶部