忘记密码   免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT 徽章 文库 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
123
最近访问板块 发新帖
楼主: cskyrain

中断处理程序为什么不能阻塞休眠???以前真没认真思考过! [复制链接]

论坛徽章:
0
发表于 2014-07-29 21:44 |显示全部楼层
本帖最后由 xupt_liangning 于 2014-07-29 21:45 编辑

我个人的理解,中断使用的是进程的中断栈,而异常和进程的内核态都使用的是进程的异常栈。。而进程切换的标志就是切换到了进程的异常栈,所以说,进程的在内核态或者异常处理程序中可以睡眠(可以切换到别的进程),因为它可以恢复。。而进程如果处在中断处理程序中,如果发生了进程切换,那么等下一次切换回来的时候,就只能回到异常栈,回不到中断栈了,所以上次的中断(包括所有嵌套的中断)就丢了。。。     我的qq:119353825  可以联系我讨论哦

论坛徽章:
9
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:12
发表于 2016-03-23 19:03 |显示全部楼层
赞成“中断函数不可重入”:
linux将嵌套转换为循环,就是为了减轻写中断程序时还要考虑可重入的负担,如果允许在中断程序里面调度别的进程,就相当于从这个循环里跳出来了,从页造成“重入”这个函数,就破坏了初衷。

不赞成“回不了家”:
中断函数本身和其它普通的内核函数没区别,其它内核函数中进行调度时可以保存的“上下文”,它也可以,如果说是“回不了家了”这个原因,那所有内核函数里都不能调用shedule()才对,内核里面不能调用shedule(),难道要在用户态调度吗。

论坛徽章:
0
发表于 2018-02-09 13:57 |显示全部楼层
请问各路大神,有什么资料或者code 证明异步中断执行时用的是独立的栈?

论坛徽章:
0
发表于 2018-02-09 14:47 |显示全部楼层
谈谈我的理解,中断发生时不能确定当前运行的是哪一个进程,但是它寄生在当前进程的堆栈中执行。

如果不支持中断嵌套,抛开效率、硬件特性等因素,软件的角度上它是可以被切换的,因为当前内核控制路径只有唯一的进程堆栈。

但是支持中断嵌套的话,当前内核控制路径就可能存在多个进程的堆栈,切换回来后,如果嵌套最底层的堆栈和顶层的堆栈不是同一个进程的话,就会引起进程调度的紊乱。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP