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 static/image/common/back.gif
回复 2# embeddedlwp

中断也不能中止?其他操作不能中止,那在界面上看到的状况跟死机了一样,这是为什 ...
这个时候应该还能响应中断的,可以使用sysrq组合键打印下各个核上的堆栈。
页: [1]
查看完整版本: 实时调度优先级设置到最高后,系统不响应其他操作