免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-06-16 14:52 |显示全部楼层 |倒序浏览
在preempt_disable后,是不能被其他高优先级进程再抢占调度,但是在时间片到后,还能够继续执行吗?

谢谢。

论坛徽章:
0
2 [报告]
发表于 2014-06-17 08:34 |显示全部楼层
谢谢各位牛人解答,但是本人看代码,系统也是会调度的样子,但是如果preempt_disable被调度之后,本cpu上面的其他任务执行,如果也调用spin_lock,这样这个cpu不就是被死锁了吗?

另外,最常用的get_cpu来获取per_cpu变量,就是为了防止本cpu抢占而使得per_cpu变量不一致,如果使用中间调度出去,per_cpu不也是同样被**了一致性吗?

论坛徽章:
0
3 [报告]
发表于 2014-06-17 11:13 |显示全部楼层
谢谢asuka2001的回复。

preempt_count是属于thread_info, 就是因为thread_info相关,所以如果进程在preempt_disable后别切换出去了,spin lock才存在死锁的情况。

如进程A:
spin_lock(&lock)
critial_code
...
//need long long time to exec , and it may be scheduled out due to time slice over
spin_unlock

如果调度器切换当前的cpu到进程B,B也要使用相同的lock,此时cpu就不会永久的spin来等待同cpu的spin lock释放,但是显然此spin lock不会被释放了。
进程B:
spin_lock(&lock)
critial_code
spin_unlock

谢谢。

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


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

论坛徽章:
0
5 [报告]
发表于 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
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP