05 - Procesy a vlákna - plánování
Níže je uveden pouze náhled materiálu. Kliknutím na tlačítko 'Stáhnout soubor' stáhnete kompletní formátovaný materiál ve formátu PDF.
Windows XP
Ke změně priority se používá funkce (z Win32 API):
BOOL SetThreadPriority (HANDLE hThread, int fdWPriority);
fdwPriority
úroveň priority vlákna
THREAD_PRIORITY_LOWEST TPP
- 2
THREAD_PRIORITY_BELOW_NORMAL
TPP - 1
THREAD_PRIORITY_ NORMAL
TPP
THREAD_PRIORITY_ABOVE_NORMAL
TPP + 1
THREAD_PRIORITY_HIGHEST
TPP + 2
THREAD_PRIORITY_ IDLE
1 (mimo realtime)
16 (realtime)
THREAD_PRIORITY_TIME_CRITICAL
15 (mimo realtime)
31 (realtime)
TPP je úroveň priority odpovídající třídě priority procesu
A7B38UOS Úvod do operačních systémů 05 - Procesy a vlákna - plánování
Windows XP
-
dynamickým zvyšováním priority vlákna
• úroveň priority je dána kombinací třídy priority procesu a relativní priority, to je
tzv. bázová úroveň priority;
• systém může tuto úroveň priority v určitých případech dynamicky zvýšit (takto
může reagovat na některé I/O události – vstup z klávesnice, čtení z disku, apod.
– čekající vlákno je aktivováno a ještě je mu zvýšena priorita např. o 2);
• po proběhnutí prvního časového kvanta je priorita snížena o 1, v dalším běhu
opět o 1;
• to se opakuje, dokud nedojde ke snížení priority na bázovou úroveň.
• dynamické zvyšování úrovně se provádí u vláken s nižší bázovou prioritou, ale
nikdy se nepřekračuje úroveň nad hodnotu 15.
• dynamicky se zvyšuje úroveň také procesům na popředí. Ve Windows NT 4.0 je
možné dynamické zvyšování priority vyřadit pomocí funkcí
SetThreadPriorityBoost() a SetProcessPriorityBoost().
A7B38UOS Úvod do operačních systémů 05 - Procesy a vlákna - plánování
Plánování v Linuxu - procesy
Plánovač používá
4 strategie plánování:
SCHED_OTHER, SCHED_BATCH, SCHED_FIFO a SCHED_RR
SCHED_OTHER
Statická priorita = 0; běh řízen hodnotou nice (-20 až +19) => z ní odvozena dynamická
priorita
SCHED_BATCH
Podobná předchozí, liší se výpočtem dyn. priority, vhodná pro dlouhodobě běžící neinteraktivní procesy.
Plánovač považuje proces za velmi vytěžující a mírně ho penalizuje.
SCHED_FIFO
Může být použita pouze pro procesy se statickou prioritou vyšší než 0. Procesor je vždy přidělen procesu
připravenému k běhu, který má nejvyšší statickou prioritu. Proces má procesor přidělen tak dlouho dokud
neskončí, dokud není připraven proces s vyšší statickou prioritou nebo dokud se proces sám nevzdá
dalšího běhu voláním sched_yield().