- 论坛徽章:
- 0
|
本帖最后由 donghaitad 于 2013-11-02 20:32 编辑
本人想通过修改CFS调度器问题来阻止某一个进程的运行。
内核版本:2.6.24
通过与大家的讨论和调试,目前修改代码如下:
其基本想法是:修改从就绪队列中选择下一个进程。
static struct sched_entity *pick_next_entity(struct cfs_rq *cfs_rq)
{
struct sched_entity *se = NULL;
struct task_struct *tp;
if (first_fair(cfs_rq)) {
se = __pick_next_entity(cfs_rq);
+ tp = task_of(se);
+ if(tp->pid == target_pid)//如果目标进程被选中
+ {
+ __dequeue_entity(cfs_rq, se);//将该进程移出就绪队列
+ if (first_fair(cfs_rq)) {//如果就绪队列不为空
+ se = __pick_next_entity(cfs_rq);;//重新选择进程
+ set_next_entity(cfs_rq, se);
+ }
+ else{//否则选择为空
+ prinkt("No process is selected!\n");
+ se = NULL;
+ }
+ }
+ else
+ set_next_entity(cfs_rq, se);
- set_next_entity(cfs_rq, se);
}
return se;
}
static struct task_struct *pick_next_task_fair(struct rq *rq)
{
struct cfs_rq *cfs_rq = &rq->cfs;
struct sched_entity *se;
if (unlikely(!cfs_rq->nr_running))
return NULL;
do {
se = pick_next_entity(cfs_rq);
+ if(se==NULL)
+ return NULL;
cfs_rq = group_cfs_rq(se);
} while (cfs_rq);
return task_of(se);
}
这段代码正常运行一段时间后("No process is selected!能够打印出来),系统就卡住了(但鼠标好像还可以动)。
请大家指教!!!
不好意思重新编辑了一下。
Thanks a lot!
|
|