Chinaunix

标题: 实时调度优先级设置到最高后,系统不响应其他操作 [打印本页]

作者: jhl19880722    时间: 2014-10-18 09:40
标题: 实时调度优先级设置到最高后,系统不响应其他操作
测试程序为
#define _GNU_SOURCE
#include <sched.h>
int main()
{
    int prio = 99;
    sched_setscheduler(0, SCHED_FIFO, (struct sched_param*)&prio);
    while(1);
    return 0;
}
(环境:ubuntu ,kernel 3.5.0-17-generic,Intel Core2 双核)启动后系统不响应其他操作,关闭程序都关不掉。如果prio = 50,其他操作就能正常响应。
想请问一下这是什么原因?
作者: embeddedlwp    时间: 2014-10-18 18:46
除了stop class和deadline class的进程没有可以抢占他的,你的“其他操作”应该不会触发这两类的进程。
作者: jhl19880722    时间: 2014-10-18 22:20
回复 2# embeddedlwp

中断也不能中止?其他操作不能中止,那在界面上看到的状况跟死机了一样,这是为什么啊?程序只在一个cpu上运行,还剩下一个cpu,按我的理解其他的程序应该有资源能够运行啊。这个地方不是很了解,谢谢了。
作者: smalloc    时间: 2014-10-19 01:34
“关掉程序”是怎么操作的?
作者: jhl19880722    时间: 2014-10-19 08:43
回复 4# smalloc


   用CTRL+C关闭的,关闭不掉。想通过kill关闭,但是shell没有反应。最后通过把计算机断电关闭的。
作者: embeddedlwp    时间: 2014-10-19 09:54
回复 5# jhl19880722


SCHED_FIFO会一直在运行,除非自己让出CPU,这样检查signal pending的点就都走不到。
你这里设置的是最高优先级的rt,除了stop class, deadline class的进程,其他也抢占不了。


   
作者: 瀚海书香    时间: 2014-10-20 14:13
回复 1# jhl19880722
FIFO的进程,需要自己sleep释放CPU

   
作者: humjb_1983    时间: 2014-10-21 09:12
jhl19880722 发表于 2014-10-18 22:20
回复 2# embeddedlwp

中断也不能中止?其他操作不能中止,那在界面上看到的状况跟死机了一样,这是为什 ...

这个时候应该还能响应中断的,可以使用sysrq组合键打印下各个核上的堆栈。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2