免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: kerryxi

[进程管理] 请问进程在preempt_disable后,还能永久执行而不被调度吗? [复制链接]

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
发表于 2014-06-17 12:33 |显示全部楼层
kerryxi 发表于 2014-06-17 11:13
谢谢asuka2001的回复。

preempt_count是属于thread_info, 就是因为thread_info相关,所以如果进程在pre ...

按理spin_lock之后就不会调度出去了,但如果critical code执行时间过长的话,估计会触发异常了,比如softlockup,或者工作队列(比如kblockd)得不到调度而产生异常。

论坛徽章:
0
发表于 2014-06-17 13:02 |显示全部楼层
回复 10# asuka2001


    肯能是你的ko模块加载后,在cpu1上面调度,但是特别占用cpu,其他必须在cpu1上面运行的任务就在cpu1的运行队列中排队等待执行吧。

论坛徽章:
0
发表于 2014-06-17 13:52 |显示全部楼层
humjb_1983 发表于 2014-06-17 11:06
再看了下代码,更正下我之前的说法,在preempt_disable之后,如果进程不主动调度的话,应该不会调度到其它进 ...


同意楼主的看法,设置preempt_disalbe后,系统是不会再被调度了。

arm架构的主调度器也是优先判断这个preempt_count计数。
__irq_svc:
        svc_entry
        irq_handler

#ifdef CONFIG_PREEMPT
        get_thread_info tsk
        ldr        r8, [tsk, #TI_PREEMPT]                @ get preempt count
        ldr        r0, [tsk, #TI_FLAGS]                @ get flags
        teq        r8, #0                                @ if preempt count != 0
        movne        r0, #0                                @ force flags to 0
        tst        r0, #_TIF_NEED_RESCHED
        blne        svc_preempt
#endif

        svc_exit r5, irq = 1                        @ return from exception
UNWIND(.fnend                )
ENDPROC(__irq_svc)

谢谢humjb_1983

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
发表于 2014-06-17 14:16 |显示全部楼层
kerryxi 发表于 2014-06-17 13:52
同意楼主的看法,设置preempt_disalbe后,系统是不会再被调度了。

arm架构的主调度器也是优先判断这 ...

看似这样的,至于时间片的问题,个人理解,在该进程的时间片用完之后,只会这是need_resched标记,但在preempt_disalbe后,没有了调度时机,即使设置了need_resched标记,也没用了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP