and 发表于 2008-3-10 10:17

请教两个关于eCos的问题

1.如果DSR中做了太多的事情,以致DSR消耗的时间超过了调度时间片,会发生什么?会不会被调度走,也就是说,内核本身能被抢占吗?<br /><br />2.如果所有的用户线程都让出CPU,处于SLEEPING态,那么系统是在核心态等待呢,还是运行一个IDLE线程,好象有个idle_thread_main,是不是在这个时候被运行?<br />

armecos 发表于 2008-3-10 11:47

ecos问题回答

1、DSR当然可以被调度,只有ISR不能被抢占,所以ISR要尽量短,把大负荷工作甩给DSR做,目的就是减少中断响应延迟时间。<br /><br />2、会有一个IDLE线程存在的(例如:统计线程),CPU不可能不运行程序。不过如果增加电源管理,可以在此时降低时钟频率,停止某些部件运行。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;详见:<br />&nbsp;&nbsp;&nbsp;&nbsp;<b>ecos中断处理和电源管理</b>

and 发表于 2008-3-10 13:34

虽然把ISR分离出来

原来DSR是在用户级运行的。<br />另外,虽然把ISR分离出来,提高了中断响应速度,但将未完成的工作交给DSR来作,在调度DSR以及DSR工作完成的时候,多出两次线程切换。当系统的数据进出量很大的时候,也即中断非常频繁的时候,多出的这两次线程切换将对系统的吞吐率造成影响。<br />不知这样的理解是否正确?谢谢!!<br />

armecos 发表于 2008-3-10 16:58

你在DSR里不放开对应中断即可,

就是在没有处理完相关中断前不使能此中断。在“ecos中断处理”流程里详细说明了处理顺序。当然,中断负荷不能超过CPU处理能力,否则,无论软件怎样修改也无济于事。

and 发表于 2008-3-10 17:20

对,中断负荷能力

这个说法很贴切。其实我的想法就是想提高系统的中断负荷能力。<br />中断响应速度、中断负荷能力,是系统的两个不同特征。<br />我是想如果能把DSR和IDLE线程放到核心执行,这样减少切换动作次数,有助于提高系统中断负荷能力。

armecos 发表于 2008-3-10 20:48

那你直接在ISR里处理一切不就可以了,

反正你不在乎中断响应延迟。DSR的切换是必须的,不然还要DSR作甚。

and 发表于 2008-3-10 21:38

再琢磨琢磨

谢谢!^_^
页: [1]
查看完整版本: 请教两个关于eCos的问题