Naučná ztráta času

0. Úvod

Již po vynalezení prvních počítačových systémů napadalo inženýry po celém světě, že by mohli systémy fungovat efektivněji a rychleji, pokud by byly schopny zpracovávat několik ůkolů zároveň (tzv. „multitasking“). Byl to dobrý nápad, ale jeho provedení bylo v té době velice těžké a namáhavé, proto se projevuje teprve po vytvoření základních operačních systémů. Linux je systém, který zjednodušuje používání počítačů, proto nejen podporuje multitasking, ale také zavádí abstraktní koncepty, díky kterým je můžou programátoři jednoduše vylepšovat své programy nezávisle na fyzickém hardwaru.

1. Procesy

Proces je základní koncept multitaskingu, jeho atributy rozhodují o přiřazování výpočtení kapacity. Odpovídá právě jednomu úkolu, jenž se vykonává.

1.1 Atributy procesů

Každý proces má několik atributů jenž rozhodují jeho chování, nové procesy své atributy dědí z rodičovského (parent) procesu.

Mezi základní atributy patří:

  • PID (Process IDentity) – unikátní identita procesu začínají od 1, je garantováno že na se na běžícím systémů nemůže stejná identita objevit několikrát
  • UID, GID (User IDentity, Group IDentity) a dodatečné skupiny – identity uživatele a skupiny spolu s dodatečnými skupinami, určují úroveň oprávnění procesu při přístupu do souborových systémů
  • capabilities – dále upřesňují s jakýmy oprávněními proces běží (viz. bod 1.2)
  • niceness a priority – zděluje plánovači úloh s jakou prioritou se má proces vykonávat, procesy z nižší hodnotou niceness mají přednost

1.2 Schopnosti procesů

V tradičních UNIX-ových systémech se rozlišují dva druhy procesů – procesy privilegované (kde PID=0, neboli procesy běžíći pod uživatelem root či superuser) a procesy neprivilegované.
Privilegované procesy měly všechny práva, zatím co práva procesů neprívilegovaných vycházela pouze z identit uživatele, indentit skupiny a dodatečných skupin.

Počínajíc Linuxem 2.2 se práva procesu nově řídí pomocí schopností (capabilities).
Schopnosti umožňují nejen přidávat neprivilegovaným procesům vybraná práva, ale také odebírat práva privilegovaný procesům (Pozor – privilegované procesy s pravým UID=0 mají můžou stále mít schopnost měnit svá práva pokud nedojde k nasazení kernelového bezpečnostního modulu, jako např. AppArmor).

Kvůli zachování kompatibility s předchozími systémy, začínají privilegované procesy spuštěny obvyklým způsobem se všemi schopnostmi povolenými, toto ovšem neplatí pokud se proces spustí pomocí SUID=0 a pravým UID!=0, poté se proces řídí podle schopností ze spustitelného souboru.

2. Vlákna

Vlákna jsou součástí procesů, sdílý se svým rodičovským procesem paměť, soubory, sockety, atributy a jiné. Každé vlákno má vlastní identitu (TIDThread IDentity).

2.1 Hlavní vlákno

Každý proces začíná s jedním vláknem – hlavním vláknem, kde TID=PID.
Hlavní vlákno určuje výsledný stav procesu.

3. Skupiny procesů

Skupiny procesů se používají k rozdělování signálů mezi procesy. Každá skupina procesů má vlastní identitu (PGIDProcess Group IDentity).
Pokud je zaslán signál na identitu skupiny, dostávají jej všechny procesy v té skupině.

3.1 Leader skupiny procesů

Každá skupina začíná s vedoucím procesem – leaderem. Skupiny nemusí nutně mít vedoucí proces.
Při ukončení jakéhokoliv procesu ve skupině dostává vedoucí proces signál ukončení dítěte (SIGCHLD).

3.2 Popřední a pozadní skupiny

Skupiny mohou být buď na popředí nebo na pozadí.

Skupiny, které jsou na popředí zapisují svůj výstup a čtou svůj vstup z ovládajícího terminálu sezení (viz. bod 4.2).
Skupiny, které jsou na pozadí stále vykonávají své úlohy, ale jejich výstup není zapisován na terminál a nepříjímají žádný vstup z terminálu, také k nim nejsou směřovány signály vyvolané klávesnicí (např. SIGINTpřerušení).

4. Sezení

Sezení jsou celky stvořené ze skupin procesů, jsou zodpovědny za správu úloh (job control) na terminálech uživatelů. Obvykle vznikají při přihlašení do textového rozhraní nebo při otevření grafického terminálu. Každé sezení má vlastní identitu (SIDSession IDentity).

4.1 Leader sezení

Každé sezení s vedoucím procesem – leaderem.

Vedoucí proces rozhoduje, která skupina procesů je na popředí a je zodpovědný za rozdělování signálů.
Pokud sezení nemá vedoucí proces, přebírá zodpovědnost za rozdělování signálů skupina na popředí.

4.2 Ovládající terminál sezení

Každá skupina má svůj ovládající terminál, který přijímá výstupy a odesílá vstupy do skupiny na popředí.

Ovládající terminál je buď automaticky nastaven na první terminálové zařízení otevřené leaderem sezení, nebo manuálně pomocí systémové volání ioctl s operací TIOCSCTTY.

Zdroje: