it-swarm.it

Qual'è la differenza tra procfs e sysfs?

Qual'è la differenza tra procfs e sysfs? Perché sono fatti come file system? A quanto ho capito, proc è solo qualcosa per archiviare le informazioni immediate relative ai processi in esecuzione nel sistema.

74
Sen

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 che era necessario un nuovo modo.

Quindi è stato creato sysfs e le nuove cose aggiunte sono state inserite in sysfs come le informazioni sul dispositivo.

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

Perché sono fatti 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 archiviare le informazioni immediate relative ai 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 sono state spostate.

63
Johan

All'inizio (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 hanno funzionato i primi comandi 'ps'. Nel tempo, alcune informazioni sono state rese disponibili tramite chiamate di sistema.

Tuttavia, è una cattiva forma esporre i dati di sistema direttamente nello spazio utente tramite/dev/mem e è fastidioso creare costantemente nuove chiamate di sistema ogni volta che si desidera esportare alcuni nuovi dati di processo, quindi è stato creato un metodo più nuovo per accedere a dati strutturati per applicazioni nello spazio utente per scoprire gli attributi del processo. Questo era il filesystem/proc. Con/proc, le interfacce e le strutture (directory e file) possono essere mantenute uguali, anche se le strutture di dati sottostanti nel kernel sono cambiate. Questo era molto meno fragile del sistema precedente e si ridimensionava meglio.

Il filesystem/proc è stato originariamente progettato per pubblicare informazioni sul processo e alcuni attributi chiave del sistema, richiesti da 'ps', 'top', 'free' e alcune altre utilità di sistema. Tuttavia, poiché era facile da usare (sia dal lato kernel che dal lato 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 presto divenne un pasticcio aggrovigliato.

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

Molte delle informazioni sul sistema legacy e i punti di controllo sono ancora accessibili in/proc, ma tutti i nuovi bus e driver dovrebbero esporre i loro punti di informazione e controllo tramite sysfs.

77
Tim Bird

procfs consente arbitrario file_operations, sysfs è più limitato

sysfs è il filesystem virtuale creato durante il ciclo di rilascio del kernel 2.6 per mostrare le informazioni sul dispositivo poiché procfs non ha fatto bene questo tipo di informazioni.

La memoria ecc. Non è stata trasferita su sysfs in quanto non è mai stata pensata per mostrare quel tipo di informazione, quindi è improbabile che venga trasferita affatto.

3
kemra102

Come voglio anche aggiungere qui ... Poiché/proc è la versione precedente contiene le informazioni del dispositivo kernel di quel periodo di tempo .. come sysfs è arrivato con la versione 2.6 del kernel, quindi le informazioni del driver del dispositivo creano la propria directory con la quale è un po 'strutturato e di facile accesso ..

1
gagan bajaj