通过系统调用从运行队列中退出进程后,系统速度变慢

时间:2018-08-12 09:40:52

标签: c linux-kernel scheduler

我一直在对调度程序进行修改,以便运行我通过系统调用传递其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);

0 个答案:

没有答案