首页
社区
课程
招聘
[求助]中断优先级多处理器问题?!
发表于: 2014-1-5 16:54 5876

[求助]中断优先级多处理器问题?!

2014-1-5 16:54
5876
在多CPU环境中,当一个CPU中断级别到了DISPATH_LEVEL时,但其他CPU还是在PASSIVE时,其他CPU会继续在PASSIVE下执行吗?

我知道线程优先级和中断优先级的区别,但在多CPU环境下,好像当一个CPU中断优先级高,并不影响其他CPU啊?看爱民的《windows内核原理与实现》有这疑问,望大牛指点

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 160
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
每个CPU之间的特权级互不影响,各自独立的中断级。
2014-1-5 20:53
0
雪    币: 281
活跃值: (177)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
哦,原来如此,那当多线程,多CPU运行时,CPU1中断级到DISPATH级,正在执行的线程在操作一个全局数据,但CPU2中断级为PASSIVE级,也同时操作这全局数据,那爱民老师说的把CPU提到DISPATH级能线程同步的方法,只能用于单CPU系统吗?
书上还说把CPU提到IPI-2级别(即27),能屏闭其他CPU,面对上面这种情况提升到IPI-2级别行吗?
2014-1-6 09:49
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
每个CPU有自己的中断表。
就像做SwapContext,需要对不同的CPU修改IDT表指针。
2014-1-6 10:35
0
雪    币: 281
活跃值: (177)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这个我知道,我也没有问IDT的问题啊,我现在感到疑问的是
那当多线程,多CPU运行时,CPU1中断级到DISPATH级,正在执行的线程在操作一个全局数据,但CPU2中断级为PASSIVE级,也同时操作这全局数据
就是提升到到DISPATH级也不能实现线程同步啊
2014-1-6 10:45
0
雪    币: 160
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
保护临界资源有多种方式,信号,互斥,自旋锁,信标等等。
提升IRQL仅仅是保护当前线程的调度不被打断而已。
2014-1-6 16:52
0
雪    币: 281
活跃值: (177)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我明白了!参考这大神的贴子:
http://bbs.pediy.com/showthread.php?t=78099
2014-1-6 18:01
0
雪    币: 130
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
自旋锁是保护自旋函数中间的代码拥有单独运行权限。实际自旋锁还不如RING3下的临界区保护。 线程提升等级也没用 你只是禁止线程调度 禁止其他线程抢占高等级轮换运行 防止多核cpu流水线抢占你的线程 否则可能出现写保护异常?分页池之类的 完全是系统缺陷。  除非是自己模块的数据保护 用个简单的原子锁加switchThread函数加ThreadID识别完全胜过内核下的数据保护。 HOOK写代码使用跳转锁住 然后switch thread 给下面可能的线程运行 然后写 最后恢复跳转锁。
2014-1-7 19:47
0
游客
登录 | 注册 方可回帖
返回
//