예제 #1
0
static void yield_task_dummy(struct rq *rq)
{
	dequeue_task_dummy(rq, rq->curr, rq->curr->flags);
	enqueue_task_dummy(rq, rq->curr, rq->curr->flags);
	printk(KERN_CRIT "yield: %d\n",rq->curr->pid);
	// resched_task ? No
	// recover old priority ? 
}
예제 #2
0
파일: dummy.c 프로젝트: BinaryBrain/os
static void check_preempt_curr_dummy(struct rq *rq, struct task_struct *p, int flags)
{
  /* Here two cases are handled:
   *   - if a process of higher priority becomes runnable; and
   *   - if a process of the same priority as the running process becomes runnable
   *     in which case the running process is preempted only if it has already 
   *     exceeded its round robin quantum.
   */
  if (rq->curr->prio > p->prio) {
    resched_task(rq->curr);
  } else if (rq->curr->prio == p->prio) {

    if (p->dummy_se.rr_tick_count >= get_timeslice()) {    
      dequeue_task_dummy(rq, rq->curr, 0);
      enqueue_task_dummy(rq, rq->curr, 0);
      resched_task(rq->curr);
    }
  }
}
예제 #3
0
파일: dummy.c 프로젝트: BinaryBrain/os
static void yield_task_dummy(struct rq *rq)
{
  dequeue_task_dummy(rq, rq->curr, 0);
  enqueue_task_dummy(rq, rq->curr, 0);
  resched_task(rq->curr);
}