Plánování procesů a vláken

Plánování běhu procesů a vláken (scheduling) je jedním z klíčových úkolů operačního systému. Jeho úkolem je rozhodnout, který proces nebo vlákno by mělo být v daném okamžiku přiděleno k běhu na procesoru. Existují různé metody plánování, které mohou být použity v závislosti na požadavcích a vlastnostech systému.

ChatGPT

Vygenerováno pomocí ChatGPT

1. Plánování procesů

Procesy jsou samostatné jednotky, které obsahují svůj vlastní adresní prostor a vykonávají určité úkoly. Každý proces může obsahovat jedno nebo více vláken.

2. Plánování vláken

Vlákna (threads) jsou lehčí jednotky uvnitř procesu. Sdílejí stejný adresní prostor, což umožňuje rychlejší komunikaci mezi nimi, ale na druhou stranu mohou být také náchylnější k chybám, jako jsou race conditions.

3. Stavy vlákna (a i procesů?)

Vlákna mohou během svého životního cyklu procházet několika stavy:

  1. Vytvořeno (New): Vlákno bylo vytvořeno, ale dosud nezačalo běžet.
  2. Běžící (Running): Vlákno je aktuálně vykonáváno procesorem.
  3. Blokované (Blocked): Vlákno čeká na splnění určité podmínky, například na dokončení I/O operace, aby mohlo pokračovat.
  4. Čekající (Waiting): Vlákno čeká na nějakou událost, jako je uvolnění zámku nebo signál od jiného vlákna.
  5. Uspáno (Sleeping): Vlákno je dočasně pozastaveno na určitou dobu.
  6. Připraveno (Ready): Vlákno je připraveno běžet, jakmile bude přiděleno CPU, ale momentálně neběží, protože CPU je zaneprázdněno jiným vláknem.
  7. Ukončeno (Terminated): Vlákno dokončilo svou činnost a již není aktivní.

Příklady z praxe

stateDiagram-v2
    [*] --> Vytvoreno: Vytvořeno (New)
    Vytvoreno --> Pripraveno: Připraveno (Ready)
    Pripraveno --> Bezici: Běžící (Running)
    Bezici --> Blokovane: Blokované (Blocked)
    Blokovane --> Pripraveno: Připraveno (Ready)
    Bezici --> Cekajici: Čekající (Waiting)
    Cekajici --> Pripraveno: Připraveno (Ready)
    Bezici --> Ukonceno: Ukončeno (Terminated)
    Pripraveno --> Uspano: Uspáno (Sleeping)
    Uspano --> Pripraveno: Připraveno (Ready)
    Ukonceno --> [*]