| Spis treści | Poprzedni | Następny | | Nowy algorytm szeregowania ULE |
Aktualnie w systemie FreeBSD wprowadzany jest nowy algorytm ULE. W wydaniu 5.1 użytkownik może ustawić czy ma być używany stary algorytm czy algorytm ULE w trakcie bootowania systemu.
Stary algorytm 4BSD bazuje na tradycyjnym UNIX-owym algorytmie z 4.3BSD. Dodano do niego obsługę dwóch nowych klas procesów - czasu rzeczywistego i idle oraz wsparcie dla wieloprocesorowości (SMP).
Pomysły stojące za algorytmem ULE są takie same jak w nowym algorytmie linuksa. Oto kilka jego cech:
struct kseq { struct runq ksq_idle; /* Queue of IDLE threads. */ struct runq ksq_timeshare[2]; /* Run queues for !IDLE. */ struct runq *ksq_next; /* Next timeshare queue. */ struct runq *ksq_curr; /* Current queue. */ int ksq_loads[KSEQ_NCLASS]; /* Load for each class */ int ksq_load; /* Aggregate load. */ short ksq_nice[PRIO_TOTAL + 1]; /* KSEs in each nice bin. */ short ksq_nicemin; /* Least nice. */ #ifdef SMP unsigned int ksq_rslices; /* Slices on run queue */ #endif };
Dla porównania struct runqueue z linux-a.
Oparte na spostrzeżeniu że procesy interaktywne dużo czasu spędzają śpiąc i szybko się wykonują. Dwa liczniki - w jednym pamiętamy ile proces śpi, a w drugim ile czasu się wykonuje. Jeśli wartość sumy liczników przekroczy określoną wartość obydwa są zmniejszane. Interaktywność procesu określana jest na podstawie wzajemnej relacji tych liczników.
Określany na podstawie wartości nice i wskaźników interaktywności procesu.