LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2288|回复: 7

中断的时候会被抢占吗?

[复制链接]
发表于 2006-1-1 22:39:10 | 显示全部楼层 |阅读模式
如果一个进程在中断处理函数中。这个时候会不会别其他高优先级的进程抢占CPU?
发表于 2006-1-2 12:02:52 | 显示全部楼层
不会,在中断中只能被中断抢占
回复 支持 反对

使用道具 举报

发表于 2006-1-3 10:48:50 | 显示全部楼层
据说2.6以上内核可以
回复 支持 反对

使用道具 举报

发表于 2006-1-21 21:25:12 | 显示全部楼层
2.4是非抢占式的
但是2.6就支持抢占式了,编译内核时候可以配置的
回复 支持 反对

使用道具 举报

发表于 2006-1-22 01:54:57 | 显示全部楼层
建议上面二位去看一看LKD第4章讲Preemption and Context Switching的那一部分
如果想真正搞清楚这个问题

说一个内核是可抢占内核
指的主要是内核在以某进程身份执行的时候(这种情况对应于某进程执行系统调用时),可以被另一个有更高优先级的进程所抢占
是否应该发生抢占是靠内核自己去检查的,检查current_thread_info的flags里的need_resched位
不像中断的机制,主要是依靠硬件来实现的,只要一个中断没有被屏蔽,在中断发生时就会自动执行某个事先设定好的函数

在Linux里,在中断处理函数中
内核不会去检查need_resched位
所以进程无论如何不可能抢占中断处理函数
回复 支持 反对

使用道具 举报

发表于 2006-2-11 00:11:47 | 显示全部楼层
中断处理函数不能够被进程强占,但可能被其它中断打断
回复 支持 反对

使用道具 举报

发表于 2006-3-4 09:17:04 | 显示全部楼层
可以非常肯定的说,无论在那个操作系统(pSos、vxworks或者Linux)中都不允许在中断处理程序中发生调度和抢占。在pSos中,进入中断处理之前必须调用ienter,退出中断处理之后必须调用iexit,其功能就是suspend schedule和resume scheduler。同样,在Linux-2.6.12内核中,抢占仅仅发生在中断出口(即中断(设备中断、系统调用等等)出口)。在中断出口处,系统会有一个被称为resume kernel的阶段,它检查是否需要抢占,如果需要就发生任务切换。但是,无论如何不能理解为调度发生在中断处理过程中。先好好学习操作系统理论,在看代码吧!
回复 支持 反对

使用道具 举报

发表于 2006-3-7 11:51:10 | 显示全部楼层
Post by chairman
如果一个进程在中断处理函数中。这个时候会不会别其他高优先级的进程抢占CPU?

不会的。即使在2。6内核中也不行。
进入interrupt之后,preempt-counter会变成〉0的,所以无法抢占。
如果不是fast-interrupt的话,interrupt可以被其他中断抢占。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表