Lehký proces

Z Wikipedie, otevřené encyklopedie

Lehké procesy (anglicky light-weight processes, LWP) jsou v operačních systémech prostředkem pro multitasking. Termín je používán v tradičním významu v UNIX System V a v OS Solaris, kde LWP běží v uživatelském prostoru nad jedním jaderným vláknem a sdílí jeho adresní prostor a systémové prostředky s jinými LWP stejného procesu. Nad jedním nebo více LWP může běžet několik vláken v uživatelském prostoru spravovaných vláknovou knihovnou, díky čemuž lze multitasking provozovat v uživatelském prostoru, což může přinášet zlepšení výkonnosti.[1]

V některých operačních systémech zvláštní LWP vrstva mezi jadernými vlákny a uživatelskými vlákny neexistuje. To znamená, že uživatelská vlákna jsou implementována přímo nad jadernými vlákny. Pak se termín „lehký proces“ obvykle používá pro jaderná vlákna a termín „vlákna“ pro uživatelská vlákna.[2] Na Linuxu jsou uživatelská vlákna implementována tak, že je umožněno, aby určité procesy sdílely prostředky, díky čemuž se tyto procesy někdy nazývají „lehké procesy“.[3][4] Podobně v SunOS od verze 4 (před Solarisem) se název „lehké procesy“ používá pro uživatelská vlákna.[1]

Jaderná vlákna[editovat | editovat zdroj]

Jaderná vlákna jsou plně pod kontrolou jádra operačního systému. Nemusí patřit nějakému procesu; jádro je může vytvářet, když potřebuje provést určitou úlohu. Jaderná vlákna nemohou běžet v uživatelském režimu. Lehké procesy (v systémech, kde jsou zvláštní vrstvou) se vážou na jaderná vlákna a poskytují kontext na uživatelské úrovni, který zahrnuje odkaz na sdílené prostředky procesu, kterému LWP patří. Při pozastavení LWP, jeho registry na uživatelské úrovni je třeba uložit, aby mohl později pokračovat, a podkladové jaderné vlákno musí také uložit své registry na úrovni jádra.

Výkonnost[editovat | editovat zdroj]

vytvoření LWP je pomalejší a náročnější na prostředky než vytvoření uživatelského vlákna. Při vytváření LWP systémovým voláním musí být nejprve vytvořeno odpovídající jaderné vlákno, k čemuž je třeba přepnout do režimu jádra. Toto přepnutí režimu typicky zahrnuje zkopírování parametrů mezi jádrem a uživatelským prostorem, jádro také může potřebovat zvláštní kroky pro kontrolu parametrů. Přepnutí kontextu z jednoho LWP na jiný znamená, že původní LWP musí uložit registry a vstoupit do režimu jádra pro uložení registrů jaderného vlákna; nový LWP musí obnovit jak registry jádra tak uživatelské registry.[1]

Z tohoto důvodu některé knihovny uživatelských vláken umožňují implementovat několik uživatelských vláken nad LWP. Uživatelská vlákna je možné vytvářet, rušit, synchronizovat a přepínat plně v uživatelském prostoru bez volání systému a přepnutím do režimu jádra. Díky tomu je čas vytvoření vlákna a přepnutí kontextu významně kratší než u jaderných vláken.[1] Je však obtížné implementovat plánovač vláken na uživatelské úrovni, který dobře spolupracuje s jádrem.

Aktivace plánovače[editovat | editovat zdroj]

Zatímco uživatelská vláknová knihovna bude plánovat uživatelská vlákna, jádro bude plánovat podkladové lehké procesy. Bez koordinace mezi jádrem a vláknovou knihovnou může jádro dělat neoptimální plánovací rozhodnutí. Také může docházet k deadlocku, když se uživatelská vlákna distribuovaná mezi více lehkých procesů snaží získat stejné prostředky, které používá jiné uživatelské vlákno, které aktuálně neběží.[1]

Jedním řešením tohoto problému je aktivace plánovače. Jedná se o způsob spolupráce jádra a vláknové knihovny. Jádro oznamuje plánovači vláknové knihovny určité události (např. když se chystá zablokovat vlákno) a vláknová knihovna může rozhodnout, jakou akci má provést. Notifikace z jádra se nazývá „upcall“.

Knihovna na uživatelské úrovni nemá žádnou kontrolu podkladových mechanismů, pouze přijímá notifikace z jádra a plánuje uživatelská vlákna na dostupné lehké procesy, ne procesory. Plánovač jádra pak rozhoduje, jak plánovat lehké procesy na procesory. Díky tomu může vláknová knihovna vnímat lehké procesy jako „virtuální procesory“.[5]

Podporující operační systémy[editovat | editovat zdroj]

Solaris implementoval zvláštní LWP vrstvu od verze 2.2. Před verzí 9 Solaris umožňoval mnoho-to-mnoho zobrazení mezi lehkými procesy a uživatelskými vlákny. Toto řešení však bylo opuštěno kvůli složitosti, kterou přináší, a díky výkonnostním vylepšení plánovače v jádře.[1][6]

UNIX System V a z něho odvozené systémy jako IRIX, SCO OpenServer, HP-UX a AIX umožňují zobrazení m:n mezi uživatelskými vlákny a lehkými procesy.[5][7]

NetBSD 5.0 zavedl nový, škálovatelný, vláknový model 1:1. Každé uživatelské vlákno (pthread) má jaderné vlákno nazývané lehký proces (LWP). V jádře jsou procesy i vlákna implementovány jako lehké procesy, a jsou plánovačem stejně obsluhovány.[8]

Implementace[editovat | editovat zdroj]

Odkazy[editovat | editovat zdroj]

Reference[editovat | editovat zdroj]

V tomto článku byl použit překlad textu z článku Light-weight process na anglické Wikipedii.

  1. a b c d e f VAHALIA, Uresh, 1996. UNIX Internals - The New Frontiers. [s.l.]: Prentice-Hall Inc.. Dostupné online. ISBN 0-13-101908-2. Kapitola Threads and Lightweight Processes. 
  2. , 2004. IBM AIX Compilers [online]. IBM, 2004 [cit. 2010-01-24]. Na AIX termín „odlehčený proces“ obvykle znamená jaderné vlákno.. Dostupné v archivu pořízeném dne 2012-07-14. 
  3. BOVET, Daniel P.; CESATI, Marco, 2005. Understanding the Linux Kernel. 3. vyd. [s.l.]: O'Reilly Media. Kapitola 3.1. Processes, Lightweight Processes, and Threads. 
  4. WALTON, Sean, 1996. Linux Threads Frequently Asked Questions (FAQ) [online]. 1996 [cit. 2010-01-24]. Dostupné online. 
  5. a b SILBERSCHATZ; GALVIN; GAGNE, 2004. Operating System Concepts with Java. Sixth. vyd. [s.l.]: John Wiley & Sons, Inc.. Kapitola Chapter 5 - Threads. 
  6. , 2002. Multithreading in the SolarisTM Operating Environment [online]. Sun Microsystems, 2002 [cit. 2010-01-24]. Dostupné online. 
  7. , 2009. IBM AIX 6.1 - Thread tuning [online]. IBM, 2009 [cit. 2010-01-24]. Dostupné online. 
  8. , 2009. Thread scheduling and related interfaces in NetBSD 5.0 [online]. The NetBSD Project, 2009 [cit. 2022-12-20]. Dostupné online. 

Související články[editovat | editovat zdroj]

Externí odkazy[editovat | editovat zdroj]