Nowy sposób liczenia priorytetu

Wstecz
Dalej
Indeks

W jądrze 2.6 usprawniono mechanizm wyliczania priorytetów dynamicznych dla procesów użytkownika - procesy interaktywne są nagradzane bonusem, a procesy zachłanne są karane. Maksymalny bonus wynosi -5, maksymalna kara +5. Wartości te są dodawane do statycznego priorytetu (nice). Zależność od priorytetu statycznego pozwala użytkownikowi kontrolować przydział procesora pomimo bonusów. (Np. zachłanny proces o wartości nice=0 nigdy nie będzie wywłaszczony przez proces interaktywny z nice=+19.)

Heurystyka wyliczania priorytetu dynamicznego

Funkcja effective_prio(), bierze pod uwagę następujące parametry procesu:

int prio, static_prio; /* priorytet dynamiczny i statyczny */
unsigned long sleep_avg; /* średni czas spania/aktywności */
long interactive_credit; /* kredyt interaktywności (0..200)

Wyliczanie kwantu czasu

Priorytet, ale statyczny, ma też (oczywiście) wpływ na długość kwantu czasu przydzielonego procesowi na czas epoki. Dozwolona długość kwantu mieści się w zakresie 10ms..200ms, i na ten zakres jest liniowo skalowany zakres priorytetu -10..+19.

#define MIN_TIMESLICE( 10 * HZ / 1000)
#define MAX_TIMESLICE(200 * HZ / 1000)

wszelako aby zapobiec zagłodzeniu przez proces o długim kwancie czasu, każdy proces jest wywłaszczany (i przerzucany na koniec listy) gdy minie czas pracy określony wartością TIMESLICE_GRANULARITY.

Wróć do góry