免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 思一克
打印 上一主题 下一主题

关于LINUX在中断(硬软)中不能睡眠的真正原因 [复制链接]

论坛徽章:
0
51 [报告]
发表于 2007-06-28 21:56 |只看该作者
原帖由 思一克 于 2007-6-28 14:04 发表于 43楼  
LZ我认为是说发帖子的人呀?

难到我理解错了。


你理解是对的,只是我不知道在引用了他人的回复后怎么称呼对方。说阁下好像太酸了,说兄弟好像太鲁莽了。没这么个词,叫贴主好了:em11:

论坛徽章:
0
52 [报告]
发表于 2007-06-28 22:04 |只看该作者
看了这么多,我真没完全看懂大家的帖子。当时看书不知道为什么没有想,可能是觉得理所当然。

别把进程看成有什么特殊好了,把它就是一个数据结构。比如它要睡眠,就直接改变这个结构的特征。然后别人能识别出来这个特征。 而中断也是改变这些数据结构中的某些的特征,以便调度的时候能感知,而不是中断的过程直接改变当前进程。这样的结构非常清晰,不会牵涉到太多的状态转换。 这好像就是两个上下文的区别了! 进程可以被中断导致的抢占。如果实在很关键,那么它会禁止抢占。
代表进程运行的代码地位和非进程代码的地位不一样。后者是更核心的。

比如说假设进程就是一个跳转,然后必要时跳回来,这样只要把跳回来的源指针放在源所在的结构中(进程内核栈),就不用记住是从哪儿跳过来的,因为实在太难记住了

论坛徽章:
0
53 [报告]
发表于 2007-06-28 23:11 |只看该作者
原帖由 思一克 于 2007-6-28 14:51 发表于 46楼  
我看了19楼的帖子,

比如spinlock, 就是为了短暂需要lock的时候让CPU空等待。这时比用可以sleep的锁要节省CPU而不是浪费。因为调度的耗费可能要比SPIN的耗费多的多。

linux的中断是半THREAD化的。你可以增加工作在THREAD(softirqd)中的比重,增加后,系统反映更慢了。比如你打一个字,一个网络包的处理,如果都用THREAD做,响应应该是慢一些。因为调度的原因


1. Solaris的自适应锁比较聪明,发现有人已经占用前就会去看锁当前的所有者是否在 CPU上运行,如果是,就自旋,如果不是就睡眠。


2. Solaris的中断线程是线程池,预先创建好的,kthread_t的结构在中断栈底部,总是就是为了减少线程化带来的overhead。

论坛徽章:
0
54 [报告]
发表于 2007-06-29 10:50 |只看该作者
原帖由 xiaozhaoz 于 2007-6-28 15:55 发表于 47楼  



这个问题已经脱离了本贴的原意, 如果有兴趣, 可以另外开贴讨论.

实时性的必须保证, 系统在任何情况下, 可以在一定的时间内执行到某个任务.

1. 你的比较尺度有问题,  ...


开吧开吧不是罪,再深的问题也能开贴讨论清楚.

论坛徽章:
0
55 [报告]
发表于 2007-06-29 11:32 |只看该作者
原帖由 Solaris12 于 2007-6-28 23:11 发表于 53楼  


1. Solaris的自适应锁比较聪明,发现有人已经占用前就会去看锁当前的所有者是否在 CPU上运行,如果是,就自旋,如果不是就睡眠。


2. Solaris的中断线程是线程池,预先创建好的,kthread_t的结构在中断 ...

Solaris上锁的持有者可以睡眠?那死锁怎么办?

论坛徽章:
0
56 [报告]
发表于 2007-06-29 14:39 |只看该作者
原帖由 zx_wing 于 2007-6-29 11:32 发表于 55楼  

Solaris上锁的持有者可以睡眠?那死锁怎么办?



我说的是自适应锁,Solaris的mutex本质上分为自适应和自旋两种。

1.不允许睡眠的上下文要用自旋锁,例如,IPI等高优先级中断。
2.允许睡眠的上下文用自适应锁,会动态判断自旋还是睡眠。一般低优先级中断用的就是这种锁,例如网卡,磁盘等中断。

论坛徽章:
0
57 [报告]
发表于 2007-06-29 15:05 |只看该作者
原帖由 Solaris12 于 2007-6-29 14:39 发表于 56楼  



我说的是自适应锁,Solaris的mutex本质上分为自适应和自旋两种。

1.不允许睡眠的上下文要用自旋锁,例如,IPI等高优先级中断。
2.允许睡眠的上下文用自适应锁,会动态判断自旋还是睡眠。一般低优先级 ...

惭愧惭愧,又没看仔细,看成自旋锁了。

论坛徽章:
0
58 [报告]
发表于 2007-09-03 08:19 |只看该作者
中断本来就是用来处理紧急/突发事件的, 而进程睡眠是因为没有事情可以做才去睡眠的,
两者本来就属于对立的情形. 所以,为什么要让中断处理程序去睡眠呢?

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
59 [报告]
发表于 2007-09-03 08:58 |只看该作者
看了半天,头都大了。这问题看一下操作系统的原理或设计类书就明白了。

1.中断是可以睡眠的;如果你要这样设计的话;

传统UNIX:
2.中断是没有必要睡眠的,因为它和所有进程无关(事实上也有关,不然什么地方来的中断,比如磁盘中断总是和哪个读写磁盘的进程有关的
3.更重要的是,它能很快完成,不睡眠被认为能“充分利用资源”;

实时系统:
4.在实时系统中,中断应当被设计成能够睡眠,并被高优先级的进程抢占;
5.中断优先级,是指2.中的相关进程的优先级;保存上下文不是问题,你可以将其设计成中断任务(或线程);
6.555,很难实现.

论坛徽章:
0
60 [报告]
发表于 2007-12-03 15:54 |只看该作者
原帖由 albcamus 于 2007-6-28 14:30 发表
我怎么觉得你们3位彼此都懂对方说什么,只不过主张不同?



有点像FREE BSD,LINUX,OPEN SOLARIS之间的关系。。。。

我觉得linux在将来的版本会实现kthread并把interrupt routine也归入其中。
就像solaris。在进程和进程调度方面,solaris确实是走在前面。

并不是说把中断以kthread形势呈现就是为了调度它,而是在内核真正抽象出thread概念。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP