J'avais des doutes concernant un Inode contre un Vnode. Pour autant que je sache, l'inode est la représentation d'un fichier utilisé par le système de fichiers virtuel. Alors que les vnodes sont spécifiques au système de fichiers. Est-ce correct?
En outre, je suis confus si l'inode est une structure de données du noyau, c'est-à-dire s'il s'agit d'une structure de données en mémoire ou d'une structure de données qui existe sur des blocs dans un disque réel?
Pour ajouter quelque chose à ceci: La meilleure explication que j'ai pu trouver pour un vnode est ici sur le FreeBSD docs . Pour les plus académiques, il y a aussi le document original qui a introduit le concept qui fournit une ressource beaucoup plus approfondie.
Cela dit, les vnodes ont été créés à l'origine pour FreeBSD en raison de la prolifération de différents types de systèmes de fichiers qui devaient être utilisés comme UFS, NFS, etc. que les fonctions du noyau n'ont pas à supporter spécifiquement chaque système de fichiers sous Sun; ils doivent seulement savoir comment interagir avec le vnode du fichier.
De retour à votre question d'origine, les vnodes, comme l'a mentionné @Allen Luce, sont dans des abstractions en mémoire et ne sont pas spécifiques au système de fichiers. Ils peuvent être utilisés de manière interchangeable dans UFS, ext4 et quoi que ce soit d'autre. En revanche, les inodes sont stockés sur le disque et sont spécifiques au système de fichiers exact utilisé. les inodes contiennent des métadonnées sur le fichier comme la taille, le propriétaire, les pointeurs vers les adresses de bloc entre autres. Les nœuds virtuels contiennent des données sur le fichier, mais uniquement des attributs qui ne changent pas au cours de la durée de vie du fichier, donc un inode serait l'emplacement à référencer si vous vouliez le plus d'informations possible sur un fichier. Si vous êtes plus intéressé par les inodes, je vous suggère de vérifier wikipedia qui a un bon article à leur sujet .
Typiquement (comme pour les systèmes de fichiers traditionnels Linux et BSD), un inode est d'abord une structure sur disque qui décrit le stockage d'un fichier en termes de ce disque (généralement en blocs). Un vnode est une structure en mémoire qui résume une grande partie de ce qu'est un inode (un inode peut être l'un de ses champs de données) mais capture également des choses comme les opérations sur les fichiers, les verrous, etc. Cela lui permet de prendre en charge des systèmes de fichiers non basés sur l'inode, en particulier les systèmes de fichiers en réseau.
Cela dépend de votre système d'exploitation. Sur un système Linux par exemple, il n'y a pas de v-node, seulement un i-node générique struct inode
qui bien que conceptuellement similaire à un v-node soit implémenté différemment.
Pour les noyaux dérivés de BSD et UNIX, le v-node pointe vers une structure i-node spécifique au système de fichiers, ainsi que des informations supplémentaires, notamment des pointeurs vers des fonctions qui opèrent sur le fichier et des métadonnées non incluses dans l'inode. Une différence majeure est que l'inode est un système de fichiers alors que le vnode ne l'est pas. (Sous Linux, comme mentionné ci-dessus, il existe à la fois un inode indépendant du système et un inode dépendant du système de fichiers)
Un inode n'est pas une structure de données du noyau, le vnode/inode générique l'est cependant, étant une représentation dans le noyau de l'inode.
Le concept de vnode diffère dans une certaine mesure selon le système sous lequel vous vous trouvez, tout le monde a pris le nom et a couru avec.
Sous Linux et Unix, vous pouvez considérer l'abstraction comme suit. Supposons qu'il existe
f.tmp
Vous voulez que f reste pendant que votre programme est en cours d'exécution, car vous y accédez, mais si votre programme se termine ou se bloque, vous voulez être sûr qu'il disparaît.
Pour ce faire, ouvrez f, puis unlink()
it. Vous conserverez toujours une référence à f, même si son inode a maintenant 0 entrées de répertoire et a donc été marqué comme libre. Le système d'exploitation conserve toujours où le fichier a commencé et son état d'allocation jusqu'à la fin de votre programme. Cette "virtualisation" de l'inode qui n'existe plus est un vnode.
Une autre situation courante pour cela est lorsque vous lisez une ressource qui disparaît sous vous. Supposons que vous regardez un film en cours de diffusion vers un emplacement temporaire. Lorsque le film est complètement téléchargé, il sera déplacé vers un autre volume pour le stockage. D'une manière ou d'une autre, vous pouvez continuer à regarder et à parcourir le film tant qu'il reste ouvert. Dans ce cas, même s'il n'y a à nouveau aucun lien, car il existe un nœud virtuel, cet inode ne peut pas encore être nettoyé.
Cela dépend du système d'exploitation et du système de fichiers que vous utilisez ou travaillez. Par exemple, les inodes VXFS et ADVFS ne sont rien d'autre qu'une structure de données sur disque appelée vnode. En général, les deux se réfèrent aux métadonnées des fichiers.