我一直在对调度程序进行修改,以便运行我通过系统调用传递其pid的进程。为此,我使我的列表类型为列表头,并通过系统调用从相应的运行队列中使通过的进程出队。在测试时,我首先进行系统调用。第一次运行良好,一次完成后,系统运行速度非常慢。在进行一些调试时,我发现这是由于在系统调用中调用了dequeue_task_fair()引起的。我持有所需的锁并在此前后更新运行队列,但是系统仍然非常缓慢。这是我的代码。请帮忙 !
struct task_struct *proc;
struct rq *rq = NULL;
struct rtnice_struct *ent;
struct rtnice_struct *lolwa;
bool queued , running;
struct rq_flags rf;
proc = find_process_by_pid(pid);
if(proc!=NULL)
rq = rq_of(task_cfs_rq(proc));
rq = task_rq_lock(proc, &rf);
update_rq_clock(rq);
preempt_disable();
//dequeue_task_fair(rq , proc , 0);
queued = task_on_rq_queued(proc);
running = task_current(rq,proc);
while(1) {
if(running) {
printk("running");
put_prev_task_fair(rq,proc);
}
if(queued) {
printk("queued");
deactivate_task((rq),(proc),0);
break;
}
}
task_rq_unlock(rq, proc, &rf);
preempt_enable();
update_rq_clock(rq);