什么是调度策略-1?

时间:2014-05-20 22:29:20

标签: android linux-kernel scheduler

我正在编写一个实用程序来动态更改Android上的任务调度策略。我主要使用sched_getscheduler()和sched_setscheduler()系统调用来完成此任务。

在sched.h(在内核中),调度策略定义为:

/*
 * Scheduling policies
 */ 
#define SCHED_NORMAL    0
#define SCHED_FIFO      1
#define SCHED_RR        2
#define SCHED_BATCH     3
/* SCHED_ISO: reserved but not implemented yet */
#define SCHED_IDLE      5

但是,有些任务(主要是IRQ,尽管不是每个IRQ)在调用sched_getscheduler()时返回-1。

我在sched.c的内核中找到了sched_getscheduler()系统调用的定义:

SYSCALL_DEFINE1(sched_getscheduler, pid_t, pid)
{
struct task_struct *p;
int retval;

if (pid < 0)
    return -EINVAL;

retval = -ESRCH;
rcu_read_lock();
p = find_process_by_pid(pid);
if (p) {
    retval = security_task_getscheduler(p);
    if (!retval)
        retval = p->policy
            | (p->sched_reset_on_fork ? SCHED_RESET_ON_FORK : 0);
}
rcu_read_unlock();
return retval;
}

ESRCH和EINVAL分别定义为3和22。这让我对sched_getscheduler()返回-1的方式感到茫然。

感兴趣的人的一些背景信息。我在第一代Nexus 7上使用Android 4.4.2上的Linux Kernel 3.1.10。返回-1的IRQ具体为:210-host_sp,214-host_sp和218-host_sp。我知道这些IRQ与图形驱动程序有关,但也可能有其他我没有注意到的。

非常感谢任何见解。

由于

1 个答案:

答案 0 :(得分:0)

与大多数其他用户空间函数一样,sched_getscheduler返回-1表示错误。

要获取实际的错误代码,请参阅errno