| Spis treści | Poprzedni | Następny | Linux - nowy algorytm szeregowania, struktury danych

Struktury danych

Implementacja algorytmu szeregowania znajduje się w pliku kernel/sched.c. Wykorzystywane struktury danych:

  1. struct runqueue - informacje specyficzne dla danego procesora. Zawiera listy active i expired procesów gotowych do wykonania na procesorze.
    struct runqueue {
     spinlock_t lock;                  /* zapewnia że dostęp do struktury ma jeden proces */
     unsigned long nr_running;         /* liczba zadań gotowych do wykonania */
     unsigned long nr_switches;        /* liczba przełączeń kontekstu dla procesora */
     unsigned long expired_timestamp;  /* od kiedy jakiś proces znajduje się w expired */
     unsigned long nr_uninterruptible; /* liczba procesów w stanie uninterruptible */
     struct task_t *curr;              /* proces wykonujący się na tym procesorze */
     struct task_t *idle;              /* proces idle dla tego procesora */
     struct mm_struct *prev_mm;        /* mm_struct ostatnio wykonywanego procesu */
     struct prio_array_t *active;      /* procesy aktywne które mają czas */
     struct prio_array_t *expired;     /* procesy aktywne którym skończył się czas */
     struct prio_array_t arrays[2];    /* prio_array_t używane jako active i expired */
     int prev_cpu_load[NR_CPUS];       /* używane przez heurystykę w algorytmie migracji procesów */
     struct task_t *migration_thread;  /* proces migracji dla tego procesora */
     struct list_head migration_queue; /* kolejka migracji procesów */
     
     atomic_t nr_iowait;               /* liczba procesów czekających na operację I/O */
    };
    
    
  2. struct prio_array - wykorzystywana do szybkiego znajdowania procesów o najwyższym priorytecie.
    struct prio_array {
     int nr_active;                     /* liczba procesów */
     unsigned long bitmap[BITMAP_SIZE]; /* mapa bitowa procesów o danym priorytecie  */
     struct list_head queue[MAX_PRIO];  /* tablica list procesów  */
    };
    
  3. task_struct - zawiera informacje o procesie, algorytm szeregowania wykorzystuje część jej pól

  4. jiffies - licznik czasu systemowego