下面我们介绍几种常见的实现文件共享的方法。
1.绕道法
在绕道法中,用户对所有文件的访问都是相对于当前目录进行的,当所访问的共享文件不在当前目录下时,从当前目录出发向上返回到与共享文件所在路径的交叉点,再沿路径下行到共享文件。
绕道法要求用户指定到达被共享文件的路径,并要回溯访问多级目录。因此,共享其他目录下的文件的搜索速度较慢。
2.链接法
链接法是将一个目录中的链接指针直接指向共享文件的目录项,如图7-8所示,在子目录Us1中以文件名u2共享子目录\er2\abc下的文件c,文件u2的目录项中用一指针指向文件c的目录项,从而可从子目录Us1下以文件名u2访问共享文件,也可从子目录abc下以文件名c访问共享文件。
图7-8 链接法共享文件
3.基本文件目录法
该方法是在文件目录分解为基本目录和符号目录的前提下实现的。只要在不同的符号目录中使用相同的文件内部标识符,就可实现文件的共享。如图7-9所示,文件b.c和文件tt.c就是在使用不同的名字共享一个文件。图中文件系统把0作为基本文件目录的标识符,1作为空文件目录的标识符,2作为主文件目录(根目录)的标识符。在图中,主目录有两个用户目录,ID=3是用户wang的文件目录,ID=4是用户zhang的文件目录。wang用文件名tt.c访问ID=6的共享文件,zhang用文件名b.c访问ID=6的共享文件。
图7-9 基本文件目录法共享文件
4.利用符号链实现文件共享
用户H为了共享用户C的一个文件f,可以由系统创建一个LINK类型的新文件,将新文件写入H的用户目录中,在新文件中只包含被链接文件f的路径名,这样的链接方法称为符号链接法。当H要访问被链接的LINK类型的文件f时,被操作系统截获,操作系统根据新文件中的路径名去读该文件,于是就实现了用户H对文件f的共享。
在利用符号链接方式实现文件共享时,只有文件创建者拥有文件的目录项;而共享该文件的其他用户只有该文件的路径名。这样,也就不会发生在文件主删除共享文件f后留下一个悬空指针的问题。当文件创建者把共享文件删除后,其他用户试图通过符号链去访问一个被删除的共享文件时,会因系统找不到该文件而使访问失败。于是将符号链删除掉,此时不会发生任何影响。
符号链接方式也会存在自己的问题,在其他用户去读共享文件时,系统是根据给定的文件路径名逐个分级地去查找目录,直至找到该文件的目录项。因此,在每次访问共享文件时就可能要多次读盘。这使每次访问文件的开销很大,且增加了启动磁盘的频率。此外,为每个共享用户建立一条符号链,由于该链实际上是一个文件,所以尽管该文件非常简单,却仍然要为其配置一个目录项,也要消耗一定的磁盘空间。(www.xing528.com)
符号链接方式有一个很大的优点,即能够用于链接(通过计算机网络)世界上任何地点的计算机中的文件,此时只需提供该文件所在计算机的网络地址以及在该计算机中的文件路径即可。
上述四种方法中的后三种都存在这样一个共同的问题:每个共享文件都具有几个文件名。每增加一条链路,就增加一个文件名。这在实质上就是每个用户都使用自己的路径名去访问共享文件。当试图去遍历整个文件系统时,将会多次遍历到该共享文件。例如,当有一个程序要将一个目录中的所有文件转存到磁盘上去时,可能产生一个文件的多个复制。
5.基于索引节点的共享方式
在树型结构的目录中,当有两个(或多个)用户要共享一个子目录或文件时,必须将共享文件或目录链接到两个(或多个)用户的目录中,以便能方便地找到该文件。如图7-10所示,此时该文件系统的目录结构已不再是树型结构,而是一个有向非循环图。
图7-10 包含共享文件的文件系统
如何建立B目录与共享文件之间的链接呢?如果在目录文件中包含了文件的物理地址,即文件所在盘块的盘块号,则在链接时,必须将文件的物理地址复制到目录B中。但如果以后B或C还要继续向该文件中添加新内容,也必然要相应地再添加新的盘块。而这些新增加的盘块,也只会出现在执行了该操作的目录中。可见,这种变化对其他用户而言是不可见的,因而新增加的这部分内容已不能被共享。
为了解决这个问题,可以引用索引节点,如图7-11所示。此时,由任何用户对文件进行追加操作或修改所引起的相应索引节点内容的改变,例如增加了新的盘块号,都是其他用户可见的,从而也就能提供给其他用户来共享。
图7-11 基于索引节点的共享方式
在索引节点中还应有一个链接计数count,用于表示链接到本索引节点(文件)上的用户目录项的数目。当count=3时,表示有3个用户目录项链接到本文件上,或者说有3个用户共享此文件。
当用户C创建一个新文件时,他是该文件的拥有者,此时将count置1。当有用户B要共享此文件时,在用户B的用户目录中增加一目录项,并设置一指针指向该文件的索引节点,此时,文件创建者依然是C,count=2。如果用户C不再需要此文件,是否能将文件删除呢?回答是否定的。因为删除了文件也必然删除了该文件的索引节点。这样,使B的指针悬空了,而B则可能正在此文件上执行写操作,此时只好中止。但如果C不删除此文件,等待B继续使用,由于文件创建者是C,如果系统要记账收费,则C必须继续为B使用该共享文件而付账,直至B不再需要。如图7-12所示的是B链接到文件前、后的情况。
图7-12 进程B链接到文件前、后的情况
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。