Hlavní navigace

Co před námi tají /proc (4)

Tomáš Kašpárek

I dnešní díl bude o souborech v základním adresáři. Kupodivu se ukazuje, že i na první pohled zřejmé soubory si vyžadují delší popis a komentář. Asi tento seriál nebude tak krátký, jak jsem si myslel.

Kvůli lepší orientaci opět výpis základního adresáře /proc:

  809  cmdline      fs/         kmsg     mounts      slabinfo  version
  840  cpuinfo      ide/        ksyms    mtrr        stat
  842  devices      interrupts  loadavg  net/        swaps
  847  dma          iomem       locks    nv/         sys/
  848  driver/      ioports     meminfo  partitions  sysvipc/
  apm  execdomains  irq/        misc     pci         tty/
  bus/ filesystems  kcore       modules  self@       uptime

Předchozí díl končil souborem o DMA kanálech, dnes se tedy vrhneme na další v pořadí – execdomain.

execdomain

Řekl bych, že tohle je první soubor, který běžnému uživateli neříká asi vůbec nic. Výpis je skutečně zcelanaprosto­úplněnicneříka­jícísnůškazna­ků. Posuďte sami:

0-255   Linux                   [kernel]

Tato informace je (dle dokumentace jádra v filesystems/proc­.txt) nová pro řadu 2.4 a má co dělat s bezpečností. To nám ale nestačí, nakoukneme proto do zrojového kódu jádra. Existuje přímo soubor kernel/execdo­mains.c, ale množství komentářů v něm je opravdu minimání. První informace tedy je, že základní doména se jmenuje „Linux“, což je druhá položka výpisu, že je napevno zakompilována do jádra, to je poslední položka – název modulu, a že platí pro „personality“ 0 až 255, tedy pro všechny. Nyní se ovšem vynoří otázka, co znamená pojem „personality“. V souboru include/perso­nality.h se dozvíme, že možné typy jsou například Linux, SVR3, SVR4, BSD, SunOS, Xenix, Irix64 nebo Solaris.

Soubory, ve kterých se vyskytují alespon trochu rozumné informace, jsou následující: kernel/exec_do­main.c, fs/binfmt_elf.c, arch/…/kernel/sig­nal.c. Při použití přibydou ještě kernel/exit.c, fork.c, ksyms.c. V posledně jmenovaných je pouze adminitrativa při implementaci této vlastnosti jako modulu.

Na závěr mohu říci, že mám opravdu jen mlhavou představu, k čemu se execdomains využívají. Pravděpodobně jde hlavně o emulaci kódu pro cizí/neznámé platformy a jejich binární formáty. Pro lepší pochopení doporučuji nastudovat problematiku modulu binfmt.

Nedlouho před odevzdáním tohoto článku jsem konečně našel nějaké rozumnější informace. Můj odhad byl veskrze správný. Tato vlastnost slouží pro emulaci chování jiných operačních systémů při spouštení jejich nativního kódu. Může ovlivňovat vykonávání některých systémových volání, jako například select dle zadaného typu operačního systému. V oficiálním jádře (od Linuse) není implementována žádná dodatečná doména, a je tedy nutno poohlédnout se po ní ve formě patchů nebo modulů na Síti. Můžete si ji samozřejmě také napsat sami :), pro více informací doporučuji Linux Kernel Internals kapitolu 3.8.

filesystems

Nejprve samozřejmě ukázkový výpis:

nodev   proc
nodev   sockfs
nodev   tmpfs
nodev   pipefs
        ext2
nodev   devpts
nodev   usbdevfs
        vfat

Jedná se o seznam souborových systému podporovaných jádrem. Jsou zde vidět skutečné souborové systémy pro disk – ext2 a vfat, dále také virtuální souborové systémy, jako například proc nebo devpts. Tato druhá skupina vytváří informace v souborovém systému proc, případně zástupné soubory pro devfs nebo adresář /dev. Poslední skupinou jsou souborové systémy, které implementují chování prostředků jako roura (pipefs) nebo soket (sockfs).

Ještě malou zmínku o usbdevfs. Tento vitruální souborový systém zpřístupňuje informace o zařízeních USB. Není ovšem připojen automaticky, a tak je potřeba to udělat ručně:

mount -t usbdevfs none /proc/bus/usb

K témuž účelu lze samozřejmě využít i fstab – přidat do něj řádek:

none /proc/bus/usb usbdefs defaults 0 0

K podrobnému popisu obsahu těchto adresářu se dostaneme někdy příště.

Přítomnost položky tmpfs může být trochu zavádějící. Normálně by člověk předpokládal, že bude přítomna pouze při využívání stejnojmenného souborového systému pro ramdisk. Tmpfs umožňuje ve zkratce vyhradit (proměnlivou) část paměti, kterou lze potom používat jako libovolný jiný souborový systém. Až na to, že po vypnutí nebo restaru se jeho obsah nenávratně ztratí. Implementace souborového systému tmpfs se ovšem využívá i tehdy, pokud dotyčný systém není v jádře přímo přítomen (a není ani jako modul), a to pro implementaci některých částí sdílené paměti. Pro další informace doporučuji proto především soubor mm/shmem.c a samozřejmě příslušnou dokumentaci v jádře.

Považuji již za zcela zřejmé, že informace se zde mohou měnit v závisloti na aktuálné nahraných modulech. Stále setrvávají jen ty, které jsou v jádře napevno (z diskových často jen ext2).

Na shledanou s vámi se těším opět za týden.

Našli jste v článku chybu?