Chinaunix

标题: 软中断一定工作在 中断 上下文 吗? [打印本页]

作者: Alan0521    时间: 2011-03-30 10:35
标题: 软中断一定工作在 中断 上下文 吗?
我在看《linux内核设计与实现》第二版中断那一章的下半部时,P84页提到的ksoftirqd进程。
原文是这么说的:

”而作为改进,当大量软中断出现的时候,内核会唤醒一组内核线程来处理这些负载。这些线程在最低的优先级上运行(nice值是19),这能避免它们跟其他重要的任务抢夺资源。但它们最终肯定会被执行,所以这个折中方案能够保证在软中断负担很中的时候用户程序不会因为得不到处理时间处于饥饿状态。相应的,也能保证”过量“的软中断终究会得到处理。


我的疑问是,这是不是说明 软中断 也工作在进程上下文中啊?如果说工作在 进程上下文 中,那是什么保证他不被 抢占呢?

刚看内核不久,希望大家帮我解决疑问,谢谢!
作者: Hllzz    时间: 2011-03-30 10:47
软中断也是作为进程的一部分在运行,只不过它的优先级没有硬中断优先级高罢了。软中断是在开中断的情况下执行的,所以,它可以被硬中断所中断,却不会被用户的代码所中断。
以上是鄙人的一定浅见,希望对你有所帮助。
作者: 瀚海书香    时间: 2011-03-30 11:21
回复 1# Alan0521
网络软中断可能运行在进程上下文,所以说软中断的代码需要自己通过锁机制来实现临界区的保护。
作者: marsbible    时间: 2011-03-30 13:30
处理不过来的中断才会分发到ksoftirqd,这是内核线程,在进程上下文处理。
而一般的softirq是在中断上下文处理的。
作者: amarant    时间: 2011-03-30 13:35
回复 4# marsbible


    中断上下文和进程上下文的根本区别在哪呢?这个问题好久都没搞清楚..请教一下
作者: ccl0326    时间: 2011-03-31 11:41
我觉得进程上下文就是current的资源你可以拿来用,而中断上下文的情况下你就不敢随便用了= =
作者: amarant    时间: 2011-03-31 13:58
我的理解就是进程上下文就是进程的栈(通过这个可以获取进程所有信息,包括所有寄存器的值),中断上下文其用的也是被中断进程的栈,但是由于其特殊的地位不可以访问进程地址空间里的东西,换一个名字叫中断上下文。
不知道对不对
作者: EZWORD    时间: 2011-04-01 09:08
处理不过来的中断才会分发到ksoftirqd,这是内核线程,在进程上下文处理。
而一般的softirq是在中断上下文 ...
marsbible 发表于 2011-03-30 13:30



    应该是这样的
作者: imlvye    时间: 2011-04-01 09:30
我的理解就是进程上下文就是进程的栈(通过这个可以获取进程所有信息,包括所有寄存器的值),中断上下文其 ...
amarant 发表于 2011-03-31 13:58

所以中断上下文与进程上下文的本质区别是,中断上下文不能阻塞,而进程上下文就是可以的,如果中断上下文发生阻塞,将会引起进程的调度,改变中断发生时的内核栈
作者: tempname3    时间: 2011-04-06 14:03
网络软中断可以运行于进程上下文?

LZ说的在内核线程里,只是在执行软中断与软中断的间隙间是才属于进程上下文吧。软中断执行过程之中应该是中断上下文。

进程上下文和中断的上下文,我的理解的是,中断上下文就是说CPU在执行带有“速入速出”特征的代码,这个时候CPU只能被同样带有“速入速出”特征的代码打断。正常的时候CPU一个进程一个进程的调度来执行代码,中断上下文临时脱离了这个框架,临时脱离了进程体系,执行一段特殊的代码。所以在中断上下文中,进程没有意义。
作者: shaohui973    时间: 2011-04-06 22:42
回复 1# Alan0521


    软中断处在用户进程上下文中,但是计算机执行这段代码和执行用户代码时的CPU模式不一样,软中断是在“特权模式”,软中断在用户程序里可以看到时通过中断指令(软中断指令,如,系统调用)来实现的,也就是处在了用户进程的上下文。但是,硬件中断则不一样。你在你的程序代码里,看不到中断指令。

中断有各自的优先级,以响应不同的处理请求。软中断的优先级相对来说处于低位,可被硬件中断中断。中断又分为两部分:顶半部和底半部。顶半部不可被中断,它只是响应中断事件,并没有进行处理。中断的处理则是放在底半部,底半部可以被高优先级的中断处理例程中断。中断使用自己的堆栈。中断处理完成时会触发调度器的调度。所以又可能会发生进程切换。
(学习心得及自己的“认识”,供你参考哈)




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2