实时调度优先级设置到最高后,系统不响应其他操作
测试程序为#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,其他操作就能正常响应。
想请问一下这是什么原因? 除了stop class和deadline class的进程没有可以抢占他的,你的“其他操作”应该不会触发这两类的进程。 回复 2# embeddedlwp
中断也不能中止?其他操作不能中止,那在界面上看到的状况跟死机了一样,这是为什么啊?程序只在一个cpu上运行,还剩下一个cpu,按我的理解其他的程序应该有资源能够运行啊。这个地方不是很了解,谢谢了。 “关掉程序”是怎么操作的? 回复 4# smalloc
用CTRL+C关闭的,关闭不掉。想通过kill关闭,但是shell没有反应。最后通过把计算机断电关闭的。 回复 5# jhl19880722
SCHED_FIFO会一直在运行,除非自己让出CPU,这样检查signal pending的点就都走不到。
你这里设置的是最高优先级的rt,除了stop class, deadline class的进程,其他也抢占不了。
回复 1# jhl19880722
FIFO的进程,需要自己sleep释放CPU
jhl19880722 发表于 2014-10-18 22:20 static/image/common/back.gif
回复 2# embeddedlwp
中断也不能中止?其他操作不能中止,那在界面上看到的状况跟死机了一样,这是为什 ...
这个时候应该还能响应中断的,可以使用sysrq组合键打印下各个核上的堆栈。
页:
[1]