| | Spis treści | Poprzedni | Następny | | Linux - nowy algorytm szeregowania, struktury danych |
Implementacja algorytmu szeregowania znajduje się w pliku kernel/sched.c. Wykorzystywane struktury danych:
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 */
};
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 */ };
task_struct - zawiera informacje o procesie, algorytm szeregowania wykorzystuje część jej pól
jiffies - licznik czasu systemowego