2014-12-07 48 views
14

Avevo qualche dubbio riguardo a un Inode rispetto a un Vnode. Per quanto riguarda la mia comprensione, inode è la rappresentazione di un file che viene utilizzato dal Virtual File System. Mentre i vnodes sono specifici del file system. È corretto?Inode vs Vnode Differenza

Inoltre, sono confuso se l'inode è una struttura di dati del kernel, sia che si tratti di una struttura dati in memoria o di una struttura dati esistente su blocchi in un disco reale?

+0

Si prega di provare a trovare la risposta da soli nei codici sorgente di un sistema operativo utilizzando il termine 'inode', ad es. https://github.com/torvalds/linux. Altrimenti la tua domanda presenta uno sforzo di ricerca molto piccolo e sarà probabilmente downvoted perché non è una domanda pratica di codifica. Sembra più una domanda per i compiti di blah blah – xmojmr

+10

Personalmente non sono d'accordo. Mentre sì, potrebbe avere senso eseguire tutte le ricerche e pori sulle pagine wikipedia e man devi anche rendersi conto che lo stackoverflow è una risorsa simile usata in modo che le stesse informazioni possano essere condensate in un formato più comprensibile. Dato che queste domande non esistono altrove, penso che siano decisamente valide. – Greg

risposta

1

Dipende dal sistema operativo e dal file system in uso o in uso. Ad esempio, gli inode VXFS e ADVFS non sono altro che una struttura di dati su disco chiamata vnode. In generale entrambi si riferiscono ai metadati del file.

9

In genere (come per i file system mainstream Linux e BSD), un inode è innanzitutto una struttura su disco che descrive l'archiviazione di un file in termini di quel disco (di solito in blocchi). Un vnode è una struttura in memoria che astrae molto di ciò che è un inode (un inode può essere uno dei suoi campi di dati) ma cattura anche cose come operazioni su file, blocchi, ecc. Ciò gli consente di supportare filesystem non inode, in particolare i filesystem in rete.

9

Per aggiungere qualcosa a questo: La migliore spiegazione che potrei trovare per un vnode è qui su FreeBSD docs. Per i più accademici c'è anche lo original paper that introduced the concept che fornisce una risorsa molto più approfondita.

Detto questo vnodes sono stati originariamente creati per FreeBSD a causa della proliferazione di diversi tipi di filesystem che dovevano essere usati come UFS, NFS, ecc. I vnodi sono pensati per fornire un'astrazione su tutti i possibili filesystem in modo che il SO possa interfacciarsi con loro e affinché le funzioni del kernel non debbano supportare in modo specifico ogni filesystem sotto il sole; devono solo avere la conoscenza di come interagire con il vnode del file.

Torna alla domanda originale I vnodes, come menzionato da @Doug Luce, sono in memoria e non sono specifici del filesystem. Possono essere usati in modo intercambiabile in UFS, ext4 e qualsiasi altra cosa. Al contrario, gli inode sono archiviati su disco e sono specifici del filesystem esatto in uso. gli inode contengono metadati sul file come dimensioni, proprietario, puntatori agli indirizzi dei blocchi, tra le altre cose. I vnodi contengono alcuni dati sul file, ma solo gli attributi che non cambiano nel corso della vita del file, quindi un inode sarebbe il punto di riferimento se si desidera la maggior parte delle informazioni possibili su un file. Se sei più interessato agli inode ti suggerisco di dare un'occhiata allo wikipedia which has a good article on them.

0

Il concetto di vnode differisce in grado a seconda del sistema in cui ci si trova, ognuno ha semplicemente preso il nome e l'ha eseguito.

Sotto Linux e Unix, è possibile considerare l'astrazione come segue. Supponiamo che esiste

f.tmp 

Volete f a restare mentre il programma è in esecuzione, in quanto si sta accedendo, ma se il programma termina o si blocca, si vuole essere sicuri che se ne va.

È possibile farlo aprendo f, e quindi unlink() esso. Manterrai comunque un riferimento a f, anche se il suo inode ora ha 0 voci di directory, e quindi è stato contrassegnato come libero. Il sistema operativo conserva ancora il punto in cui il file è stato avviato e il suo stato di allocazione, fino alla fine del programma. Questa "virtualizzazione" dell'inode che non esiste più è un vnode.

Un'altra situazione comune per questo è quando stai leggendo una risorsa che scompare da sotto di te. Supponi di guardare un film mentre è in streaming su una posizione temporanea.Quando il film è completamente scaricato, verrà riposizionato su un altro volume per l'archiviazione. In qualche modo puoi continuare a guardare e sfogliare il film finché rimane aperto. In questo caso, anche se non ci sono ancora collegamenti, dato che esiste un vnode, questo inode non può ancora essere pulito.

3

Dipende dal sistema operativo. Su un sistema Linux, ad esempio, non esiste un nodo v, solo un i-node generico struct inode che sebbene sia concettualmente simile a un nodo v sia implementato in modo diverso.

Per i kernel BSD e UNIX, il nodo v punta a una struttura i-node specifica per il filesystem, insieme ad alcune informazioni aggiuntive che includono i puntatori alle funzioni che operano sul file e metadati non inclusi nell'inode. Una grande differenza è l'inode è il file system mentre il vnode non lo è. (In Linux come menzionato sopra c'è sia un inode indipendente dal sistema che un inode del file system)

Un inode non è una struttura dati del kernel, ma l'inode vode/generico è una rappresentazione in-kernel di l'inode.

+0

Tutti gli inode su disco sono copiati in un inode generico quando il file corrispondente è stato aperto? Quanto ne viene copiato e, in questo caso, quanto sovraccarico di prestazioni è presente per supportare l'astrazione generica degli inode? – mdenton8

+1

L'intero inode del file corrispondente viene copiato nell'inode generico, sì. Esaminiamo i passaggi dell'apertura di un file su un VFS. 1. Ottieni il descrittore di file 2. Esegui ricerca del percorso: ottieni root, ottieni la dentatura che legge usando una funzione specifica di FS. Chiamate [iget] (http://www.tldp.org/LDP/khg/HyperNews/get/fs/vfstour.html) se l'inode non è nella cache di memoria 3. Chiamare la routine aperta specifica di FS Come per l'overhead I ' Non sono davvero sicuro. Ma forse se riesci a scavare abbastanza puoi trovarlo. – quantik