Proces
Z MiS
(Rozdíly mezi verzemi)
m (→Otázky: Oprava zduplikovaného slova.) |
(→Otázky: Doplnění otázky: počet běžících aplikací.) |
||
(Není zobrazena 1 mezilehlá verze od 1 uživatele.) | |||
Řádka 29: | Řádka 29: | ||
== Otázky == | == Otázky == | ||
+ | # Kolik procesů právě běží ve vašem počítači? Jak to zjistíte? | ||
+ | # Kolik procesů může běžet v jednom okamžiku? Jak to zjistíte? | ||
+ | # Jak je možné, že můžu na počítači spustit několik desítek zároveň běžících aplikací? | ||
# Pokud můžou vlákna sdílet proměnné, není to narušení pravidla, že procesy paměť sdílet nemůžou? | # Pokud můžou vlákna sdílet proměnné, není to narušení pravidla, že procesy paměť sdílet nemůžou? | ||
#: Kdybych chtěl sdílet paměť mezi procesy, můžu v každém procesu vytvořit vlákno a tyto dvě vlákna sdílet paměť můžou. | #: Kdybych chtěl sdílet paměť mezi procesy, můžu v každém procesu vytvořit vlákno a tyto dvě vlákna sdílet paměť můžou. |
Aktuální verze z 18. 9. 2023, 10:35
Obsah |
Co je proces?
- Proces v operačním systému reprezentuje stav právě běžícího programu.
- Proces vzniká spuštěním programu a končí v okamžiku, kdy se dokončí všechny instrukce.
- Pokud spustíme jeden program vícekrát, vznikne více procesů. Každá spuštěná instance programu má jiný aktuální stav.
- Každý proces se chová, jako by byl v počítači sám. O ostatních procesech neví a komunikuje s nimi jen přesně specifikovanými prostředky viz Komunikace mezi procesy.
- Procesy běží střídavě. Střídání ale řídí jádro OS (kernel) a proces o střídání neví a nemůže ho ovlivnit.
Jaké data zahrnujeme?
- Identifikátor procesu (PID) číslo, pod kterým OS s procesem pracuje.
- UID a GID uživatele a skupiny, s jejímiž právy proces běží.
- Kód programu, načtený v paměti.
- Instrukce, které se mají provést. Načteme je z binárního souboru programu (na Windows ze souboru
.exe
)
- Instrukce, které se mají provést. Načteme je z binárního souboru programu (na Windows ze souboru
- Data, uložená v paměti
- Aktuální obsah proměnných, které si program vytváří.
- Odkaz na právě prováděnou instrukci v paměti
- Aktuální obsah registrů
Vlákno
- Procesy navzájem nemohou sdílet proměnné (každý má svou přidělenou paměť). To je ale někdy omezující.
- Proces tedy můžeme rozdělit do více vláken (thread), které běží také nezávisle a mají svůj stav, ale sdílí spolu obsah proměnných v paměti.
- Rozdělení procesů na více vláken může zefektivnit výpočet:
- Pokud čekáme na data z disku, můžeme například provádět další výpočet, pokud k němu data nepotřebujeme.
- Každé vlákno může běžet na jiném jádru procesoru.
Otázky
- Kolik procesů právě běží ve vašem počítači? Jak to zjistíte?
- Kolik procesů může běžet v jednom okamžiku? Jak to zjistíte?
- Jak je možné, že můžu na počítači spustit několik desítek zároveň běžících aplikací?
- Pokud můžou vlákna sdílet proměnné, není to narušení pravidla, že procesy paměť sdílet nemůžou?
- Kdybych chtěl sdílet paměť mezi procesy, můžu v každém procesu vytvořit vlákno a tyto dvě vlákna sdílet paměť můžou.
- V čem je tato úvaha nesprávná?
- Jak může rozdělení procesu na více vláken zrychlit výpočet, když se všechny instrukce stejně nakonec musí provést v jednom procesoru.
- Analogie: Mám jednoho pracovníka (procesor) a 1000 cihel, které musí přenosit (instrukcí).
- Pracovník přece bude mít stejné množství práce bez ohledu na to, jestli mu to napíši jako jeden úkol přenést 1000 cihel (jedno vlákno), nebo jako čtyři úkoly přenést 250 cihel (čtyři vlákna).
- V čem je tato úvaha nesprávná?