Lehké procesy () 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.
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. 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“. Podobně v SunOS od verze 4 (před Solarisem) se název „lehké procesy“ používá pro uživatelská vlákna.
Jaderná vlákna 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 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.
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. 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 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ěží.
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á .
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“.
Podporující operační systémy 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.
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.
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.
Implementace Parallel Extensions (Microsoft) GNU Portable Threads Green threads (Java) Light Weight Kernel Threads
Odkazy
Reference
Související články Fiber (matematická informatika) Úloha (výpočetní technika) Futures and promises Pthreads – posixová vlákna Fork (systémové volání)#Clone Meziprocesová komunikace (IPC)
Externí odkazy "The lightweight process pool" by Jim Mauro "Solaris processes" by Scott Cromar Thread models (from HP-UX Process Management: White Paper)
Kategorie:Procesy (výpočetní technika) Kategorie:Plánování (výpočetní technika)