13.06.18 vjj 1 Priority Dispatcher
13.06.18 vjj 2 round-robin cyklická fronta připravených vláken
13.06.18 vjj 3 round-robin cyklická fronta připravených vláken čekající vlákna
13.06.18 vjj 4 Priority vlákna ve frontě jsou seřazena podle priorit, tj. vyšší priorita umožňuje předbíhat proč? foreground x background aplikace x systém kdo? uživatel (?) programátor uživatelských aplikací (?) programátor serverových aplikací administrátor serverových aplikací
Priority - pro uživatele (?) > pgm.exe > START pgm.exe > START /NORMAL pgm.exe > START /LOW pgm.exe > START /HIGH pgm.exe > START /REALTIME pgm.exe Windows Task Manager záložka Processes process local menu (mouse right button) Set Priority RealTime, High, Above Normal, Normal, Below Normal, Low 13.06.18 vjj 5
Priority - pro uživatele (?) > pgm.exe > START pgm.exe > START /NORMAL pgm.exe > START /LOW pgm.exe > START /HIGH pgm.exe > START /REALTIME pgm.exe Windows Task Manager záložka Processes process local menu (mouse right button) Set Priority RealTime, High, Above Normal, Normal, Below Normal, Low 13.06.18 vjj 6
Priority - pro uživatele (?) > pgm.exe > START pgm.exe > START /NORMAL pgm.exe > START /LOW pgm.exe > START /HIGH pgm.exe > START /REALTIME pgm.exe Windows Task Manager záložka Processes nebo Details process local menu (mouse right button) Set Priority > RealTime, High, Above Normal, Normal, Below Normal, Low 13.06.18 vjj 7
Windows Priority
13.06.18 vjj 9 pgm - priorita procesu DWORD PrioritaProcesu = GetPriorityClass (HANDLE hprocess) ; BOOL SetPriorityClass ( HANDLE hprocess, DWORD PrioritaProcesu ) ;
13.06.18 vjj 10 proces - vlákno Priorita procesu Normální priorita vlákna IDLE_PRIORITY_CLASS 4 NORMAL_PRIORITY_CLASS HIGH_PRIORITY_CLASS 13 REALTIME_PRIORITY_CLASS 24 7 (background) 8 9 (foreground)
13.06.18 vjj 11 pgm - priorita vlákna int PrioritaVlákna = GetThreadPriority (HANDLE hthread) ; BOOL SetThreadPriority (HANDLE hthread, int PrioritaVlákna) ; THREAD_PRIORITY_IDLE 1 (16 pro realtime) THREAD_PRIORITY_LOWEST Normal 2 THREAD_PRIORITY_BELOW_NORMAL Normal 1 THREAD_PRIORITY_NORMAL Normal (viz priorita procesu) THREAD_PRIORITY_ABOVE_NORMAL Normal + 1 THREAD_PRIORITY_HIGHEST Normal + 2 THREAD_PRIORITY_TIME_CRITICAL 15 (31 pro realtime)
Windows "realtime" třída priorit "realtime" je jen formálním označením a nemá se zpracováním v reálném čase nic společného přiřazení úrovně "realtime" vyžaduje privilegium "increase scheduling priority "
13.06.18 vjj 13 dynamické priority Po ukončení I/O operací (base +1... +8, pak postupně zpět) Po skončení čekání na událost nebo semafor (base +1, pak postupně zpět) Po skončení čekání vlákna foregroundového procesu na objekt jádra (current +PsPrioritySeparation, pak postupně zpět) GUI thread je vzbuzen díky "windowing activity" (= přišla nová zpráva) (navíc +2, pak postupně zpět) Pokud připravený thread už nějaký čas (~300 ticks) neběžel (CPU starvation) (->15 a 2x/4x delší kvantum, pak okamžitě zpět)
13.06.18 vjj 14 Preemptivní multitasking Thread dobrovolně opustil "running state", protože začal čekat (wait state event, semaphor, I/O, process, thread, zpráva,..) priority < 14 : kvantum = kvantum 1 priority 14 : kvantum = full Vlákno vyčerpalo přidělené časové kvantum Vlákno skončilo (nebo bylo ukončeno) Preempce Thread s vyšší prioritou skončil čekání Priorita aktivního vlákna byla změněna
13.06.18 vjj 15 Rescheduling Thread změnil stav na připraven např. thread byl nově vytvořen nebo právě ukončil čekání (wait state) Thread opustil "running state", protože mu vypršelo kvantum nebo začal čekat (wait state) změnila se priorita vlákna díky volání služby systému nebo proto, že ji změnily samotné Windows změnila se procesorová afinita vlákna
13.06.18 vjj 16 problém Systém (Task Manager, Dispatcher, Memory Manager,...) provádí změny ve frontách vláken (pořadí ve frontě, přesun mezi frontami,...) interrupt vyvolá požadavek na změnu ve frontách vláken
IRQL Dispatcher Priority 13.06.18 vjj 17
13.06.18 vjj 18 alternativa pro samostudium Process Scheduling Paul Krzyzanowski, Computer Science Department at Rutgers University at the New Brunswick https://www.cs.rutgers.edu/~pxk/416/notes/07- scheduling.html