Proces
Z MiS
(Rozdíly mezi verzemi)
(Přidáno UID a GID.) |
(→Otázky: Doplnění otázky: počet běžících aplikací.) |
||
(Nejsou zobrazeny 3 mezilehlé verze od 1 uživatele.) | |||
Řádka 23: | Řádka 23: | ||
* Procesy navzájem nemohou sdílet proměnné (každý má svou přidělenou paměť). To je ale někdy omezující. | * 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. | * 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á? | ||
== Související stránky == | == Související stránky == | ||
* [[Komunikace mezi procesy]] | * [[Komunikace mezi procesy]] |
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á?