Scheduler et threads
Posted: Tue Mar 10, 2026 7:23 pm
# Le Scheduler Windows (Thread Scheduling)
Salut
aujourd’hui on va voir un composant central du noyau Windows : le scheduler.
Le scheduler décide :
- quel thread s’exécute
- sur quel CPU
- pendant combien de temps
Comprendre le scheduler permet de comprendre :
- performances CPU
- blocages
- starvation
- comportement multithread
---
1) Principe général
Windows ne planifie pas les processus.
Windows planifie les threads.
Seuls les threads READY peuvent être exécutés.
---
2) Priorités des threads
1-15 = priorités normales
16-31 = priorités temps réel
---
3) Classes de priorité
Les processus avec haute priorité exécutent toujours en priorité ses threads avant les threads d'un processus de basse priorité voici les différents types de priorité.
API importantes
Ces apis permettent de modifier la priorité des threads d'un processus ou obtenir ces infos
---
4) Priorité des threads
Les threads avec haute priorité s'exécutent toujours en priorité avant les threads de basse priorité voici les différents types de priorité.
API
---
5) Base vs Dynamic priority
Le scheduler utilise la Dynamic Priority.
---
6) Ready Queues
Algorithme :
---
7) Quantum
Client Windows ≈ 31 ms
Server Windows ≈ 187 ms
---
8) Round Robin
Si plusieurs threads ont la même priorité :
---
9) Préemption
---
10) Priority Boost
Cas fréquents :
---
11) Scheduling multiprocesseur
Chaque CPU possède :
Le scheduler prend en compte :
- priorité
- cache CPU
- affinité
---
12) Ideal Processor
Ceci permet de choisir sur quel cœur s'exécute le thread en paramètre
---
13) Hard Affinity
---
14) Processor Groups
APIs
---
15) CPU Sets
---
16) Background Mode
---
17) Suspend / Resume
Enfin ces 2 api permettent de relance un thread suspendu ou alors d'en suspendre un ce qui est très utile.
---
18) Sleep / Yield
----
Conclusion
Le scheduler Windows repose sur :
- priorités
- ready queues
- quantum
- préemption
C’est l’un des composants les plus complexes du noyau Windows.
Salut
Le scheduler décide :
- quel thread s’exécute
- sur quel CPU
- pendant combien de temps
Comprendre le scheduler permet de comprendre :
- performances CPU
- blocages
- starvation
- comportement multithread
---
1) Principe général
Windows ne planifie pas les processus.
Windows planifie les threads.
Code: Select all
Running
Ready
Waiting
Terminated
---
2) Priorités des threads
Code: Select all
1 → 31
16-31 = priorités temps réel
---
3) Classes de priorité
Les processus avec haute priorité exécutent toujours en priorité ses threads avant les threads d'un processus de basse priorité voici les différents types de priorité.
Code: Select all
IDLE_PRIORITY_CLASS
BELOW_NORMAL_PRIORITY_CLASS
NORMAL_PRIORITY_CLASS
ABOVE_NORMAL_PRIORITY_CLASS
HIGH_PRIORITY_CLASS
REALTIME_PRIORITY_CLASS
Ces apis permettent de modifier la priorité des threads d'un processus ou obtenir ces infos
Code: Select all
BOOL SetPriorityClass(
HANDLE hProcess,
DWORD dwPriorityClass
);
DWORD GetPriorityClass(
HANDLE hProcess
);
4) Priorité des threads
Les threads avec haute priorité s'exécutent toujours en priorité avant les threads de basse priorité voici les différents types de priorité.
Code: Select all
THREAD_PRIORITY_IDLE
THREAD_PRIORITY_LOWEST
THREAD_PRIORITY_BELOW_NORMAL
THREAD_PRIORITY_NORMAL
THREAD_PRIORITY_ABOVE_NORMAL
THREAD_PRIORITY_HIGHEST
THREAD_PRIORITY_TIME_CRITICAL
Code: Select all
BOOL SetThreadPriority(
HANDLE hThread,
int nPriority
);
5) Base vs Dynamic priority
Code: Select all
Base Priority
Dynamic Priority
---
6) Ready Queues
Code: Select all
32 ready queues
1 par niveau de priorité
Code: Select all
le thread READY avec la priorité la plus haute s'exécute
7) Quantum
Client Windows ≈ 31 ms
Server Windows ≈ 187 ms
Code: Select all
thread → Ready Queue
8) Round Robin
Si plusieurs threads ont la même priorité :
Code: Select all
Round Robin scheduling
9) Préemption
Code: Select all
Higher priority thread → preemption
10) Priority Boost
Cas fréquents :
Code: Select all
I/O completion
GUI wakeup
Starvation avoidance
11) Scheduling multiprocesseur
Chaque CPU possède :
Code: Select all
sa propre ready queue
- priorité
- cache CPU
- affinité
---
12) Ideal Processor
Ceci permet de choisir sur quel cœur s'exécute le thread en paramètre
Code: Select all
DWORD SetThreadIdealProcessor(
HANDLE hThread,
DWORD dwIdealProcessor
);
13) Hard Affinity
Code: Select all
SetProcessAffinityMask()
GetProcessAffinityMask()
SetThreadAffinityMask()
14) Processor Groups
Code: Select all
1 group = max 64 CPU
Code: Select all
GetProcessGroupAffinity()
SetThreadGroupAffinity()
GetThreadGroupAffinity()
15) CPU Sets
Code: Select all
GetSystemCpuSetInformation()
SetProcessDefaultCpuSets()
SetThreadSelectedCpuSets()
16) Background Mode
Code: Select all
SetPriorityClass(
GetCurrentProcess(),
PROCESS_MODE_BACKGROUND_BEGIN
);
17) Suspend / Resume
Enfin ces 2 api permettent de relance un thread suspendu ou alors d'en suspendre un ce qui est très utile.
Code: Select all
SuspendThread()
ResumeThread()
NtSuspendProcess()
NtResumeProcess()
18) Sleep / Yield
Code: Select all
Sleep(ms)
SwitchToThread()
Conclusion
Le scheduler Windows repose sur :
- priorités
- ready queues
- quantum
- préemption
C’est l’un des composants les plus complexes du noyau Windows.