
NFS - III.
V minulém dílu jsme se začali podrobněji zabývat tím, jak protokol NFS (Network File System) ve skutečnosti pracuje. Probrali jsme si princip komunikace klienta se serverem, pokud jde o způsob určování konkrétních souborů a adresářů - prostřednictvím systémových identifikací, a nikoli prostřednictvím jmen a přístupových cest k souborům. Dnes pokročíme ještě dále a naznačíme si, jaké je postavení systémových identifikací (a protokolu NFS obecně) v rámci operačního systému počítačů v roli klientů i serverů.
Jelikož se naše dosavadní povídání o protokolu NFS týkalo především charakteru komunikace mezi klientem a serverem (neboli toho, co si vzájemně předávají, co od sebe požadují a co si poskytují), tedy jejich "vnějšími" projevy, nemuseli jsme náš výklad vztahovat k některé konkrétní systémové platformě, na které může být protokol NFS implementován. Jakmile se ale začneme podrobněji zabývat postavením NFS v rámci operačního systému, naše povídání již přestane být nezávislé na konkrétní platformě. Proto si musíme některou platformu vybrat, a vše potřebné si ukázat na jejím konkrétním příkladu (s naznačením odlišností pro jiné platformy). Nejvhodnějším platformou jistě bude prostředí, ve kterém protokol NFS vznikl, a ze kterého se pak rozšířil i na jiné platformy - tedy operační systém Unix.
Unix používá INODES
Jestliže protokol NFS má zajišťovat plně transparentní sdílení souborů (v tom smyslu, jaký jsme si zavedli již v 70. dílu), pak pro aplikační programy nesmí existovat žádný viditelný rozdíl mezi místními a vzdálenými soubory.
![]() |
Rozhraní VFS/VNODE
Firma Sun, která protokol NFS vyvinula, vyřešila celý problém následujícím způsobem: rozhraní, ve kterém se nachází datové struktury INODE, "obalila" ještě jednou vrstvou - nazývanou Virtual File System (VFS) / Virtual File Node (VNODE) interface, a původní datové struktury INODE "překryla" poněkud obecnějšími datovými strukturami, které již mohou reprezentovat jak vzdálené soubory, tak i soubory místní. Tím ještě důsledněji oddělila společnou část systému souborů (nezávislou na konkrétní implementaci) od její implementačně závislé části. Výsledný efekt je takový, že nové rozhraní VFS/VNODE, vložené mezi obě tyto části, může být jednotné i v případě, kdy "překrývá" různě implementované systémy souborů - a to nejen vzdálené soubory, sdílené prostřednictvím protokolu NFS, ale také například místní soubory, uchovávané podle "zvyklostí" různých operačních systémů, v rámci kterých je protokol NFS implementován.
Jestliže tedy dříve pracovala společná část systému souborů přímo s rozhraním, obsahujícím struktury INODE (a označovaným jako "rozhraní INODE"), nyní již pracuje pouze s rozhraním VFS/VNODE a s datovými strukturami, které jsou v tomto rozhraní obsaženy. Původní struktury INODE sice nadále existují, ale systémová volání se k nim neobracejí přímo (ale pouze zprostředkovaně, přes datové struktury v rozhraní VFS/VNODE). V prostředí Unixu to samozřejmě znamenalo změnit všechna systémová volání, která zajišťují práci se soubory. Na druhé straně však toto řešení vyšlo vstříc nejen potřebám sdílení vzdálených souborů, ale také různým způsobům implementace souborových systémů v nejrůznějších "příchutích" Unixu (které mohou používat poněkud odlišné struktury INODE, a jednotné struktury v rozhraní VFS/VNODE).
Datové struktury VFS a VNODE
![]() |
RNODE vs. INODE
Datovou strukturu VNODE je nejlépe chápat jako společné "zastřešení" datových struktur, které již jsou závislé na konkrétní implementaci. Za tímto účelem obsahuje struktura VNODE ukazatel na datovou strukturu, která příslušný soubor či adresář skutečně reprezentuje, a se kterou jsou také sdruženy výkonné procedury, zajišťující nejrůznější akce s příslušným souborem či adresářem. V případě místního souboru je takovouto strukturou původní datová struktura INODE (a ukazatel v rámci struktury VNODE pak ukazuje na exemplář struktury INODE), se kterou jsou sdruženy procedury pro práci s místními soubory.
Pro potřeby reprezentace vzdálených souborů, sdílených prostřednictvím protokolu NFS, byl navržen další druh datové struktury: RNODE. Jednotlivé exempláře této datové struktury vznikají pouze na straně klienta, a obsahují mimo jiné i systémové identifikace vzdálených souborů, které si klient vyžádal na příslušném serveru (viz minulý díl). S těmito vzdálenými soubory se pak pracuje prostřednictvím procedur, které jsou s datovými strukturami sdruženy - a právě tyto procedury implementují vlastní protokol NFS pro sdílení vzdálených souborů v sítích. Přesný způsob fungování těchto konkrétních procedur je ovšem natolik zajímavý, že se mu budeme podrobněji věnovat v samostatném dílu tohoto seriálu.
![]() |
![]() |
BSD Unix vs. AT&T Unix
Rozhraní VFS/VNODE, které jsme si až dosud popisovali, bylo vytvořeno v rámci tzv. BSD větve Unixu verze 4.2 (viz 75. díl seriálu), kde se také protokol NFS prosadil nejdříve. V druhé hlavní větvi, tzv. AT&T Unixu, existovalo ve verzi System V Release 3 rozhraní s velmi podobnými datovými strukturami FSS (File System Switch). Bylo vyvinuto pro potřeby protokolu RFS (Remote File Sharing) firmy AT&T, který má stejné poslání jako protokol NFS - tedy zajišťovat transparentní sdílení souborů v sítích (ovšem na rozdíl od bezestavového protokolu NFS funguje jako stavový). Protokol NFS se však ukázal být životaschopnějším, a jeho používání se posléze prosadilo i do AT&T Unixu. Spolu s ním pak i rozhraní VFS/VNODE, které se stalo standardní součástí AT&T Unixu od verze System V Release 4.