Na začátku (v Unixu) způsob, jakým programy zjišťovaly běžící procesy v systému, bylo přímé čtení procesních struktur z paměti jádra (otevření /dev/mem a přímou interpretace nezpracovaných dat). Takto fungovaly úplně první příkazy 'ps'. Postupem času byly některé informace zpřístupněny prostřednictvím systémových volání.
Je však špatná forma vystavovat systémová data přímo do uživatelského prostoru přes /dev/mem a je nepříjemné neustále vytvářet nová systémová volání pokaždé, když chcete exportovat nějaké nové části procesních dat, a tak byla vytvořena novější metoda. pro přístup ke strukturovaným datům pro aplikace v uživatelském prostoru za účelem zjištění atributů procesu. Toto byl souborový systém /proc. S /proc mohly být rozhraní a struktury (adresáře a soubory) zachovány stejné, i když se základní datové struktury v jádře změnily. Tento systém byl mnohem méně křehký než předchozí systém a lépe se škáloval.
Souborový systém /proc byl původně navržen pro publikování procesních informací a několika klíčových systémových atributů, které vyžadují 'ps', 'top', 'free' a několik dalších systémových utilit. Protože se však snadno používal (jak ze strany jádra, tak ze strany uživatelského prostoru), stal se skládkou pro celou řadu systémových informací. Také začal získávat soubory pro čtení/zápis, které se používají k úpravě nastavení a řízení provozu jádra nebo jeho různých subsystémů. Metodika implementace ovládacích rozhraní však byla ad-hoc a /proc se brzy rozrostla do zamotaného nepořádku.
Systém sysfs (nebo souborový systém /sys) byl navržen tak, aby do tohoto zmatku přidal strukturu a poskytl jednotný způsob, jak vystavit systémové informace a kontrolní body (nastavitelné atributy systému a ovladače) uživatelskému prostoru z jádra. Nyní rámec ovladačů v jádře automaticky vytváří adresáře pod /sys, když jsou ovladače zaregistrovány, na základě typu ovladače a hodnot v jejich datových strukturách. To znamená, že ovladače určitého typu budou mít všechny stejné prvky vystavené prostřednictvím sysfs.
Mnoho ze starších systémových informací a řídicích bodů je stále přístupných v /proc, ale všechny nové sběrnice a ovladače by měly odhalit své informační a řídicí body prostřednictvím sysfs.
Jaký je rozdíl mezi procfs a sysfs?
proc
je starý, je víceméně bez pravidel a struktury. A v určitém okamžiku bylo rozhodnuto, že proc
bylo trochu příliš chaotické a bylo zapotřebí nového způsobu.
Potom sysfs
byl vytvořen a nový obsah, který byl přidán, byl vložen do sysfs
jako informace o zařízení.
Takže v určitém smyslu dělají totéž, ale sysfs
je trochu strukturovanější.
Proč jsou vytvořeny jako systémy souborů?
Filozofie UNIXu nám říká, že vše je "soubor", proto byl vytvořen tak, aby se chová jako soubory.
Pokud tomu dobře rozumím, proc je jen něco k ukládání okamžitých informací o procesech běžících v systému.
Tyto části tu byly vždy a pravděpodobně se nikdy nepřesunou do sysfs
.
Ale v proc
můžete najít více starých věcí , která nebyla přesunuta.
procfs umožňuje libovolné file_operations
, sysfs je více omezení
-
Záznamy procfs obdrží
file_operations
struct, která obsahuje ukazatele funkcí, které určují, co se stane s každým systémovým voláním založeným na souborech, např.open
,read
,mmap
, atd., a můžete z nich provádět libovolné akce.Minimální příklady:
- Jak funguje
/proc/*
práce? | Super uživatel proc_create()
příklad pro modul jádra | Přetečení zásobníku
- Jak funguje
-
sysfs je omezenější v následujících smyslech:
- implementujete pouze dvě metody
show
astore
, který Linux používá k implementaciopen
,close
,read
,write
alseek
pro tebe. Viz také:Jak připojit operace se soubory k atributu sysfs v ovladači platformy? | Přetečení zásobníku - těsně spojeno s
kobject
Minimální příklad:Jak vytvořit jednoduchý atribut třídy sysfs v jádře Linuxu v3.2 | Přetečení zásobníku
- implementujete pouze dvě metody