Profs
procfs je speciální souborový systém používaný v operačních systémech podobných UNIXu . Umožňuje přístup k informacím z jádra o systémových procesech. Potřebné pro spouštění příkazů jako ps , w , top . Obvykle se montuje na /proc. procfs vytváří dvouúrovňovou reprezentaci procesních prostorů. Na nejvyšší úrovni jsou procesy adresáře pojmenované podle jejich pid . Na nejvyšší úrovni je také odkaz na adresář odpovídající procesu, který požadavek podává; může mít na různých operačních systémech jiný název ( curproc na FreeBSD , self na Linuxu ).
Historie
UNIX 8. vydání
procfs se poprvé objevil v 8. vydání UNIX , vydaném v roce 1985, a měl poskytnout rozhraní pro správu procesů, které bylo pohodlnější než volání ptrace . To bylo podrobně popsáno Tomem Killianem v Processes as Files v roce 1984. Každý proces byl reprezentován souborem, do kterého bylo možné zapisovat. Počet dostupných hovorů ioctl byl 11. [1] [2]
System V verze 4
Tento systém, vydaný v roce 1990, zdědil procfs z UNIX 8 s některými vylepšeními. Procesy byly stále reprezentovány jako jednoduché soubory, ale již bylo k dispozici 37 volání ioctl . FS se stal dostatečným pro budování utilit, jako je ps na jeho základě , ale zůstal nepohodlný a špatně rozšiřitelný. [jeden]
Implementace je podrobně popsána v knize Rogera Faulknera a Rona Gomeze „The Process File System and Process Model in UNIX System V“ z roku 1991.
Plán 9
V roce 1992 vyšlo první veřejné vydání operačního systému Plan 9 . Toto byl vrchol vývoje procfs . Veškeré procesní řízení bylo přesunuto sem. Z procesů se místo souborů staly adresáře. Místo ioctl byly použity textové příkazy a ovládání bylo možné provádět pomocí příkazů cat a ls . [3] Při připojování /proc z jiného počítače přes síť může místní proces interagovat se vzdáleným procesem, jako by byly na stejném počítači.
Solaris 2.6
Solaris 2.6 zdědil velkou část struktury procfs Plan 9 , nicméně všechny soubory tam umístěné byly binární, určené k použití programem, nikoli člověkem. [1] Obecně se souborový systém stal poněkud primitivnějším ve srovnání s plánem 9, ale nesrovnatelně pokročilejším než v SVR4.
4.4BSD
Ve srovnání se Solarisem to byl další krok zpět. Počet souborů v každém adresáři byl snížen na 8 (i když se v pozdějších verzích mírně zvýšil). Výrazně se také zredukovala sada dostupných příkazů. Začal se opakovat přechod od souborových rozhraní k systémovým voláním. [jeden]
V moderních verzích FreeBSD se procfs postupně vyřazuje [4] [5] .
Linux
Linux je poněkud mimo příběh popsaný výše. Od samého počátku v něm procfs představoval univerzální rozhraní pro získávání informací z jádra, a to nejen o procesech. Kořen obsahuje soubory (většinou text) a adresáře, které poskytují různé informace o systému.
Procfs přitom téměř neplní svou původní funkci – řízení procesů . Chybí rozhraní pro odesílání příkazů, souborový systém poskytuje pouze podrobné informace o procesech (a na některých místech umožňuje změnit některé volby, např. /proc/<pid>/oom_adj). [6]
Struktura
*BSD
Každý adresář nejvyšší úrovně obsahuje následující soubory:
- ctl je soubor pouze pro zápis, který podporuje mnoho operací, které se do něj zapisují jako řetězce:
- připojit - Zastaví cílový proces a připraví volající proces na ladění cíle.
- odpojit - pokračuje v provádění cílového procesu a odebírá jej z kontroly procesu ladicího programu (ten nemusí být volající proces).
- run - Pokračuje v provádění cílového procesu, dokud není přijat signál, není dosaženo bodu přerušení nebo dokud se cílový proces neskončí.
- krok - provede jeden příkaz cílového programu bez generování dalších signálů.
- čekat - čeká, až cílový proces dosáhne stabilního stavu, připravený k ladění. Cílový proces musí být v tomto stavu, než budou povoleny další příkazy.
- dbregs jsou ladicí registry odpovídající struct dbregs v <machine/reg.h>. bregs se v současnosti používá pouze na architektuře i386.
- etype je typ spustitelného souboru, ke kterému soubor přistupuje .
- file je symbolický odkaz na soubor, ze kterého byl přečten text procesu. To lze použít k přístupu k tabulce ID procesu nebo ke spuštění nové kopie procesu. Pokud soubor není nalezen, pak je cílový směr "neznámý".
- fpregs jsou registry s pohyblivou řádovou čárkou odpovídající struct fpregs v <machine/reg.h>. fpregs se používá pouze na strojích s různými sadami univerzálních a pohyblivých registrů.
- map je mapa virtuální paměti procesu.
- mem je úplný obraz virtuální paměti procesu. Můžete odkazovat pouze na adresu, která v procesu existuje. Čtení a zápis do tohoto souboru mění proces. Zápis do textového segmentu se vztahuje pouze na tento proces (změny neovlivní další kopie tohoto procesu).
- poznámka - používá se k odeslání signálu do procesu. Nelze použít.
- notepg - používá se k odeslání signálu skupině procesů. Nelze použít.
- regs - Umožňuje čtení a zápis do více registrů procesů. Tento soubor obsahuje binární datovou strukturu struct regs popsanou v <machine/reg.h>. regs lze zapisovat pouze tehdy, když je proces zastaven.
- rlimit je soubor pouze pro čtení obsahující aktuální a maximální velikost. Každý řádek má formát rlimit current max, kde -1 znamená nekonečno.
- status - stav procesu. Soubor je pouze pro čtení a obsahuje jeden řádek skládající se z polí oddělených mezerami:
- název příkazu
- id procesu
- ID nadřazeného procesu
- ID skupiny procesů
- ID relace
- hlavní, vedlejší spravovaného terminálu nebo -1, -1 jinak
- seznam příznaků procesu: ctty, pokud se jedná o spravovaný terminál, sldr, pokud proces spravuje relaci, noflags, pokud není nastaven žádný z výše uvedených příznaků
- čas zahájení procesu v sekundách a mikrosekundách oddělených čárkou
- uživatelský čas v sekundách a mikrosekundách oddělených čárkou
- systémový čas v sekundách a mikrosekundách oddělených čárkou
- doba čekání na zprávu
- lístek procesu, který se skládá ze skutečného ID uživatele a seznamu skupin (z nichž prvním prvkem je skutečné ID skupiny), oddělených čárkou
- název hostitele, ve kterém proces běží, nebo "-", pokud proces běží neomezeně dlouho
Podpora operačního systému
Odkazy
Zdroje
- ↑ 1 2 3 4 Stručná historie /proc (odkaz není k dispozici) . Archivováno z originálu 2. března 2012. (neurčitý)
- ↑ manuálová stránka proc(4) (UNIX, 8. vydání) (odkaz dolů) . Archivováno z originálu 2. března 2012. (neurčitý)
- ↑ manuálová stránka proc(3) (Plán 9) (odkaz dolů) . Archivováno z originálu 2. března 2012. (neurčitý)
- ↑ Co je vaření pro FreeBSD 8? (nedostupný odkaz) . Archivováno z originálu 2. března 2012. (neurčitý)
- ↑ Proč je procfs zavrženo ve prospěch procstat? (freebsd-fs mailing list) (downlink) . Archivováno z originálu 2. března 2012. (neurčitý)
- ↑ proc(5) manuálová stránka (Linux) (odkaz dolů) . Archivováno z originálu 2. března 2012. (neurčitý)