Risposte:
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 proc
era un po 'troppo caotico ed era necessario un nuovo modo.
Quindi è sysfs
stato creato e le nuove cose aggiunte sono state inserite in sysfs
simili informazioni sul dispositivo.
Quindi in un certo senso fanno lo stesso, ma sysfs
sono 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.
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.
/dev/mem
ed /dev/kmem
è che richiedono l'accesso come root, quindi le applicazioni che li usano devono essere impostate.
kmem
e strumenti come ps
SGID kmem
.
/dev/mem
o /dev/kmem
era più veloce per il kernel perché il processo in modalità utente poteva solo mmap
il file e recuperare tutte le informazioni semplicemente leggendo RAM. Ottenere qualsiasi informazione dal /proc
filesystem richiede un syscall per open
un altro e read
quindi è molto più lento. Tuttavia, /proc
non richiede hack specifici del kernel per leggere la memoria ed espone dati molto meno sensibili ai processi in modalità utente.
procfs consente arbitrari file_operations
, sysfs è più limitato
procfs voci ricevono una file_operations
struct, che contiene i puntatori a funzione che determinano ciò che accade a ogni chiamata di sistema basato su file, ad esempio open
, read
, mmap
e così via, e si può prendere azioni arbitrarie da quelli.
Esempi minimi:
sysfs è più limitato nei seguenti sensi:
show
e store
, che utilizza Linux per implementare open
, close
, read
, write
e lseek
per voi. Vedi anche: Come collegare le operazioni sui file all'attributo sysfs nel driver della piattaforma? | Stack Overflowkobject
Esempio minimo: come creare un semplice attributo di classe sysfs nel kernel Linux v3.2 | Stack Overflow
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.
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 ..