GNU/Linux >> Znalost Linux >  >> Linux

Jsou vlákna jádra Linuxu skutečně procesy jádra?

Dokumentace může být pěkně matoucí, takže zde je „skutečný " Model systému Linux:

  • v linuxovém jádře se něco, co lze spouštět (a plánovat), nazývá „proces“,
  • každý proces má systémově jedinečné ID procesu (PID) a ID skupiny vláken (TGID),
  • normální proces má PID=TGID a žádný jiný proces tuto hodnotu TGID nesdílí,
  • proces „vláknový“ je proces, jehož hodnotu TGID sdílejí jiné procesy,
  • několik procesů sdílejících stejné TGID také sdílí přinejmenším stejný paměťový prostor a obslužné programy signálů (někdy i více),
  • Pokud má „vláknový“ proces PID=TGID, může být nazýván „hlavním vláknem“,
  • volání getpid() z jakéhokoli procesu vrátí své TGID (=PID "hlavního vlákna"),
  • volání gettid() z jakéhokoli procesu vrátí své PID (!),
  • pomocí clone(2) lze vytvořit jakýkoli druh procesu systémové volání,
  • o tom, co je sdíleno mezi procesy, se rozhoduje předáním konkrétních příznaků clone(2) ,
  • číselné názvy složek, které můžete uvést pomocí ls /proc jako /proc/NUMBER jsou TGID,
  • číselné názvy složek v /proc/TGID/task jako /proc/TGID/task/NUMBER jsou PID,
  • i když nevidíte všechny existující PID s ls /proc , stále můžete udělat cd /proc/any_PID .

Závěr :z hlediska jádra existují pouze procesy, z nichž každý má své vlastní jedinečné PID, a takzvané vlákno je jen jiný druh procesu (sdílení alespoň stejného paměťového prostoru a obsluhy signálů s jedním nebo několika dalšími -s).

Poznámka: implementace konceptu "vlákna" v Linuxu vedla ke zmatení slovní zásoby, a pokud getpid() lže vám nedělá to, co jste si mysleli, je to proto, že jeho chování odpovídá kompatibilitě POSIX (vlákna mají sdílet společné PID).


V Linuxu není absolutně žádný rozdíl mezi vláknem a procesem. Pokud se podíváte na clone(2), uvidíte sadu příznaků, které určují, co je sdíleno a co není sdíleno mezi vlákny.

Klasické procesy jsou jen vlákna, která nic nesdílejí; můžete sdílet, jaké komponenty chcete pod Linuxem.

To není případ jiných implementací OS, kde jsou mnohem podstatnější rozdíly.


Vlákna jsou procesy pod Linuxem. Jsou vytvořeny pomocí clone systémové volání, které vrací ID procesu, které lze poslat signálem přes kill systémové volání, stejně jako proces. Procesy vláken jsou viditelné v ps výstup. clone volání je předáno příznaky, které určují, jak velká část prostředí nadřazeného procesu je sdílena s procesem vlákna.


Linux
  1. UNIX / Linux:3 způsoby odesílání signálu do procesů

  2. Úvod do Linuxových vláken – část I

  3. UNIX / Linux Procesy:C fork() Funkce

  1. Linux – Init Process:Předchůdce všech procesů?

  2. Správa procesů v Ubuntu Linux

  3. Linux:Najděte a zabijte zombie procesy

  1. 30 Cvičení procesů Linuxu pro systémové správce

  2. Linux – protokol minulých vláken, která jsou nyní uzavřena?

  3. Linux – Jsou různá jádra Linux/unix zaměnitelná?