Qual'è la differenza tra procfs e sysfs?


71

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

Risposte:


61

Qual'è la differenza tra procfs e sysfs?

procè quello vecchio, è più o meno senza regole e struttura. E ad un certo punto si decise che procera un po 'troppo caotico ed era necessario un nuovo modo.

Quindi è sysfsstato creato e le nuove cose aggiunte sono state inserite in sysfssimili informazioni sul dispositivo.

Quindi in un certo senso fanno lo stesso, ma sysfssono un po 'più strutturati.

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 memorizzare le informazioni immediate relative ai processi in esecuzione nel sistema.

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

Ma ci sono altre cose vecchie che puoi trovare proc, che non sono state spostate.


2
Grazie per la risposta .. Ma perché cpuinfo e meminfo sono cose ancora mantenute nei processi? Perché non possono essere spostati in sysfs?
Sen

5
Immagino che mettano nuove cose in sysfs, e lasciano solo quello vecchio per mantenere un certo livello di compatibilità all'indietro. Ci sono molte cose che dipendono da quelle cose nel processo ...
Johan,

75

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 era 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.


8
Uno dei motivi per cui è "cattiva forma" da utilizzare /dev/memed /dev/kmemè che richiedono l'accesso come root, quindi le applicazioni che li usano devono essere impostate.
Barmar,

2
Su molti sistemi Unix e su Linux tali file di dispositivo sono di proprietà del gruppo kmeme strumenti come psSGID kmem.
Contromodalità

2
In effetti, il vecchio metodo di accesso diretto /dev/memo /dev/kmemera più veloce per il kernel perché il processo in modalità utente poteva solo mmapil file e recuperare tutte le informazioni semplicemente leggendo RAM. Ottenere qualsiasi informazione dal /procfilesystem richiede un syscall per openun altro e readquindi è molto più lento. Tuttavia, /procnon richiede hack specifici del kernel per leggere la memoria ed espone dati molto meno sensibili ai processi in modalità utente.
Mikko Rantalainen,

10

procfs consente arbitrari file_operations, sysfs è più limitato


3

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.


La memoria, ecc. Non è stata trasferita su sysfs Cosa intendi per porting? E perché non si intendeva mostrare quel tipo di informazioni? Potresti spiegarmelo, per favore.
Sen

Per porting intendevo spostato che era una risposta alla tua domanda se Memory ecc verrà spostato su sysfs. Ed è sempre stato inteso mostrare informazioni sui dispositivi poiché quella era la cosa che procfs non faceva bene, procfs è ancora eccellente per altri tipi di informazioni.
kemra102,

1

Come voglio anche aggiungere qui ... Poiché / proc è la versione precedente, contiene le informazioni del dispositivo kernel di quel periodo di tempo .. come sysfs è venuto 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 ..

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.