免费注册 查看新帖 |

Chinaunix

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

[内核入门] 中断 异常 陷阱 <睡眠> [复制链接]

论坛徽章:
13
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:1215-16赛季CBA联赛之广东
日期:2018-07-05 22:34:3615-16赛季CBA联赛之江苏
日期:2018-09-03 12:10:2115-16赛季CBA联赛之上海
日期:2018-09-25 03:49:2215-16赛季CBA联赛之广东
日期:2018-09-25 04:09:12
发表于 2016-07-05 17:06 |显示全部楼层
本帖最后由 _nosay 于 2016-07-05 17:51 编辑

概念:
中断:由外部设备触发,前“半”部分在关中断时处理,后“半”部分开中断时处理;
异常:由软件“意外”触发(较“隐蔽”,比如除0错误,缺页异常),处理过程中断都开着;
陷阱:由软件主动触发(较“明显”,比如直接使用int指令),处理过程中断都开着。

疑问:
中断处理程序不可以睡眠(即使bh函数),异常/陷阱处理程序却可以,为萨?

个人总结:
“中断”与“异常/陷阱”的区别主要有两点:1.处理过程是否关中断;2.由谁触发。

从而也应该从这2点去考虑这个问题:
1. 中断处理过程,前“半”部分是在关中断的情况下处理的,显然不能睡眠
理由A:否则经调度返回用户态,不管通过中断/异常/陷阱,都进不了内核态了,因为中断已经关了,而用户态又没办法将中断打开。
理由B:等刚才从中断中睡眠的进程“”了,被调度继续执行时,不就可以打开中断了吗?首先,用户态没办法叫醒它,中断/异常/陷阱又都“失效”了,根本没机会进内核叫醒它;另外,即使它“诈尸”,回到running状态的链表里,那也没机会进内核态do_schdule()呀。。

2. 剩下的差异只剩“由谁触发”了,同时问题也缩小了:bh函数不可以睡眠,异常/陷阱处理程序却可以,为萨?
① 异常/陷阱,意味着当前这个进程(内核/用户)的指令中,发生了些什么,也就是说当前进程上下文对于异常/陷阱处理程序是有意义的,比如用户进程除0,内核就可以毫无顾虑的将当前进程kill掉,更别说睡一下而已了;
② 中断,比如从键盘按ctrl+c想杀掉控制台上的程序时,CPU正在执行这个程序的可能性是很小的,因为系统中非常多的进程在轮流执行,而这种情形,中断处理程序如果将当前进程kill掉,那不是很无辜吗?kill如此,sleep也如此,因为生命是资源,生命中的时间也是资源呀,不可以伤及无辜。。
总之,异常/陷阱处理程序执行时,当前进程上下文对于处理过程有意义,而中断没有(看一位好几年没上线的人说的)。

其它说法,个人觉得说服力不够强大,也许是我还没理解清楚(因为我确实还是新手),比如说简化内核设计。
确实,可以睡眠的话,至少必须考虑中断处理函数的可重入性,那么异常/陷阱处理函数为什么可以睡眠呢?要简化为什么只考虑简化中断处理函数的实现,而不考虑异常/陷阱处理函数?
另外!先还是引用刚才那个人的话:进入中断时,不是没有进程上下文,只是进程上下文不确定。(从这开始是我自己说的)另外!如果这时强行将当前进程上下文与这次中断关联起来,除了可能对它“误伤”了一下,能有啥其它问题吗?毕竟,从bh函数开始执行,与异常处理函数开始执行,之后已经没有区别了,那么,异常处理程序可以睡眠,我们为什么还要为bh函数不可以睡眠考虑更多的理由?

论坛徽章:
9
程序设计版块每日发帖之星
日期:2016-02-13 06:20:00数据库技术版块每日发帖之星
日期:2016-06-15 06:20:00数据库技术版块每日发帖之星
日期:2016-06-16 06:20:00数据库技术版块每日发帖之星
日期:2016-06-18 06:20:00程序设计版块每日发帖之星
日期:2016-06-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-09 06:20:00IT运维版块每日发帖之星
日期:2016-07-15 06:20:00IT运维版块每日发帖之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-08-18 06:20:00
发表于 2016-07-06 09:23 |显示全部楼层
中断里不切换或者休眠,CU讨论过好多次
个人觉得原因之一是系统性能,例如系统吞吐量

论坛徽章:
13
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:1215-16赛季CBA联赛之广东
日期:2018-07-05 22:34:3615-16赛季CBA联赛之江苏
日期:2018-09-03 12:10:2115-16赛季CBA联赛之上海
日期:2018-09-25 03:49:2215-16赛季CBA联赛之广东
日期:2018-09-25 04:09:12
发表于 2016-07-06 10:07 |显示全部楼层
回复 2# mordorwww

嗯,我也看了很多他们的讨论。
“实时性”是客观存在的,一件事能否“实时”完成,要看它是否需要经历很多阻碍,不是人为可以左右的。某件事阻碍重重,人只能随它“不实时”,但可以控制的是别让它影响本来可以“实时”完成的事情,即保证“确定性”,而中断时进程上下文不确定,正是源头,也是客观存在无法避免的,所以就退一步对中断服务程序提出限制,“抵消”这种不确定性。
所以我自己的理解,最根本的是为了避免“不确定性”,对“实时性”的影响是现象,不是根本。

