deadline调度学习
本篇通过几个方面来看deadline调度器:
1、deadline的设置
2、deadline的任务的添加
3、deadline的任务的调度
deadline的设置
deadline调度器不允许直接通过kernel_clone的方式创建,需要通过sched_setattr的方式将指定pid task修改为deadline调度器并进行必要参加的赋值,大体流程图如下:
首先通过系统调用sched_setattr主动来设置指定pid task的优先级别
SYSCALL_DEFINE3(sched_setattr, pid_t, pid, struct sched_attr __user *, uattr,unsigned int, flags)
{struct sched_attr attr;struct task_struct *p;int retval;if (!uattr || pid < 0 || flags)return -EINVAL;retval = sched_copy_attr(uattr, &attr);if (retval)return retval;if ((int)attr.sched_policy < 0)return -EINVAL;if (attr.sched_flags & SCHED_FLAG_KEEP_POLICY)attr.sched_policy = SETPARAM_POLICY;rcu_read_lock();retval = -ESRCH;p = find_process_by_pid(pid);if (likely(p))get_task_struct(p);rcu_read_unlock();if (likely(p)) {if (attr.sched_flags & SCHED_FLAG_KEEP_PARAMS)get_params(p, &attr);retval = sched_setattr(p, &attr);put_task_struct(p);}return retval;
}
__setscheduler_params:
void