免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2235 | 回复: 8
打印 上一主题 下一主题

[中断] 请教一个关于下半部(bottom half)的问题 [复制链接]

论坛徽章:
1
丑牛
日期:2013-10-23 14:49:51
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-10-10 18:01 |只看该作者 |倒序浏览
如果do_softirq是被irq_exit调用执行的话
是否整个linux协议栈的源码都处于硬中断上下文中,因为irq_exit执行完毕之前,硬中断依然没有返回。
而如果被ksoftirqd调用的话,是处于进程上下文中。
irq_exit调用关系如下
1: irq_exit  -> do_softirq ->softirq_action.action(netif_rx_action) -> 驱动的poll函数或者process_backlog()-> netif_receive_skb()进入协议栈

求大虾解答下

论坛徽章:
0
2 [报告]
发表于 2013-10-10 18:48 |只看该作者

我感觉你说的对。但是也不确定。

中断处理太快,所以它可以留一点时间处理soft irq.

soft irq 太多,处理时间太长,就放在ksoftirq中。保证了irq处理时间即充分利用,又不会过长。

论坛徽章:
1
丑牛
日期:2013-10-23 14:49:51
3 [报告]
发表于 2013-10-10 19:04 |只看该作者
回复 2# harmony2013


    >>soft irq 太多,处理时间太长,就放在ksoftirq中。保证了irq处理时间即充分利用,又不会过长

在退出前会调用in_interupt()会检查硬中断,软终端,以及NMI是否有嵌套,如果有嵌套的话,暂时不执行softirq,交给ksoftirqd线程来推迟执行。
关于整个协议栈源码是否全部处于中断上下文中,还是不太敢肯定,求哪位大侠指点下。

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
4 [报告]
发表于 2013-10-11 08:15 |只看该作者
回复 3# Agimsn
关于整个协议栈源码是否全部处于中断上下文中,还是不太敢肯定,求哪位大侠指点下。

我可以给你明确的答案,协议栈可能运行在中断上下文也可能允许在进程上下文。

进程上下文的情况:
1. ksoftirq
2. 用户态通过系统调用进入协议栈(sendto,send,...)
   

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
5 [报告]
发表于 2013-10-11 08:45 |只看该作者
从irq_exit返回进入软中断确是中断上下文,ksoftirq为进程上下文,你的理解是对的。

论坛徽章:
1
丑牛
日期:2013-10-23 14:49:51
6 [报告]
发表于 2013-10-11 10:57 |只看该作者
多谢!回复 4# 瀚海书香


   

论坛徽章:
0
7 [报告]
发表于 2013-10-15 15:24 |只看该作者
个人理解 大部分协议栈的代码应该是运行在2个软中断中: NET_TX_SOFTIRQ, NET_RX_SOFTIRQ,
ksoftirqd内核进程承担全部9个或则说9种软中断的运行,

而且硬中断上下文的本质上, 可以是任意内核线程的上下文,

论坛徽章:
5
处女座
日期:2014-10-15 11:57:302015年亚洲杯之中国
日期:2015-03-04 17:05:552015亚冠之西悉尼流浪者
日期:2015-07-31 12:14:2915-16赛季CBA联赛之同曦
日期:2015-12-10 18:14:0615-16赛季CBA联赛之北京
日期:2016-07-07 17:01:53
8 [报告]
发表于 2013-10-16 18:24 |只看该作者
如果协议栈当前是在软中断上文中,在UP情况下,是否该软中断下文一定必须执行完,(比如故意死循环)否则用户态进程得不到执行?(即便是新来了中断,因为发生了中断嵌套,不会执行软中断)。这样理解是否正确?回复 4# 瀚海书香
   

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
9 [报告]
发表于 2013-10-17 08:24 |只看该作者
回复 8# zhanglin496
如果协议栈当前是在软中断上文中,在UP情况下,是否该软中断下文一定必须执行完,(比如故意死循环)否则用户态进程得不到执行?(即便是新来了中断,因为发生了中断嵌套,不会执行软中断)。这样理解是否正确?

Sorry, I can't understand what are you saying?
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP