GNU/Linux >> Linux Esercitazione >  >> Linux

Qual è la differenza tra procfs e sysfs?

All'inizio (molto tempo fa in Unix), il modo in cui i programmi scoprivano i processi in esecuzione sul sistema era leggendo direttamente le strutture dei processi dalla memoria del kernel (aprendo /dev/mem e interpretando direttamente i dati grezzi). Ecco come funzionavano i primissimi comandi 'ps'. Nel corso del tempo, alcune informazioni sono state rese disponibili tramite chiamate di sistema.

Tuttavia, è una cattiva forma esporre i dati di sistema direttamente allo spazio utente tramite /dev/mem e odioso creare costantemente nuove chiamate di sistema ogni volta che si desidera esportare una nuova parte di dati di processo, quindi è stato creato un metodo più nuovo per accedere a dati strutturati per applicazioni in spazio utente per conoscere gli attributi del processo. Questo era il filesystem /proc. Con /proc, le interfacce e le strutture (directory e file) potevano essere mantenute le stesse, anche se le strutture di dati sottostanti nel kernel cambiavano. Era molto meno fragile del sistema precedente e si adattava meglio.

Il filesystem /proc è stato originariamente progettato per pubblicare informazioni sui processi e alcuni attributi di sistema chiave, richiesti da 'ps', 'top', 'free' e poche altre utilità di sistema. Tuttavia, poiché era facile da usare (sia dal lato del kernel che dal lato dello spazio utente), divenne una discarica per un'intera gamma di informazioni di sistema. Inoltre, ha iniziato a ottenere file di lettura/scrittura, da utilizzare per regolare le impostazioni e controllare il funzionamento del kernel o dei suoi vari sottosistemi. Tuttavia, la metodologia di implementazione delle interfacce di controllo era ad-hoc e /proc si trasformò presto in un pasticcio intricato.

Il sysfs (o /sys filesystem) è stato progettato per aggiungere struttura a questo pasticcio e fornire un modo uniforme per esporre informazioni di sistema e punti di controllo (attributi di sistema e driver impostabili) allo spazio utente dal kernel. Ora, il framework dei driver nel kernel crea automaticamente le directory in /sys quando i driver vengono registrati, in base al tipo di driver e ai valori nelle loro strutture di dati. Ciò significa che i driver di un particolare tipo avranno tutti gli stessi elementi esposti tramite sysfs.

Molte delle informazioni e dei punti di controllo del sistema legacy sono ancora accessibili in /proc, ma tutti i nuovi bus e driver dovrebbero esporre le proprie informazioni e punti di controllo tramite sysfs.


Qual è la differenza tra procfs e sysfs?

proc è quello vecchio, è più o meno senza regole e struttura. E ad un certo punto è stato deciso che proc era un po' troppo caotico e serviva un nuovo modo.

Poi sysfs è stato creato e il nuovo materiale aggiunto è stato inserito in sysfs come le informazioni sul dispositivo.

Quindi in un certo senso fanno lo stesso, ma sysfs è un po' più strutturato.

Perché sono creati come file system?

La filosofia UNIX ci dice che tutto è un "file", quindi è stato creato in modo che si comporti come file.

A quanto ho capito, proc è solo qualcosa per memorizzare l'immediato prima dei processi in esecuzione nel sistema.

Quelle parti sono sempre state lì e probabilmente non si sposteranno mai in sysfs .

Ma ci sono altre cose vecchie che puoi trovare in proc , che non è stato spostato.


procfs consente file_operations arbitrari , sysfs è più limitato

  • le voci procfs ricevono un file_operations struct, che contiene puntatori a funzione che determinano cosa succede a ogni chiamata di sistema basata su file, ad es. open , read , mmap , ecc., e puoi intraprendere azioni arbitrarie da quelli.

    Esempi minimi:

    • Come funziona /proc/* opera? | Super utente
    • proc_create() esempio per il modulo del kernel | Overflow dello stack
  • sysfs è più limitato nei seguenti sensi:

    • implementi solo due metodi show e store , che Linux usa per implementare open , close , read , write e lseek per te. Vedi anche:Come allegare operazioni sui file all'attributo sysfs nel driver della piattaforma? | Overflow dello stack
    • strettamente associato a kobject

    Esempio minimo:come creare un semplice attributo di classe sysfs nel kernel Linux v3.2 | Overflow dello stack


Linux
  1. La differenza tra i comandi di arresto e arresto?

  2. La differenza tra [[ $a ==Z* ]] e [ $a ==Z* ]?

  3. Qual è la differenza tra strtok_r e strtok_s in C?

  4. Qual è la differenza tra fsck ed e2fsck?

  5. Qual è la differenza tra adduser e useradd?

Qual è la differenza tra Linux e Unix?

Qual è la differenza tra Login e Non-Login Shell

Qual è la differenza tra il comando apt e apt-get?

Che cos'è un hypervisor? Qual è la differenza tra il tipo 1 e 2?

Qual è la differenza tra curl e Wget?

Qual è la differenza tra chiamata di sistema e chiamata di libreria?