next up previous contents
Next: Wywoływanie funkcji schedule() Up: Szeregowanie procesów - algorytm Previous: Zadania funkcji schedule   Spis rzeczy

Obliczenie priorytetów procesów

  1. Funkcja goodness() oblicza dla danego procesu p wartość określającą ważność przełączenia aktualnego procesu na proces p. Będzie wykorzystywana przez funkcję schedule().

    static inline int goodness(struct task_struct * p, int this_cpu, 
                               struct mm_struct *this_mm)
    {
      int weight;
      weight = -1;
      if (p->policy & SCHED_YIELD)
        goto out;
      if (p->policy == SCHED_OTHER) {
        weight = p->counter;
        if (!weight)
          goto out;
        if (p->mm == this_mm || !p->mm)
          weight += 1;
        weight += 20 - p->nice;
        goto out;
      }
      weight = 1000 + p->rt_priority;
    out:
      return weight;
    }
    

    Zauważmy, że w ten sposób procesy czasu rzeczywistego otrzymują zawsze priorytet wyższy od dowolnego zwykłego procesu.

  2. Funkcja preemption_goodness zwraca różnicę pomiędzy ważnością zmiany aktualnego procesu na proces p a pozostawieniem aktualnego procesu działającego dalej. Będzie ona używana w funkcji reschedule_idle.

    static inline int preemption_goodness(struct task_struct * prev, 
                                  struct task_struct * p, int cpu)
    {
      return goodness(p, cpu, prev->active_mm) - 
             - goodness(prev, cpu, prev->active_mm);
    }
    


next up previous contents
Next: Wywoływanie funkcji schedule() Up: Szeregowanie procesów - algorytm Previous: Zadania funkcji schedule   Spis rzeczy
Ignacy Kowalczyk 2001-11-16