GNU/Linux >> Znalost Linux >  >> Linux

Jaký je rozdíl mezi procfs a sysfs?

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
  • sysfs je omezenější v následujících smyslech:

    • implementujete pouze dvě metody show a store , který Linux používá k implementaci open , close , read , write a lseek 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


Linux
  1. Jaký je rozdíl mezi ls a l?

  2. Jaký je rozdíl mezi $(CC) a $CC?

  3. Jaký je rozdíl mezi unlink a rm?

  1. Jaký je rozdíl mezi InnoDB a MyISAM?

  2. Rozdíl mezi příkazy zastavení a vypnutí?

  3. Rozdíl mezi [[ $a ==Z* ]] a [ $a ==Z* ]?

  1. Jaký je rozdíl mezi strtok_r a strtok_s v C?

  2. Jaký je rozdíl mezi fsck a e2fsck?

  3. Jaký je rozdíl mezi adduser a useradd?