首页
社区
课程
招聘
[讨论]关于KeSetEvent启动等待线程
发表于: 2014-7-14 21:14 4192

[讨论]关于KeSetEvent启动等待线程

2014-7-14 21:14
4192
驱动中间,创建了另一个线程Thread1,等待一个Event,KeWaitForSingleObject(&Event,....);
驱动接受 Irp,就设置 Event,然后Thread1就应该启动了吧。运行完毕,继续等待。。。
按照道理应该是这样的流程:

CPU0:
---接受Irp并KeSetEvent-时间点0,等待CPU1执行,----时间点2,CPU1执行完毕,CPU0继续发送下一个Irp--重复前面的步骤
CPU1:
---WaitFor....-------------时间点1,执行--------------完毕时间点3,-----继续WaitFor....

按照道理 ,时间点0和时间点1应该是重合的,时间点2和时间点3也应该是重合的。
但是我查看cpu的占用比率,发现并没有占用达到 25%,4核cpu,也就是说4核中的一个核都没有完全占满,也就是说,时间点0以后,设置了信号KeSetEvent,而cpu1等待 Event并没有在同时执行,
而是在时间点0过去很多时间以后,比如过了10ms再执行,造成了时间点0---时间点 1这10毫秒的时间,系统无事可做,处于IDLE状态。为什么会这样,我希望时间点0KeSetEvent以后,马上唤醒CPU1的 等待事件并马上执行,为什么不是马上唤醒,而是等待10ms以后再唤醒再执行呢?这样造成了10毫秒的浪费,而这10毫秒中系统处于无事可做的状态,可是明明有一个线程可以被调度啊,已经KeSetEvent了,为什么不调度这个线程执行呢?我想要不浪费这10毫秒,马上执行,有什么办法?

不知道我说清楚没有,反正这个问题很难解释清楚。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
CPU0里面等待CPU1执行是怎么等待的,KeSetEvent有一个Wait参数,系统可能会根据这个参数决定是否立刻进行线程切换
2014-7-14 21:26
0
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
windows 操作系统不是实时操作系统。
2014-7-14 23:15
0
游客
登录 | 注册 方可回帖
返回
//