| 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