免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3583 | 回复: 11

中断处理和bottom half有的关系吗? [复制链接]

论坛徽章:
0
发表于 2009-03-13 19:40 |显示全部楼层
10可用积分
我是个新手
看了一点内核方面的书
对中断和bottom  half之间的关系比较模糊
请问:
中断处理和bottom half都是用来处理中断的
中断处理是在关中断的时候执行中断处理程序
bottom half是把中断处理程序分成两部分
这两个概念同时存在 让我比较迷惑 倒是系统中的中断是按照那个机制来处理的?
他们之间是什么关系?谁包含谁?谁处理的中断范围大?
或者他们分别处理那些中断呢?
请高手指点以下

最佳答案

查看完整内容

简单地说,中断分为两个部分,上半部和下半部(bottom half),在上半部执行的时候,是关中断的,而在下半部执行的时候,是开中断的,即可以响应其它的中断。在上半部中,处理的是很紧急的事情,而在下半部中则可以执行不那么紧急的。比如对于网卡来说,在中断上半部中,将网卡中的数据拷贝到内存中来,而在下半部中,则将这些数据通过网络协议栈给传到上层去。你也可以看看Linux内核设计与实现。这本书的6,7章讲得很透彻。

论坛徽章:
0
发表于 2009-03-13 19:40 |显示全部楼层
简单地说,中断分为两个部分,上半部和下半部(bottom half),在上半部执行的时候,是关中断的,而在下半部执行的时候,是开中断的,即可以响应其它的中断。
在上半部中,处理的是很紧急的事情,而在下半部中则可以执行不那么紧急的。
比如对于网卡来说,在中断上半部中,将网卡中的数据拷贝到内存中来,而在下半部中,则将这些数据通过网络协议栈给传到上层去。

你也可以看看Linux内核设计与实现。这本书的6,7章讲得很透彻。

论坛徽章:
0
发表于 2009-03-13 20:20 |显示全部楼层
原帖由 scutan 于 2009-3-13 20:12 发表
简单地说,中断分为两个部分,上半部和下半部(bottom half),在上半部执行的时候,是关中断的,而在下半部执行的时候,是开中断的,即可以响应其它的中断。
在上半部中,处理的是很紧急的事情,而在下半部中 ...

这个我在书上看到了
但是书上还说:
内核每当在do_IRQ()中执行完了一个通道中的中断服务程序以后,已经每当从系统调用返回时,都要检查是否有软中断请求在等待执行
这样也就是说do_IRQ()要进程中断处理,而软中断也要进程中断处理
我就是不明白 do_IRQ处理的中断和软中断处理的中断分别是什么中断,怎么都来进行中断处理?
他们之间有什么联系?
是不是os中存在几种不同的中断处理机制?
do_IRQ是处理紧急的不能耽误的中断?而软中断是处理可以延迟一点的中断?

论坛徽章:
0
发表于 2009-03-13 20:27 |显示全部楼层
原帖由 St.小糊涂神 于 2009-3-13 20:20 发表

这个我在书上看到了
但是书上还说:
内核每当在do_IRQ()中执行完了一个通道中的中断服务程序以后,已经每当从系统调用返回时,都要检查是否有软中断请求在等待执行
这样也就是说do_IRQ()要进程中断处理,而 ...


>>他们之间有什么联系?
在中断上半部执行完的时候,会mark一下,设置某些软中断使其稍后执行。然后在退出时或者是在ksoftirqd内核线程叶,就检查软中断是否被mark了,如果有,那么就执行软中断中的内容。

>>do_IRQ是处理紧急的不能耽误的中断?而软中断是处理可以延迟一点的中断?
嗯。是的。

论坛徽章:
0
发表于 2009-03-13 20:32 |显示全部楼层
硬件中断产生后,中断处理程序触发do_IRQ()的调用。其中会处理必需要立即处理的事情,此为上半部。上半部结束前会设置相应的软中断的标志位,以便后续软中断(下半部)继续处理这个中断的后续事情。可见下半部是由上半部触发的。

论坛徽章:
0
发表于 2009-03-13 20:34 |显示全部楼层
原帖由 scutan 于 2009-3-13 20:27 发表


>>他们之间有什么联系?
在中断上半部执行完的时候,会mark一下,设置某些软中断使其稍后执行。然后在退出时或者是在ksoftirqd内核线程叶,就检查软中断是否被mark了,如果有,那么就执行软中断中的内容。 ...

从总体来说 中断机制是不是这样的:
do_IRQ()来处理紧急中断
而可延迟的中断又可以分成软中断、tasklet、bottom half三种机制,这三种机制来合作处理可延迟的中断。根据不同具体的可延迟中断的特性,分别定义成三种机制中的其中一个?
而可延迟中断的处理,就分成两部分了,上部分做些操作之后,然后做个标记,等到合适的时候再来处理下半部分......
版主,我这样说有没有错误呢?

论坛徽章:
0
发表于 2009-03-13 20:37 |显示全部楼层
原帖由 kouu 于 2009-3-13 20:32 发表
硬件中断产生后,中断处理程序触发do_IRQ()的调用。其中会处理必需要立即处理的事情,此为上半部。上半部结束前会设置相应的软中断的标志位,以便后续软中断(下半部)继续处理这个中断的后续事情。可见下半部是 ...

我看了下do_IRQ()的代码,有handle_IRQ_event(irq,&regs,action)这个函数来处理中断服务程序
我想do_IRQ()处理的中断应该没有被中断吧,应该是立即执行的吧。
而可延迟的中断处理是分成上半部分来执行
不知道我这样理解是不是对的?

论坛徽章:
0
发表于 2009-03-13 20:38 |显示全部楼层
原帖由 St.小糊涂神 于 2009-3-13 20:34 发表

从总体来说 中断机制是不是这样的:
do_IRQ()来处理紧急中断
而可延迟的中断又可以分成软中断、tasklet、bottom half三种机制,这三种机制来合作处理可延迟的中断。根据不同具体的可延迟中断的特性,分别定 ...


嗯。是这样的。

>>等到合适的时候再来处理下半部分
一般在中断上半部完的时候就会判断是不是有需要处理的下半部,如果有,就去执行下半部。

论坛徽章:
0
发表于 2009-03-13 20:40 |显示全部楼层
或者这样说
所有的中断都在do_IRQ来运行
如果是不可中断的话,就由do_IRQ()一次性处理完,而可延迟的话,就由软中断、tasklet、bottom bh这些机制来"慢慢"处理?
搞晕了

论坛徽章:
0
发表于 2009-03-13 20:41 |显示全部楼层
改一下 上面说错了两个字
或者这样说
所有的中断都在do_IRQ来运行
如果是不可延迟的话,就由do_IRQ()一次性处理完,而可延迟的话,就由软中断、tasklet、bottom bh这些机制来"慢慢"处理?
搞晕了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

PostgreSQL中国大会,早鸟票抢购!

PostgreSQL中国大会,早鸟票抢购!
2019年11月29~11月30日,由 PostgreSQL中文社区与ITPUB联合主办的第九届《PostgreSQL 中国技术大会》将在北京隆重召开。PostgreSQL 作为功能最强的的开源关系型数据库之一,得到了越来越多企业的推广和运用,也越来越受到广大技术爱好者的欢迎和重视。这将是 PostgreSQL 的又一次交流盛会。




----------------------------------------

点击报名>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP