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