论坛徽章:
9
程序设计版块每日发帖之星
日期:2016-02-13 06:20:00数据库技术版块每日发帖之星
日期:2016-06-15 06:20:00数据库技术版块每日发帖之星
日期:2016-06-16 06:20:00数据库技术版块每日发帖之星
日期:2016-06-18 06:20:00程序设计版块每日发帖之星
日期:2016-06-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-09 06:20:00IT运维版块每日发帖之星
日期:2016-07-15 06:20:00IT运维版块每日发帖之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-08-18 06:20:00
发表于 2016-07-06 10:23 |显示全部楼层
_nosay 发表于 2016-07-06 10:07
回复 2# mordorwww

嗯,我也看了很多他们的讨论。

中断不可抢占不是为了实时性,而是为了吞吐量

论坛徽章:
9
程序设计版块每日发帖之星
日期:2016-02-13 06:20:00数据库技术版块每日发帖之星
日期:2016-06-15 06:20:00数据库技术版块每日发帖之星
日期:2016-06-16 06:20:00数据库技术版块每日发帖之星
日期:2016-06-18 06:20:00程序设计版块每日发帖之星
日期:2016-06-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-09 06:20:00IT运维版块每日发帖之星
日期:2016-07-15 06:20:00IT运维版块每日发帖之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-08-18 06:20:00
发表于 2016-07-06 10:24 |显示全部楼层
mordorwww 发表于 2016-07-06 10:23
中断不可抢占不是为了实时性,而是为了吞吐量

当然简单确定也是目地

论坛徽章:
13
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:1215-16赛季CBA联赛之广东
日期:2018-07-05 22:34:3615-16赛季CBA联赛之江苏
日期:2018-09-03 12:10:2115-16赛季CBA联赛之上海
日期:2018-09-25 03:49:2215-16赛季CBA联赛之广东
日期:2018-09-25 04:09:12
发表于 2016-07-06 10:48 |显示全部楼层
回复 4# mordorwww

,如果在中断里睡眠了,是怎么影响到吞吐量的?

论坛徽章:
9
程序设计版块每日发帖之星
日期:2016-02-13 06:20:00数据库技术版块每日发帖之星
日期:2016-06-15 06:20:00数据库技术版块每日发帖之星
日期:2016-06-16 06:20:00数据库技术版块每日发帖之星
日期:2016-06-18 06:20:00程序设计版块每日发帖之星
日期:2016-06-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-09 06:20:00IT运维版块每日发帖之星
日期:2016-07-15 06:20:00IT运维版块每日发帖之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-08-18 06:20:00
发表于 2016-07-06 10:50 |显示全部楼层
_nosay 发表于 2016-07-06 10:48
回复 4# mordorwww

哦 ,如果在中断里睡眠了,是怎么影响到吞吐量的?


cache污染, 切换开销
以前效力的一家大公司别说内核态抢占了,用户态抢占都是关闭的

论坛徽章:
13
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:1215-16赛季CBA联赛之广东
日期:2018-07-05 22:34:3615-16赛季CBA联赛之江苏
日期:2018-09-03 12:10:2115-16赛季CBA联赛之上海
日期:2018-09-25 03:49:2215-16赛季CBA联赛之广东
日期:2018-09-25 04:09:12
发表于 2016-07-06 11:04 |显示全部楼层
回复 7# mordorwww

那异常处理程序里面睡眠,也会有这些影响吧?

论坛徽章:
9
程序设计版块每日发帖之星
日期:2016-02-13 06:20:00数据库技术版块每日发帖之星
日期:2016-06-15 06:20:00数据库技术版块每日发帖之星
日期:2016-06-16 06:20:00数据库技术版块每日发帖之星
日期:2016-06-18 06:20:00程序设计版块每日发帖之星
日期:2016-06-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-09 06:20:00IT运维版块每日发帖之星
日期:2016-07-15 06:20:00IT运维版块每日发帖之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-08-18 06:20:00
发表于 2016-07-06 11:06 |显示全部楼层
本帖最后由 mordorwww 于 2016-07-06 11:09 编辑
_nosay 发表于 2016-07-06 11:04
回复 7# mordorwww

那异常处理程序里面睡眠,也会有这些影响吧?


异常哪有中断频繁

论坛徽章:
9
程序设计版块每日发帖之星
日期:2016-02-13 06:20:00数据库技术版块每日发帖之星
日期:2016-06-15 06:20:00数据库技术版块每日发帖之星
日期:2016-06-16 06:20:00数据库技术版块每日发帖之星
日期:2016-06-18 06:20:00程序设计版块每日发帖之星
日期:2016-06-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-09 06:20:00IT运维版块每日发帖之星
日期:2016-07-15 06:20:00IT运维版块每日发帖之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-08-18 06:20:00
发表于 2016-07-06 11:12 |显示全部楼层
本帖最后由 mordorwww 于 2016-07-06 11:13 编辑
mordorwww 发表于 2016-07-06 11:06
异常哪有中断频繁

万兆网卡一秒钟一百万个包不算最多
你如果每个包做一次切换,一秒钟做一百万次schedule和switch_to, 一微妙做一次schedule和switch_to, 你看开销大不大
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP