operating-system filesystems inode vfs

operating system - Inode vs Vnode Diferencia



operating-system filesystems (5)

Depende de su sistema operativo. En un sistema Linux, por ejemplo, no hay v-nodo, solo se implementa de manera diferente un i-node struct inode genérico que, aunque es conceptualmente similar a un v-nodo.

Para los núcleos derivados de BSD y UNIX, el v-nodo apunta a una estructura de i-nodo específica del sistema de archivos, junto con información adicional que incluye punteros a funciones que operan en el archivo y metadatos no incluidos en el inodo. Una diferencia importante es que el inodo es el sistema de archivos, mientras que el vnodo no lo es. (En Linux, como se mencionó anteriormente, hay un inodo independiente del sistema y un inodo dependiente del sistema de archivos)

Un inodo no es una estructura de datos del kernel, sin embargo, el inodo vnodo / genérico es una representación del inodo en el kernel.

Tuve algunas dudas con respecto a un Inode vs un Vnode. En lo que a mi entender se refiere, el inodo es la representación de un archivo que utiliza el Sistema de archivos virtual. Mientras que los vnodos son específicos del sistema de archivos. ¿Es esto correcto?

Además, estoy confundido si el inodo es una estructura de datos del kernel, es decir, si es una estructura de datos en memoria o una estructura de datos que existe en bloques en un disco real.


El concepto de vnode difiere en cierta medida según el sistema en el que se encuentre, todos simplemente tomaron el nombre y lo ejecutaron.

Bajo Linux y Unix, puede considerar la abstracción como sigue. Supongamos que existe

f.tmp

Desea mantenerlo mientras su programa se está ejecutando, porque lo está accediendo, pero si su programa finaliza o se bloquea, debe asegurarse de que desaparezca.

Puedes hacer esto abriendo f, y luego unlink() . Aún conservará una referencia a f, aunque su inodo ahora tiene 0 entradas de directorio y, por lo tanto, se ha marcado como libre. El sistema operativo aún se mantiene donde se inició el archivo y su estado de asignación, hasta que finalice su programa. Esta "virtualización" del inodo que ya no existe es un vnode.

Otra situación común para esto es cuando estás leyendo un recurso que desaparece debajo de ti. Supongamos que está viendo una película, mientras se está transmitiendo a una ubicación temporal. Cuando la película se haya descargado por completo, se reubicará en otro volumen para su almacenamiento. De alguna manera, puedes seguir viendo y arrastrando la película mientras permanezca abierta. En este caso, aunque no haya enlaces, ya que hay un vnode, este inodo no se puede limpiar todavía.


Esto depende del sistema operativo y del sistema de archivos que está utilizando o en el que está trabajando. Por ejemplo, los inodos VXFS y ADVFS no son más que estructuras de datos en disco llamadas vnodos. En general ambos se refieren a metadatos de archivo.


Para agregar algo a esto: la mejor explicación que podría encontrar para un vnode está aquí en los documentos de FreeBSD . Para los que tienen una mentalidad más académica, también está el artículo original que introdujo el concepto que proporciona un recurso mucho más profundo.

Dicho esto, los vnodos se crearon originalmente para FreeBSD debido a la proliferación de diferentes tipos de sistemas de archivos que necesitaban ser utilizados como UFS, NFS, etc. Los vnodos están diseñados para proporcionar una abstracción en todos los sistemas de archivos posibles para que el sistema operativo pueda interactuar con ellos y así que las funciones del kernel no tienen que soportar específicamente todos los sistemas de archivos bajo el sol; solo tienen que saber cómo interactuar con el vnode del archivo.

De vuelta a los vnodos de sus preguntas originales, como mencionó @Doug Luce, están en abstracciones de memoria y no son específicos del sistema de archivos. Se pueden usar indistintamente en UFS, ext4 y cualquier otra cosa. Por el contrario, los inodos se almacenan en el disco y son específicos del sistema de archivos exacto que se está utilizando. Los inodos contienen metadatos sobre el archivo como tamaño, propietario, punteros a las direcciones de bloque, entre otras cosas. Los vnodos contienen algunos datos sobre el archivo, pero solo los atributos que no cambian a lo largo de la vida útil del archivo, por lo que un inodo sería la ubicación de referencia si desea obtener la mayor información posible sobre un archivo. Si te interesan más los inodos, te sugeriría que consultes wikipedia, que tiene un buen artículo sobre ellos .


Por lo general (como en los sistemas de archivos principales de Linux y BSD), un inodo es primero una estructura en disco que describe el almacenamiento de un archivo en términos de ese disco (generalmente en bloques). Un vnode es una estructura en memoria que abstrae gran parte de lo que es un inodo (un inodo puede ser uno de sus campos de datos) pero también captura cosas como operaciones en archivos, bloqueos, etc. Esto le permite admitir sistemas de archivos no basados ​​en inodos. en particular sistemas de archivos en red.