VyÜlo v t²denφku: COMPUTERWORLD
╚φslo:47/93
RoΦnφk:1993
Rubrika/kategorie: Co je Φφm ... v poΦφtaΦov²ch sφtφch
Dφl:77

zp∞t do archivu Φlßnk∙ | rejst°φk | p°edchozφ dφl | nßsledujφcφ dφl

Ji°φ Peterka: Co je Φφm ... v poΦφtaΦov²ch sφtφch (77):

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.

Obrßzek 77.1.
Obr. 77.1.: P°edstava rozhranφ INODE (bez NFS)
V prost°edφ operaΦnφho systΘmu Unix pracujφ aplikaΦnφ ·lohy se soubory zp∙sobem, kter² ukazuje obrßzek 77.1. - prost°ednictvφm systΘmov²ch volßnφ (system calls), kterΘ sm∞°ujφ do jßdra operaΦnφho systΘmu (kernel), a p°es n∞j pak do systΘmu soubor∙ (file system). To je tvo°eno spoleΦnou Φßstφ, nezßvislou na konkrΘtnφm druhu soubor∙, a dßle r∙zn²mi ovladaΦi, kterΘ ji₧ jsou implementaΦn∞ zßvislΘ. Mezi t∞mito dv∞ma vrstvami je pak rozhranφ, ve kterΘm se nachßzφ datovΘ struktury, popisujφcφ jednotlivΘ soubory - tzv. INODES (od: Information Nodes, n∞kdy tΘ₧: Index Nodes). V t∞chto datov²ch strukturßch jsou obsa₧eny nap°φklad informace o p°esnΘm umφst∞nφ souboru Φi adresß°e, o jeho velikosti, vlastnφkovi, o p°φstupov²ch prßvech apod. P°esn² v²znam i repertoßr t∞chto informacφ je vÜak "Üit na mφru" jednomu konkrΘtnφmu zp∙sobu uchovßvßnφ mφstnφch soubor∙, zatφmco vzdßlenΘ soubory, sdφlenΘ prost°ednictvφm sφt∞, vy₧adujφ p°eci jen n∞co jinΘho. OdliÜnosti zde sice nejsou nijak velkΘ, ale na druhΘ stran∞ zase nejsou zanedbatelnΘ a staΦφ na to, aby datovΘ struktury INODE nebyly p°φliÜ vhodnΘ pro souΦasnΘ reprezentovßnφ jak mφstnφch, tak i vzdßlen²ch soubor∙.

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

Obrßzek 77.2.
Obr. 77.2.: Vztah datov²ch struktur VFS a VNODE
DatovΘ struktury, obsa₧enΘ v novΘm rozhranφ, se jmenujφ p°φznaΦn∞: VFS a VNODE. Struktura VFS reprezentuje jeden konkrΘtnφ systΘm soubor∙ jako takov², zatφmco datovß struktura VNODE je zobecn∞nφm struktury INODE, a reprezentuje jeden konkrΘtnφ soubor Φi adresß°. Struktura VFS je vytvß°ena v rßmci p°ipojenφ souborovΘho systΘmu pomocφ operace mount (viz 74. dφl). SouΦasn∞ s tφm je vytvß°ena i jedna struktura VNODE, reprezentujφcφ uzel adresß°ovΘho stromu, ke kterΘmu je dotyΦn² souborov² systΘm p°ipojovßn (viz obr. 77.2.). DalÜφ struktury VNODE jsou pak vytvß°eny p°i otevφrßnφ jednotliv²ch soubor∙ (a adresß°∙) v rßmci p°φsluÜnΘho souborovΘho systΘmu, a za°azovßny do spojovΘho seznamu struktur VNODE, sdru₧enΘho s p°φsluÜnou strukturou VFS - viz op∞t obrßzek 77.2.

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.

Obrßzek 77.3.
Obr. 77.3.: P°edstava zpracovßnφ po₧adavku na p°φstup k souboru
Prozatφm si pouze naznaΦme, jak²m zp∙sobem jsou tyto procedury aktivovßny. Na stran∞ klienta je prvotnφm inicißtorem systΘmovΘ volßnφ, generovanΘ aplikaΦnφ ·lohou. Toto volßnφ specifikuje urΦitou strukturu VNODE, kterß se zase odkazuje na n∞kterou strukturu INODE Φi RNODE (nebo jin² druh datovΘ struktury, vytvo°enΘ pro pot°eby konkrΘtnφ implementace jinΘho druhu soubor∙ a adresß°∙). Podle toho, kam ukazatel v rßmci struktury VNODE ukazuje, je pak mo₧nΘ urΦit konkrΘtnφ procedury, kterΘ majφ b²t zavolßny - viz obrßzek 77.3. V²sledkem spuÜt∞nφ procedur, sdru₧en²ch s datovou strukturou INODE, je pak formulovßnφ konkrΘtnφho po₧adavku na server a jeho odeslßnφ.

Obrßzek 77.4.
Obr. 77.4.: Rozhranφ VFS/VNODE, INODE a RNODE na stran∞ klienta i serveru
Na stran∞ serveru je p°φjemcem tohoto po₧adavku systΘmov² proces (tzv. NFS dΘmon). Ten pak na zßklad∞ p°ijatΘho po₧adavku generuje systΘmovΘ volßnφ, kterΘ op∞t specifikuje urΦit² uzel VNODE. Ten ukazuje na konkrΘtnφ datovou strukturu, reprezentujφcφ po₧adovan² soubor Φi adresß° (celou situaci nßzorn∞ ilustruje obrßzek 77.4). V tΘto souvislosti je vhodnΘ si zd∙raznit, ₧e tentokrßte ji₧ musφ jφt o mφstnφ soubor Φi adresß° (a nikoli vzdßlen²). Tv∙rci protokolu NFS toti₧ vcelku rozumn∞ zakßzali tranzitivnost sdφlenφ soubor∙ v sφtφ. Tedy takovou situaci, kdy server nabφzφ sv²m klient∙m soubory, kterΘ sßm zφskßvß v roli klienta od jinΘho serveru. AΦkoli by to bylo principißln∞ mo₧nΘ, nenφ to efektivnφ. Mφsto p°es prost°ednφka se toti₧ ka₧d² klient m∙₧e obrßtit p°φmo na ten server, kter² po₧adovanΘ soubory skuteΦn∞ vlastnφ (jako lokßlnφ).

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.

zp∞t do archivu Φlßnk∙ | rejst°φk | p°edchozφ dφl | nßsledujφcφ dφl
Tento Φlßnek m∙₧e b²t voln∞ Üφ°en, pokud se tak d∞je pro studijnφ ·Φely, na nev²d∞leΦnΘm zßklad∞ a se zachovßnφm tohoto dov∞tku. Podrobnosti hledejte zde, resp. na adrese http://archiv.czech.net/copyleft.htm