⚙️ Jádro, procesy a vlákna

Kuchař a objednávky

O čem to je

V restauraci je jeden kuchař a deset objednávek. Nemůže vařit deset jídel naráz. Chvíli míchá polévku, pak otočí řízek, pak zase polévka. Hostům to připadá, že se všechno vaří současně.

Procesor je takový kuchař a programy jsou objednávky. O tom, kdo zrovna „vaří“, rozhoduje jádro operačního systému. Když pochopíš procesy, budeš umět zjistit, proč se počítač seká, a ukončit zamrzlý program.

Nové pojmy

Procesor (CPU)Část počítače, která vykonává instrukce programů. Moderní procesor má několik jader, každé jádro zvládne jednu práci v jednom okamžiku.čtyřjádrový procesor
Jádro OS (kernel)Hlavní část operačního systému. Mimo jiné rozhoduje, který program poběží na procesoru. Pozor: jádro OS je software, jádro procesoru je hardware.
Program a procesProgram je soubor na disku (recept). Proces je spuštěný program v paměti (vaření podle receptu). Jeden program může běžet jako víc procesů.chrome.exe na disku = program; tři otevřená okna Chrome = několik procesů
PIDČíslo procesu (Process ID), podle kterého ho OS rozlišuje.proces firefox s PID 2481
VláknoSamostatně běžící část procesu. Vlákna jednoho procesu sdílejí jeho paměť, takže spolupracují rychle.Ve Wordu jedno vlákno přijímá psaní, druhé kontroluje pravopis.

Stavy procesu

  1. připravený: čeká na procesor
  2. běžící: právě je na procesoru
  3. čekající: čeká na disk, síť nebo klávesu
  4. připravený: data dorazila, zase čeká na procesor

Proces navíc vzniká (nový) a nakonec skončí (ukončený).

Plánování

PlánovačČást jádra, která rozhoduje, který připravený proces dostane procesor a na jak dlouho.
Přepnutí kontextuVýměna procesu na procesoru: jádro uloží stav jednoho a načte stav druhého. Trvá krátce, ale není zadarmo.
Preemptivní multitaskingJádro smí procesu procesor odebrat i proti jeho vůli, třeba po uplynutí časového kvanta. Tak to dělají Windows, Linux i macOS.
Procesy A, B, C potřebují 5, 3 a 2 ms procesoru. Plánovač je střídá po 2 ms (Round Robin) v pořadí A, B, C. Kdy který skončí?
Časová osa: A 0–2, B 2–4, C 4–6 (C hotovo v 6), A 6–8, B 8–9 (B hotovo v 9), A 9–10 (A hotovo v 10).
Počítač se seká. Jak zjistíš, který proces za to může?
Ve Windows otevři Správce úloh (Ctrl + Shift + Esc) a seřaď procesy podle sloupce CPU nebo Paměť. V Linuxu spusť top nebo htop. Proces, který bere skoro 100 % CPU, můžeš ukončit (Windows: Ukončit úlohu; Linux: kill PID).
✗Čtyřjádrový procesor zrychlí každý program čtyřikrát.
✓Víc jader pomůže hlavně, když běží víc procesů, nebo když program umí práci rozdělit do víc vláken.

Program s jediným vláknem běží v jednu chvíli jen na jednom jádře. Ostatní jádra mu nepomohou.

Proces je spuštěný program s vlastním PID a pamětí, vlákna jsou jeho části sdílející paměť. Plánovač jádra střídá procesy na procesoru tak rychle, že se zdá, že běží současně.

Algoritmy plánování

O čem to je

V nemocniční čekárně se nechodí jen podle pořadí příchodu: člověk s infarktem jde hned. Plánovač v jádře řeší stejnou otázku: koho pustit na procesor dřív. Různá pravidla dávají různé výsledky a ve zkouškách se na ně často počítá.

Nové pojmy

ProcesSpuštěný program, který má v paměti svůj kód, data a stav.
VláknoJednotka běhu uvnitř procesu. Vlákna jednoho procesu sdílejí paměť, procesy mají každý svou.
PlánovačČást jádra OS, která přiděluje procesor připraveným procesům.
Doba čekáníJak dlouho proces strávil ve frontě, než doběhl, bez času, kdy sám běžel. Čím menší průměr, tím lépe.
Časové kvantumPevně dlouhý úsek času, který proces dostane, než se vystřídá další.10 ms

Základní algoritmy

AlgoritmusPravidloVlastnost
FCFS (kdo dřív přijde)podle pořadí příchodujednoduchý, krátké procesy čekají za dlouhými
SJF (nejkratší první)nejdřív nejkratší úlohanejmenší průměrné čekání, ale délku nutno znát předem
Round Robindokola, každý dostane kvantumspravedlivý, vhodný pro interaktivní systémy
prioritnínejdřív nejvyšší prioritahrozí „vyhladovění“ procesů s nízkou prioritou

Výpočet průměrné doby čekání

Seřaď procesy podle pravidla algoritmu.
Nakresli časovou osu: kdy který proces začne a skončí.
Doba čekání = čas začátku (u FCFS a SJF, když všichni přijdou v čase 0).
Sečti doby čekání a vyděl počtem procesů.
Procesy přijdou v čase 0 v pořadí P1 (8 ms), P2 (4 ms), P3 (2 ms). Spočítej průměrné čekání u FCFS.
Pořadí P1, P2, P3. P1 čeká 0, P2 čeká 8, P3 čeká 8 + 4 = 12. Průměr (0 + 8 + 12) / 3 = ≈ 6,67 ms.
Stejné procesy plánuj podle SJF.
Od nejkratšího: P3 (2), P2 (4), P1 (8). P3 čeká 0, P2 čeká 2, P1 čeká 2 + 4 = 6. Průměr (0 + 2 + 6) / 3 = ≈ 2,67 ms. SJF výrazně zkrátil čekání.

Proces a vlákno v porovnání

ProcesVlákno
paměťvlastní, oddělenásdílená s ostatními vlákny procesu
vytvoření a přepnutínáročnějšírychlejší
pádneohrozí jiné procesymůže shodit celý proces
Uváznutí (deadlock)Dva procesy čekají jeden na druhého, každý drží něco, co potřebuje ten druhý. Ani jeden nepokročí.Proces A drží tiskárnu a chce skener, proces B drží skener a chce tiskárnu.
  • FCFS – kdo dřív přijde, ten dřív mele
  • SJF – nejkratší úloha první
  • Round Robin – dokola po časových kvantech
  • Deadlock – vzájemné čekání, nikdo nepokročí
  • Přepnutí kontextu – uložení stavu jednoho procesu a načtení druhého
✗Doba čekání procesu je čas, kdy skončil.
✓Doba čekání = čas dokončení − příchod − doba vlastního běhu.

Do čekání se nepočítá čas, kdy proces sám běžel. U FCFS se vším v čase 0 je čekání rovno času, kdy proces začal.

Plánovač vybírá proces podle algoritmu: FCFS (pořadí), SJF (nejkratší, nejmenší čekání), Round Robin (kvanta dokola), prioritní. Vlákna sdílejí paměť procesu. Deadlock = vzájemné čekání.