免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: mordorw

[进程管理] 如果在软中断中有sleep或者切换,会有什么后果? [复制链接]

论坛徽章:
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
发表于 2012-12-12 11:07 |显示全部楼层
回复 8# mordorw
保存在内核堆栈里,可能是独立的中断栈,也可能就是进程的内核栈

不知道你从哪里看的代码?

首先需要明白一点,软中断睡眠是完全可以实现的,但是linux没有实现。
   

论坛徽章:
0
发表于 2012-12-12 12:40 |显示全部楼层
本帖最后由 mordorw 于 2012-12-12 12:44 编辑
瀚海书香 发表于 2012-12-12 11:07
回复 8# mordorw

不知道你从哪里看的代码?


如果软中断在softirq线程里执行,可以schedule。
否则,首先保证了硬中断不可切换
时刻1  在进程A发生硬中断和软中断,软中断schedule, 进程A挂住,进程A和软中断的局部变量,寄存器,返回地址等都保存在A的内核栈中,数据保存在软中断队列中,其它全局变量也都保存在内存中
时刻2  进程B中发生硬中断时,硬中断把任务挂在软中断队列上,触发软中断后返回,但是没有返回到软中断
时刻3  进程A被调度恢复执行时, 不就可以恢复执行被挂住的软中断了

论坛徽章:
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
发表于 2012-12-12 13:00 |显示全部楼层
回复 12# mordorw
如果软中断在softirq线程里执行,可以schedule。
否则,首先保证了硬中断不可切换,
时刻1  在进程A发生硬中断和软中断,软中断schedule, 进程A挂住,进程A和软中断的局部变量,寄存器,返回地址等都保存在A的内核栈中,数据保存在软中断队列中,其它全局变量也都保存在内存中
时刻2  进程B中发生硬中断时,硬中断把任务挂在软中断队列上,触发软中断后返回,但是没有返回到软中断。
时刻3  进程A被调度恢复执行时, 不就可以恢复执行被挂住的软中断了


先搞清楚含义:
所谓软中断中不能睡眠,是指不能再软中断上下文中睡眠。

如果软中断在softirq线程中睡眠,这还是软中断中睡眠吗??
这个时候运行在进程上下文,是进程中睡眠,不是软中断中睡眠。



   

论坛徽章:
0
发表于 2012-12-12 13:01 |显示全部楼层
瀚海书香 发表于 2012-12-12 13:00
回复 12# mordorw


请看清楚啊,我说的就是进程上下文中的软中断睡眠

论坛徽章:
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
发表于 2012-12-12 13:05 |显示全部楼层
回复 14# mordorw
请看清楚啊,我说的就是进程上下文中的软中断睡眠


你怎么保证你的软中断处理都在softirq中处理?中断返回后,如果对应的软中断没有在当前CPU上执行,就会执行相应的软中断操作,这个时候是在中断上下文的。
多看看代码吧。。。
   

论坛徽章:
0
发表于 2012-12-12 13:12 |显示全部楼层
瀚海书香 发表于 2012-12-12 13:05
回复 14# mordorw


每个CPU不是有软中断计数么

论坛徽章:
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
发表于 2012-12-12 13:26 |显示全部楼层
回复 16# mordorw
每个CPU不是有软中断计数么

软中断计数器的含义是表示是否禁止软中断。
建议你看一下do_IRQ函数最后退出,调用do_softirq()的代码。

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP