免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 2722 | 回复: 2

[系统管理] 中断处理程序不能被阻塞 [复制链接]

论坛徽章:
0
发表于 2018-02-09 15:14 |显示全部楼层
最近在项目中看到新人写的代码,在中断处理程序中加入了printf。 我告诉他中断处理程序中不能有这种可能导致阻塞性的动作,但当他问我问什么的时候的,我竟答不上来。

不知道是不是很多朋友也像我一样,写代码久了都忘记了一些本质。

针对这个问题,我在网上搜了很多朋友的回答,但是感觉都没有解释到问题的根本。

翻阅内核详解一本书中说到,允许内核控制路径嵌套执行必须付出代价,那就是中断处理程序必须永不阻塞。 也就是说中断程序是因为支持嵌套才不能阻塞的。

仔细一想,我的解释是这样的:

中断发生时不能确定当前运行的是哪一个进程,但是它寄生在当前进程的堆栈中执行。

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

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


这样的解释结合调度代码也就能说的通了,不知有幸路过的朋友是什么意见?

论坛徽章:
0
发表于 2018-05-29 22:19 |显示全部楼层
我认为内核至少大多数情况下会借用内核的内核栈。阻塞引起进程调度就找不到原来的内核栈了。

论坛徽章:
0
发表于 2018-05-29 22:19 |显示全部楼层
我认为内核至少大多数情况下会借用内核的内核栈。阻塞引起进程调度就找不到原来的内核栈了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

【CUer福利】柯尼卡美能达2018数字化整合解决方案巡展
智领共创链动价值-2018数字化整合解决方案巡展

2018年11月,柯尼卡美能达携手主流IT网络媒体IT168及旗下ITPUB、ChinaUnix等论坛,特此邀请企业IT管理、运维人员/办公设备采购负责人员共同参与,分享柯尼卡美能达“智领共创链动价值”-2018数字化整合解决方案巡展!现场体验MOBOTIX智能视频监控解决方案!

活动入口>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP