警告Linux'实时FIFO调度程序

时间:2014-06-27 13:36:36

标签: linux linux-kernel kernel scheduling

我试图在3.13.3中更改实时调度程序的实现。据我所知,在实时FIFO调度中,内核只是保持一个具有相同优先级的进程队列,并将CPU分配给队列末尾的进程(head),并将进程添加到尾部... I想要在PCB结构(task_struct)中添加一个额外的字段,以便内核根据这个新字段对队列进行排序。假设我们将这个新字段定义为int extra_priority,我希望内核在选择从队列执行的下一个进程时给予优先级extra_priority的进程优先级... 我想知道,整个过程从队列中排出过程"和#34;将新进程推到队列尾部"发生?所以我可以通过extra_priority"来调用我的"排序。每当队列发生变化时,为了使队列始终保持排序。

1 个答案:

答案 0 :(得分:0)

我还没有修改实时流程的流程安排。根据了解Linux内核一书中的以下段落,您可以通过修改scheduler_tick()函数来改变实时FIFO进程的顺序来实现这一目标。

  

更新实时流程的时间片

     

如果当前进程是FIFO实时进程,则scheduler_tick()   无事可做。实际上,在这种情况下,电流不能被抢占   通过较低或相等的优先级进程,因此它没有意义   让时间片计数器保持最新状态。如果当前是循环赛   实时进程,scheduler_tick()减少其时间片计数器   并检查量子是否耗尽:

if (current->policy == SCHED_RR && !--current->time_slice) {
current->time_slice = task_timeslice(current);
current->first_time_slice = 0;
set_tsk_need_resched(current);
list_del(&current->run_list);
list_add_tail(&current->run_list,
this_rq()->active->queue+current->prio);
}