Proces je identifikovatelná abstrakce kolekce vzájemně souvisejících systémových zdrojů založených na samostatném a nezávislém virtuálním adresovém prostoru, v jehož kontextu je organizováno provádění vláken. Definice ISO 9000:2000 definuje proces jako soubor vzájemně souvisejících a vzájemně se ovlivňujících činností, které transformují vstupy na výstupy.
Samotný počítačový program je pouze pasivní sled instrukcí. Zatímco proces je přímým prováděním těchto pokynů.
Proces je také běžící program a všechny jeho prvky: adresní prostor , globální proměnné , registry , zásobník , otevřené soubory a tak dále.
Typicky je proces ve výpočetním systému reprezentován (rovněž řečeno, že „vlastní“) následující zdroje:
Operační systém ukládá většinu informací o procesech do tabulky procesů.
V operačních systémech, které podporují vlákna (vlákna), vlákna také vlastní své vlastní prostředky. Obvykle se jedná pouze o stav procesoru, i když vlákna mohou využívat i jiné zdroje.
Aby se snížila pravděpodobnost vzájemného rušení procesů a pravděpodobnost selhání systému (například uváznutí nebo mlácení ), poskytuje operační systém izolaci procesů a přiděluje zdroje, které potřebují. Operační systém také poskytuje mechanismy pro komunikaci procesů bezpečným a předvídatelným způsobem.
Tato část pojednává o paměťové reprezentaci procesu v operačním systému Linux a architektuře x86 . Taková reprezentace se jen málo liší od mnoha jiných multitaskingových operačních systémů a architektur. Například v amd64 , nástupci x86, roste zásobník volání shora dolů stejným způsobem, ale velikost adresního prostoru se zvětší na 2 48 bajtů. [2]
Linux používá model ploché paměti , a proto je pro každý proces v této architektuře k dispozici 232 bajtů paměti. Veškerá virtuální paměť je rozdělena na uživatelský prostor a prostor jádra . Prostor jádra zabírá jeden gigabajt paměti, počínaje nejvyšší adresou. Zbytek prostoru, tedy tři gigabajty, je vyhrazen pro uživatelský prostor.
Diagram napravo ukazuje reprezentaci libovolného procesu v uživatelském prostoru. Prostor jádra je stejný pro všechny procesy, protože v operačním systému může existovat pouze jedna instance jádra. Po spuštění programu se do RAM naimportují instrukce procesoru (strojový kód) a inicializovaná data. Zároveň se do vyšších adres importují spouštěcí argumenty a proměnné prostředí.
Inicializovaná datová oblast ukládá data pouze pro čtení. Mohou to být například řetězcové literály.
Neinicializovaná datová oblast obvykle ukládá globální proměnné.
Halda se používá k alokaci paměti za běhu programu. V Linuxu existuje systémové volání pro toto mmap.
Oblast zásobníku se používá k volání procedur .
Důležitým detailem je také přítomnost náhodného odsazení mezi zásobníkem a horní oblastí, stejně jako mezi inicializovanou datovou oblastí a haldou. To se provádí z bezpečnostních důvodů, jako je zabránění ukládání dalších funkcí.
Knihovny dynamických odkazů a mapování souborů jsou umístěny mezi zásobníkem a haldou.
V multitaskingových operačních systémech bylo možné pracovat současně s několika procesy. Preemptivní multitaskingové operační systémy umožnily dosáhnout pocitu spouštění několika procesů současně. To vyžadovalo řízení několika procesů.
Unix je jedním z prvních multitaskingových operačních systémů. Každý proces má jedinečné číselné PID. Procesy v něm mají stromovou hierarchii, kde kořenem je init proces s PID 1. Nový proces lze vytvořit pomocí systémového volání fork, bude to přesná kopie nadřazeného procesu . Každý proces kromě init má vždy nadřazený proces (atribut PPID ( Parent PID )); procesy, jejichž rodič byl ukončen, se staly podřízenými procesy init.
Procesy jsou také spojeny do skupin . setpgidSystém volá a je zodpovědný za správu identifikátoru skupiny (PGID) getpgid. PGID se rovná PID vedoucího skupiny. Podřízený proces zdědí skupinu od rodiče. Skupiny se používají ke správě úloh .
Skupiny procesů jsou spojeny do relací . Systémové volání je zodpovědné za vytvoření nové relace setsid. Procesy ze stejné skupiny nemohou patřit do různých relací. Vedoucí skupiny se proto nemůže stát vedoucím relace: po vytvoření relace se podřízený proces automaticky stane vedoucím relace a vedoucím nové skupiny. Relace se používají ke sledování všech procesů spuštěných po přihlášení uživatele.
Každá relace může mít maximálně jeden ovládací terminál . Emulátor terminálu má jako podřízený proces příkazový shell (nejčastěji bash nebo sh) , který se před spuštěním stane vedoucím nové relace a nastaví si řídící terminál.
Nejjednodušší operační systém nepotřebuje vytvářet nové procesy, protože v nich běží jeden program, když je zařízení zapnuté. Ve složitějších systémech se musí vytvářet nové procesy. Obvykle jsou vytvořeny:
Proces může být kromě hlavního běžícího stavu v jiných stavech, jako je čekání.
Proces Linuxu může být v jednom z následujících stavů:
Minimálně 2 stupně dokončení:
Důvody pro ukončení procesu:
operačních systémů | Aspekty|||||
---|---|---|---|---|---|
| |||||
Typy |
| ||||
Jádro |
| ||||
Řízení procesů |
| ||||
Správa a adresování paměti |
| ||||
Nástroje pro načítání a inicializaci | |||||
skořápka | |||||
jiný | |||||
Kategorie Wikimedia Commons Wikibooks Wikibooks |