免费注册 查看新帖 |

Chinaunix

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

[函数] 中断上下文中不能睡眠,那系统调用代表当前进程为什么能睡眠而发生进程切换? [复制链接]

论坛徽章:
0
1 [报告]
发表于 2013-05-10 12:20 |显示全部楼层
这个说起来有点多,一一来看:
1,中断要根据前后文来说,一般说中断上下文中不能睡眠,这个中断是指硬件事件发生,触发CPU停止当前活动转而去处理硬件请求.
2,根据硬件请求响应处理逻辑的实时紧要与否,将整个中断处理过程分为上半部和下半部.
3,上半部也就是所谓的硬中断处理逻辑,其要求cpu在收到硬件请求后必须马上处理的事情,比如网卡收到数据包了,把数据包从网卡缓存拷贝到主存(可以由DMA完成,但寄存器的修改以及资源设定还是要由cpu去做)的逻辑就需要cpu立即去做,不做的话,网络新来的数据包就可能丢失.所以这些紧要操作逻辑为硬中断处理.
4,下半部有很多种机制,其中就包括软中断,还有tasklet,workqueue等,软中断只是其中的一种,由于历史的原因,有时候是混淆称呼下半部和软中断的.
5,软中断处理的逻辑并不那么严格要求及时,比如对网络数据包的处理,因为逻辑复杂,不适合放到硬中断里去做,因为要尽量保证硬中断短小精悍.
6,linux调度是以进程(或者说线程)来的,即做调度是不同进程上下文的切换.
7,而可以看到软中断逻辑不属于任何进程,所以才不能睡眠,因为一旦睡眠,cpu切换出去,就切不回来了(和6一起理解).并不是说无法做到在软/硬中断睡眠,只是目前Linux的实现就是这样的,不允许你这么做,要是这么做了,你就等死.

8,系统调用是属于软中断?难道是指int 0x80?这个不知道是什么概念,但肯定不是与上面的软中断同一个意思.给你两个链接:
http://lenky.info/2013/02/04/32% ... %E8%B0%83%E7%94%A8/
http://lenky.info/2013/02/04/64% ... %E8%B0%83%E7%94%A8/

论坛徽章:
0
2 [报告]
发表于 2013-05-10 17:06 |显示全部楼层
通过int 0x80只是实现系统调用的一种方式,而且是最古老的一种方式。应用程序利用int指令进行主动陷入内核,更应该称之为软件中断,这与前面提到的下半部的软中断不是一个概念。应用程序执行系统调用进入到内核后,内核处于进程上下文,是可以阻塞/睡眠的,是中断上下文不能睡眠。

论坛徽章:
0
3 [报告]
发表于 2013-05-10 17:10 |显示全部楼层
如果当前是进程上下文,那么表示如果切换出去,还有机会切换回来,因为当前有进程这个实体作为被调度的代表。
如果当前是中断上下文,那么表示如果切换出去,就没有机会切换回来了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP