Komunikace mezi procesy

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
m (Přidán odkaz na Nástroje pro práci s procesy.)
(Doplnění a rozšíření textu)
 
Řádka 1: Řádka 1:
 
[[Category:VSE]][[Category:Informatika]][[Category:OSY]][[Category:Procesy]]
 
[[Category:VSE]][[Category:Informatika]][[Category:OSY]][[Category:Procesy]]
  
Každý proces má pocit, že je jediným běžícím procesem. Procesy se navzájem nevidí. Jak si tedy mohou vyměňovat data?
+
* Při programování úlohy postupujeme, jako by náš program byl jediný, který v počítači běží.
 +
* Procesy se musí mít zcela oddělenou paměť, aby nemohlo omylem či záměrně dojít k poškození dat nebo dokonce kódu procesu jiným procesem (například malwarem, nebo prostě chybou v jiném procesu).
 +
* Jak si ale mohou procesy vyměňovat data, pokud je to potřeba?
  
 
<div class="Poznamka">
 
<div class="Poznamka">
Vlákna stejného procesu mají společný datový segment (tedy mají přiřazenu stejnou paměť). Jinak má ale každý proces svůj virtuální paměťový prostor (viz heslo [[Přístup procesů do paměti]]).
+
; Poznámka
 +
[[Proces#Vl.C3.A1kno|Vlákna]] jednoho procesu mají společný datový segment &mdash; tedy sdílí společnou paměť. Sdílení dat mezi ''vlákny'' tedy problém není, stačí použít společné proměnné.
 +
 
 +
Proces ale svůj virtuální paměťový prostor a&nbsp;ostatní procesy jeho proměnné nevidí (viz heslo [[Přístup procesů do paměti]]).
 
</div>
 
</div>
 +
 +
* Dále uvedeme způsoby, jak procesy mohou navzájem předávat data, když je to potřeba.
 +
  
 
== Soubory ==
 
== Soubory ==
* Diskový prostor je pro všechny procesy společný, mohou tedy předávat data prostřednictvím souborů.
+
* Diskový prostor je pro všechny procesy společný, jeden proces tedy může zapsat data do souboru a&nbsp;druhý proces je z&nbsp;téhož souboru může přečíst.
 +
 
 +
 
 
== Roura (pipe) ==
 
== Roura (pipe) ==
* „Roura“ je speciální virtuální „soubor“ určený jen pro komunikaci mezi procesy. (Viz heslo [[Vstup a výstup procesů, přesměrování]])
+
* ''Rouru'' znáte z&nbsp;příkazového řádku &mdash; je to znak <code>|</code>, který píšete mezi dva příkazy.  
* Pokud zpracovávající proces nestíhá, je generující proces pozastaven (BLOCKED).
+
* (Viz [[Vstup a výstup procesů, přesměrování]].)
 +
* Například:
 +
ls | sort | head
 +
* ''Roura'' je ve skutečnosti speciální virtuální „soubor“ určený jen pro komunikaci mezi procesy.
 +
* Pokud ''zpracovávající'' proces vpravo od znaku <code>|</code> nestíhá zpracovávat data, je generující proces (ten vlevo od znaku <code>|</code>) pozastaven (''blocked'' &mdash; v&nbsp;rámci [[Životní cyklus procesu|našeho rozdělení stavů je to stav ''Sleep/wait'']]).
 +
 
  
 
== Síťové rozhraní (socket) ==
 
== Síťové rozhraní (socket) ==
* Procesy mohou komunikovat prostřednictvím místní smyčky (localhost, 127.0.0.1).
+
* Procesy mohou komunikovat prostřednictvím sítě.
* Využíváno například u grafického rozhraní.
+
* I&nbsp;když běží na jednom počítači, mohou použít jako cílovou IP adresu „místní smyčku“ (localhost, 127.0.0.1).
* Výhoda: relativně snadný převod na síťovou aplikaci.
+
* Využívá se například u&nbsp;linuxových grafických rozhraní.
 +
* Výhoda: relativně snadný převod na síťovou aplikaci, pokud je to v&nbsp;budoucnu potřeba.
 +
 
 +
 
 
== Proměnné prostředí ==
 
== Proměnné prostředí ==
* Proměnné prostředí se dědí z rodičovských procesů na dceřiné.
+
* Proměnné prostředí (''environment variables'') se kopírují z&nbsp;rodičovských procesů na dceřiné.
* Tímto způsobem se často předává informace o nastavení cest k významným adresářům (pro komunikaci prostřednictvím souborů).
+
* Jedná se například o&nbsp;proměnnou <code>PATH</code>, viz [[Proměnné prostředí]].
* Viz stránka [[Proměnné prostředí]].
+
* Proces A tedy může nastavit proměnnou prostředí a&nbsp;pokud A později spustí další (dceřinný) proces B, může si proces B hodnotu proměnné přečíst.
 +
* Tímto způsobem se často předává informace o&nbsp;nastavení cest k&nbsp;významným adresářům. (Což lze poté využít pro komunikaci prostřednictvím souborů).
 +
 
 +
 
 
== Signály ==
 
== Signály ==
* Speciální mechanismus pro komunikaci mezi operačním systémem a procesy navzájem.
+
* Speciální mechanismus pro komunikaci mezi operačním systémem a&nbsp;procesy navzájem.
* Může posílat uživatel prostřednictvím příkazu <code>kill</code> (viz také [[Nástroje pro práci s procesy]]).
+
* Signály může posílat i&nbsp;uživatel ručně prostřednictvím příkazu <code>kill</code> (viz také [[Nástroje pro práci s procesy]]).
 +
 
 
=== Příklady signálů ===
 
=== Příklady signálů ===
 
; TERM (TERMinate)
 
; TERM (TERMinate)
*požádá aplikaci o ukončení
+
* požádá aplikaci o ukončení
*Vysílá „zavírací tlačítko“.
+
* Tento signál vyšle i&nbsp;„zavírací tlačítko“ v&nbsp;pravém horním rohu okna aplikace v&nbsp;GUI.
 
; INT (INTerrupt)
 
; INT (INTerrupt)
*Násilné ukončení.
+
* Násilné ukončení.
*Kombinace „Ctrl-C“.
+
* Odpovídá stisku kombinace „Ctrl-C“ v&nbsp;příkazovém řádku Linuxu. (Pozor, nepleťte s&nbsp;kopírováním do schránky, což je význam Ctrl-C v&nbsp;grafickém prostředí.)
 
; KILL
 
; KILL
*aplikace je „zabita“
+
* Aplikace je „zabita“ &mdash; ukončena bez možnosti zareagovat na signál.
*jediný signál, který se neposílá procesu, zpracuje přímo operační systém.
+
* Tento signál se neposílá procesu, zpracuje přímo operační systém &mdash; zruší proces a&nbsp;uvolní jeho paměť. Může ale dojít ke ztrátě dat, pokud proces právě pracoval s&nbsp;diskem či posílal data jinému procesu.
 
; NOHUP (NO HangUP)
 
; NOHUP (NO HangUP)
 
* Proces neskončí při ukončení rodičovského procesu.
 
* Proces neskončí při ukončení rodičovského procesu.
 +
 +
 
== Adresář <code>/proc</code> ==
 
== Adresář <code>/proc</code> ==
* zjištění informací o procesu.
+
* Jedná se o&nbsp;speciální virtuální adresář, kde lze zjistit informace o&nbsp;běžících procesech.
 +
* Viz [[Adresář /proc]].
 +
 
 +
 
 
== Schránka operačního systému ==
 
== Schránka operačního systému ==
 +
* Schránku znáte z&nbsp;grafického prostředí.
 +
* Kombinace kláves <tt>Ctrl-C</tt> umístí data v&nbsp;rámci jednoho procesu do „schránky“, ve druhém procesu pak kombinace <tt>Ctrl-V</tt> data ze schránky vyzvedne.
  
  
 
== Související stránky ==
 
== Související stránky ==
* [[Nástroje pro práci s procesy]], [[Přístup procesů do paměti]]
+
* [[Nástroje pro práci s procesy]], [[Přístup procesů do paměti]], [[Adresář /proc]], [[Nástroje pro práci s procesy]]

Aktuální verze z 6. 10. 2020, 07:35


Poznámka

Vlákna jednoho procesu mají společný datový segment — tedy sdílí společnou paměť. Sdílení dat mezi vlákny tedy problém není, stačí použít společné proměnné.

Proces ale má svůj virtuální paměťový prostor a ostatní procesy jeho proměnné nevidí (viz heslo Přístup procesů do paměti).


Obsah

Soubory


Roura (pipe)

ls | sort | head


Síťové rozhraní (socket)


Proměnné prostředí


Signály

Příklady signálů

TERM (TERMinate)
INT (INTerrupt)
KILL
NOHUP (NO HangUP)


Adresář /proc


Schránka operačního systému


Související stránky

Osobní nástroje
Jmenné prostory
Varianty
Akce
Výuka
Navigace
Nástroje